Re: [mdadm PATCH] Create: move STOP_ARRAY to abort_locked

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 05/09/2017 01:54 AM, Jes Sorensen wrote:
On 05/07/2017 09:50 PM, Zhilong Liu wrote:


On 05/05/2017 11:31 AM, Liu Zhilong wrote:


On 05/04/2017 10:54 PM, Jes Sorensen wrote:
On 05/04/2017 08:20 AM, Zhilong Liu wrote:
Hi Jes,

apply for review, this is a bug I ever encountered.

Zhilong,

Under what circumstances do you see this?


Issued the command:
linux-g0sr:/home/test # ./mdadm -CR /dev/md0 -l1 -n2 -b internal
/dev/loop[0-1] --size 63
... ... ...
mdadm: Given bitmap chunk size not supported.
linux-g0sr:/home/test # ls /dev/md0
/dev/md0
linux-g0sr:/home/test # ls /sys/block/md0/md/
array_size   bitmap      component_size  level metadata_version
raid_disks         reshape_position safe_mode_delay
array_state  chunk_size  layout          max_read_errors
new_dev           reshape_direction  resync_start

create_mddev() writes the devnm to
/sys/module/md_mod/parameter/new_array,
then in md.c, module_param_call() called the 'set' function of
add_named_array(),
md_alloc() init_and_add the kobject for devm, finally the devnm device
has created
and sysfs has registered after create_mddev executed successfully.
Thus it's better
to STOP_ARRAY in any case after create_mddev() invoked.


this patch depends on the kernel commit:
039b7225e6e9 ("md: allow creation of mdNNN arrays via
md_mod/parameters/new_array")
Neil's patch has set "mddev->hold_active = UNTIL_STOP", thus the
STOP_ARRAY can work
well on this situation.

OK now I am confused - are you saying this change will only work after Neil's kernel patch has been applied? That would be no good, mdadm needs to work on older kernels too.


Yes, I do agree your kindly reminding. In order to fix this scenario that
exit the process abnormally but create_mddev() has invoked, so how
about declaring one utility function to do STOP_ARRAY like following,
it's a better way to stop the array if it opened by O_EXCL flag.

cut the piece code from Manage_stop():
... ...
    /* As we have an O_EXCL open, any use of the device
     * which blocks STOP_ARRAY is probably a transient use,
     * so it is reasonable to retry for a while - 5 seconds.
     */
    count = 25; err = 0;
    while (count && fd >= 0
           && (err = ioctl(fd, STOP_ARRAY, NULL)) < 0
           && errno == EBUSY) {
        usleep(200000);
        count --;
    }
... ...

Thanks,
-Zhilong

Jes




--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux