* [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 @ 2021-10-08 3:22 Li Feng 2021-10-08 23:35 ` Song Liu 0 siblings, 1 reply; 12+ messages in thread From: Li Feng @ 2021-10-08 3:22 UTC (permalink / raw) To: Song Liu, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list Cc: Li Feng When the running RAID1/RAID10 need to be set with the fail_fast flag, we have to remove each device from RAID and re-add it again with the --fail_fast flag. Export the fail_fast flag to the userspace to support the read and write. Signed-off-by: Li Feng <fengli@smartx.com> --- drivers/md/md.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/md/md.c b/drivers/md/md.c index ae8fe54ea358..ce63972a4555 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -3583,6 +3583,35 @@ ppl_size_store(struct md_rdev *rdev, const char *buf, size_t len) static struct rdev_sysfs_entry rdev_ppl_size = __ATTR(ppl_size, S_IRUGO|S_IWUSR, ppl_size_show, ppl_size_store); +static ssize_t +fail_fast_show(struct md_rdev *rdev, char *page) +{ + return sprintf(page, "%d\n", test_bit(FailFast, &rdev->flags)); +} + +static ssize_t +fail_fast_store(struct md_rdev *rdev, const char *buf, size_t len) +{ + int ret; + bool bit; + + ret = kstrtobool(buf, &bit); + if (ret) + return ret; + + if (test_bit(FailFast, &rdev->flags) && !bit) { + clear_bit(FailFast, &rdev->flags); + md_update_sb(rdev->mddev, 1); + } else if (!test_bit(FailFast, &rdev->flags) && bit) { + set_bit(FailFast, &rdev->flags); + md_update_sb(rdev->mddev, 1); + } + return len; +} + +static struct rdev_sysfs_entry rdev_fail_fast = +__ATTR(fail_fast, 0644, fail_fast_show, fail_fast_store); + static struct attribute *rdev_default_attrs[] = { &rdev_state.attr, &rdev_errors.attr, @@ -3595,6 +3624,7 @@ static struct attribute *rdev_default_attrs[] = { &rdev_unack_bad_blocks.attr, &rdev_ppl_sector.attr, &rdev_ppl_size.attr, + &rdev_fail_fast.attr, NULL, }; static ssize_t -- 2.31.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-08 3:22 [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 Li Feng @ 2021-10-08 23:35 ` Song Liu 2021-10-11 7:49 ` Xiao Ni 0 siblings, 1 reply; 12+ messages in thread From: Song Liu @ 2021-10-08 23:35 UTC (permalink / raw) To: Li Feng; +Cc: open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list On Thu, Oct 7, 2021 at 8:22 PM Li Feng <fengli@smartx.com> wrote: > > When the running RAID1/RAID10 need to be set with the fail_fast flag, > we have to remove each device from RAID and re-add it again with the > --fail_fast flag. > > Export the fail_fast flag to the userspace to support the read and > write. > > Signed-off-by: Li Feng <fengli@smartx.com> Thanks for the patch! I applied it to md-next, with some changes in the commit log. Thanks, Song ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-08 23:35 ` Song Liu @ 2021-10-11 7:49 ` Xiao Ni 2021-10-11 9:42 ` Li Feng 0 siblings, 1 reply; 12+ messages in thread From: Xiao Ni @ 2021-10-11 7:49 UTC (permalink / raw) To: Song Liu Cc: Li Feng, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list Hi all Now the per device sysfs interface file state can change failfast. Do we need a new file for failfast? I did a test. The steps are: mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean cd /sys/block/md0/md/dev-sdb echo failfast > state cat state in_sync,failfast Best Regards Xiao On Sat, Oct 9, 2021 at 7:36 AM Song Liu <song@kernel.org> wrote: > > On Thu, Oct 7, 2021 at 8:22 PM Li Feng <fengli@smartx.com> wrote: > > > > When the running RAID1/RAID10 need to be set with the fail_fast flag, > > we have to remove each device from RAID and re-add it again with the > > --fail_fast flag. > > > > Export the fail_fast flag to the userspace to support the read and > > write. > > > > Signed-off-by: Li Feng <fengli@smartx.com> > > Thanks for the patch! I applied it to md-next, with some changes in the > commit log. > > Thanks, > Song > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-11 7:49 ` Xiao Ni @ 2021-10-11 9:42 ` Li Feng 2021-10-12 6:58 ` Xiao Ni 0 siblings, 1 reply; 12+ messages in thread From: Li Feng @ 2021-10-11 9:42 UTC (permalink / raw) To: Xiao Ni Cc: Song Liu, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > Hi all > > Now the per device sysfs interface file state can change failfast. Do > we need a new file for failfast? > > I did a test. The steps are: > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > cd /sys/block/md0/md/dev-sdb > echo failfast > state > cat state > in_sync,failfast This works, will it be persisted to disk? > > Best Regards > Xiao > > On Sat, Oct 9, 2021 at 7:36 AM Song Liu <song@kernel.org> wrote: > > > > On Thu, Oct 7, 2021 at 8:22 PM Li Feng <fengli@smartx.com> wrote: > > > > > > When the running RAID1/RAID10 need to be set with the fail_fast flag, > > > we have to remove each device from RAID and re-add it again with the > > > --fail_fast flag. > > > > > > Export the fail_fast flag to the userspace to support the read and > > > write. > > > > > > Signed-off-by: Li Feng <fengli@smartx.com> > > > > Thanks for the patch! I applied it to md-next, with some changes in the > > commit log. > > > > Thanks, > > Song > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-11 9:42 ` Li Feng @ 2021-10-12 6:58 ` Xiao Ni 2021-10-12 8:07 ` Li Feng 0 siblings, 1 reply; 12+ messages in thread From: Xiao Ni @ 2021-10-12 6:58 UTC (permalink / raw) To: Li Feng Cc: Song Liu, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list On Mon, Oct 11, 2021 at 5:42 PM Li Feng <fengli@smartx.com> wrote: > > Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > > > Hi all > > > > Now the per device sysfs interface file state can change failfast. Do > > we need a new file for failfast? > > > > I did a test. The steps are: > > > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > > cd /sys/block/md0/md/dev-sdb > > echo failfast > state > > cat state > > in_sync,failfast > > This works, will it be persisted to disk? > mdadm --detail /dev/md0 can show the failfast information. So it should be written in superblock. But I don't find how md does this. I'm looking at this. Regards Xiao ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-12 6:58 ` Xiao Ni @ 2021-10-12 8:07 ` Li Feng 2021-10-12 8:17 ` Song Liu 0 siblings, 1 reply; 12+ messages in thread From: Li Feng @ 2021-10-12 8:07 UTC (permalink / raw) To: Xiao Ni Cc: Song Liu, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list Xiao Ni <xni@redhat.com> 于2021年10月12日周二 下午2:58写道: > > On Mon, Oct 11, 2021 at 5:42 PM Li Feng <fengli@smartx.com> wrote: > > > > Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > > > > > Hi all > > > > > > Now the per device sysfs interface file state can change failfast. Do > > > we need a new file for failfast? > > > > > > I did a test. The steps are: > > > > > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > > > cd /sys/block/md0/md/dev-sdb > > > echo failfast > state > > > cat state > > > in_sync,failfast > > > > This works, will it be persisted to disk? > > > > mdadm --detail /dev/md0 can show the failfast information. So it > should be written in superblock. > But I don't find how md does this. I'm looking at this. > Yes, I have tested that it has been persisted, but don't understand who does it. > Regards > Xiao > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-12 8:07 ` Li Feng @ 2021-10-12 8:17 ` Song Liu 2021-10-12 8:43 ` Li Feng 0 siblings, 1 reply; 12+ messages in thread From: Song Liu @ 2021-10-12 8:17 UTC (permalink / raw) To: Li Feng Cc: Xiao Ni, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list On Tue, Oct 12, 2021 at 1:07 AM Li Feng <fengli@smartx.com> wrote: > > Xiao Ni <xni@redhat.com> 于2021年10月12日周二 下午2:58写道: > > > > On Mon, Oct 11, 2021 at 5:42 PM Li Feng <fengli@smartx.com> wrote: > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > > > > > > > Hi all > > > > > > > > Now the per device sysfs interface file state can change failfast. Do > > > > we need a new file for failfast? > > > > > > > > I did a test. The steps are: > > > > > > > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > > > > cd /sys/block/md0/md/dev-sdb > > > > echo failfast > state > > > > cat state > > > > in_sync,failfast > > > > > > This works, will it be persisted to disk? > > > > > > > mdadm --detail /dev/md0 can show the failfast information. So it > > should be written in superblock. > > But I don't find how md does this. I'm looking at this. > > > Yes, I have tested that it has been persisted, but don't understand who does it. I think this is not guaranteed to be persistent: [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state in_sync,failfast [root@eth50-1 ~]# echo -failfast > /sys/block/md127/md/rd1/state [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state in_sync [root@eth50-1 ~]# mdadm --stop /dev/md* mdadm: /dev/md does not appear to be an md device mdadm: stopped /dev/md127 [root@eth50-1 ~]# mdadm -As mdadm: /dev/md/0_0 has been started with 4 drives. [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state in_sync,failfast How about we fix state_store to make sure it is always persistent? Thanks, Song ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-12 8:17 ` Song Liu @ 2021-10-12 8:43 ` Li Feng 2021-10-12 8:49 ` Xiao Ni 0 siblings, 1 reply; 12+ messages in thread From: Li Feng @ 2021-10-12 8:43 UTC (permalink / raw) To: Song Liu Cc: Xiao Ni, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list Song Liu <song@kernel.org> 于2021年10月12日周二 下午4:17写道: > > On Tue, Oct 12, 2021 at 1:07 AM Li Feng <fengli@smartx.com> wrote: > > > > Xiao Ni <xni@redhat.com> 于2021年10月12日周二 下午2:58写道: > > > > > > On Mon, Oct 11, 2021 at 5:42 PM Li Feng <fengli@smartx.com> wrote: > > > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > > > > > > > > > Hi all > > > > > > > > > > Now the per device sysfs interface file state can change failfast. Do > > > > > we need a new file for failfast? > > > > > > > > > > I did a test. The steps are: > > > > > > > > > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > > > > > cd /sys/block/md0/md/dev-sdb > > > > > echo failfast > state > > > > > cat state > > > > > in_sync,failfast > > > > > > > > This works, will it be persisted to disk? > > > > > > > > > > mdadm --detail /dev/md0 can show the failfast information. So it > > > should be written in superblock. > > > But I don't find how md does this. I'm looking at this. > > > > > Yes, I have tested that it has been persisted, but don't understand who does it. > > I think this is not guaranteed to be persistent: > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > in_sync,failfast > [root@eth50-1 ~]# echo -failfast > /sys/block/md127/md/rd1/state > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > in_sync > [root@eth50-1 ~]# mdadm --stop /dev/md* > mdadm: /dev/md does not appear to be an md device > mdadm: stopped /dev/md127 > [root@eth50-1 ~]# mdadm -As > mdadm: /dev/md/0_0 has been started with 4 drives. > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > in_sync,failfast > > How about we fix state_store to make sure it is always persistent? > I agree with you. > Thanks, > Song ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-12 8:43 ` Li Feng @ 2021-10-12 8:49 ` Xiao Ni 2021-10-12 9:13 ` Li Feng 2021-10-12 17:20 ` Song Liu 0 siblings, 2 replies; 12+ messages in thread From: Xiao Ni @ 2021-10-12 8:49 UTC (permalink / raw) To: Li Feng Cc: Song Liu, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list Hi all How about this patch? Now writemostly flag doesn't be stored in superblock too. So this patch fix this problem too. If this patch is ok, I'll send the patch. diff --git a/drivers/md/md.c b/drivers/md/md.c index 6c0c3d0d905a..9e8a8c5c7758 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -2977,6 +2977,7 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) * {,-}failfast - set/clear FailFast */ int err = -EINVAL; + int need_update_sb = 0; if (cmd_match(buf, "faulty") && rdev->mddev->pers) { md_error(rdev->mddev, rdev); if (test_bit(Faulty, &rdev->flags)) @@ -2998,20 +2999,19 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) if (err == 0) { md_kick_rdev_from_array(rdev); - if (mddev->pers) { - set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); - md_wakeup_thread(mddev->thread); - } + need_update_sb = 1; md_new_event(mddev); } } } else if (cmd_match(buf, "writemostly")) { set_bit(WriteMostly, &rdev->flags); mddev_create_serial_pool(rdev->mddev, rdev, false); + need_update_sb = 1; err = 0; } else if (cmd_match(buf, "-writemostly")) { mddev_destroy_serial_pool(rdev->mddev, rdev, false); clear_bit(WriteMostly, &rdev->flags); + need_update_sb = 1; err = 0; } else if (cmd_match(buf, "blocked")) { set_bit(Blocked, &rdev->flags); @@ -3037,9 +3037,11 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) err = 0; } else if (cmd_match(buf, "failfast")) { set_bit(FailFast, &rdev->flags); + need_update_sb = 1; err = 0; } else if (cmd_match(buf, "-failfast")) { clear_bit(FailFast, &rdev->flags); + need_update_sb = 1; err = 0; } else if (cmd_match(buf, "-insync") && rdev->raid_disk >= 0 && !test_bit(Journal, &rdev->flags)) { @@ -3120,6 +3122,11 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) } if (!err) sysfs_notify_dirent_safe(rdev->sysfs_state); + if (need_update_sb) + if (mddev->pers) { + set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); + md_wakeup_thread(mddev->thread); + } return err ? err : len; } static struct rdev_sysfs_entry rdev_state = On Tue, Oct 12, 2021 at 4:44 PM Li Feng <fengli@smartx.com> wrote: > > Song Liu <song@kernel.org> 于2021年10月12日周二 下午4:17写道: > > > > On Tue, Oct 12, 2021 at 1:07 AM Li Feng <fengli@smartx.com> wrote: > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月12日周二 下午2:58写道: > > > > > > > > On Mon, Oct 11, 2021 at 5:42 PM Li Feng <fengli@smartx.com> wrote: > > > > > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > > > > > > > > > > > Hi all > > > > > > > > > > > > Now the per device sysfs interface file state can change failfast. Do > > > > > > we need a new file for failfast? > > > > > > > > > > > > I did a test. The steps are: > > > > > > > > > > > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > > > > > > cd /sys/block/md0/md/dev-sdb > > > > > > echo failfast > state > > > > > > cat state > > > > > > in_sync,failfast > > > > > > > > > > This works, will it be persisted to disk? > > > > > > > > > > > > > mdadm --detail /dev/md0 can show the failfast information. So it > > > > should be written in superblock. > > > > But I don't find how md does this. I'm looking at this. > > > > > > > Yes, I have tested that it has been persisted, but don't understand who does it. > > > > I think this is not guaranteed to be persistent: > > > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > in_sync,failfast > > [root@eth50-1 ~]# echo -failfast > /sys/block/md127/md/rd1/state > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > in_sync > > [root@eth50-1 ~]# mdadm --stop /dev/md* > > mdadm: /dev/md does not appear to be an md device > > mdadm: stopped /dev/md127 > > [root@eth50-1 ~]# mdadm -As > > mdadm: /dev/md/0_0 has been started with 4 drives. > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > in_sync,failfast > > > > How about we fix state_store to make sure it is always persistent? > > > I agree with you. > > > Thanks, > > Song > ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-12 8:49 ` Xiao Ni @ 2021-10-12 9:13 ` Li Feng 2021-10-13 7:57 ` Xiao Ni 2021-10-12 17:20 ` Song Liu 1 sibling, 1 reply; 12+ messages in thread From: Li Feng @ 2021-10-12 9:13 UTC (permalink / raw) To: Xiao Ni Cc: Song Liu, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list Thanks, Feng Li Xiao Ni <xni@redhat.com> 于2021年10月12日周二 下午4:49写道: > > Hi all > > How about this patch? Now writemostly flag doesn't be stored in > superblock too. So this patch fix this problem too. > If this patch is ok, I'll send the patch. > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 6c0c3d0d905a..9e8a8c5c7758 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -2977,6 +2977,7 @@ state_store(struct md_rdev *rdev, const char > *buf, size_t len) > * {,-}failfast - set/clear FailFast > */ > int err = -EINVAL; > + int need_update_sb = 0; > if (cmd_match(buf, "faulty") && rdev->mddev->pers) { > md_error(rdev->mddev, rdev); > if (test_bit(Faulty, &rdev->flags)) > @@ -2998,20 +2999,19 @@ state_store(struct md_rdev *rdev, const char > *buf, size_t len) > > if (err == 0) { > md_kick_rdev_from_array(rdev); > - if (mddev->pers) { > - set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); > - md_wakeup_thread(mddev->thread); > - } > + need_update_sb = 1; > md_new_event(mddev); > } > } > } else if (cmd_match(buf, "writemostly")) { > set_bit(WriteMostly, &rdev->flags); > mddev_create_serial_pool(rdev->mddev, rdev, false); > + need_update_sb = 1; > err = 0; > } else if (cmd_match(buf, "-writemostly")) { > mddev_destroy_serial_pool(rdev->mddev, rdev, false); > clear_bit(WriteMostly, &rdev->flags); > + need_update_sb = 1; > err = 0; > } else if (cmd_match(buf, "blocked")) { > set_bit(Blocked, &rdev->flags); > @@ -3037,9 +3037,11 @@ state_store(struct md_rdev *rdev, const char > *buf, size_t len) > err = 0; > } else if (cmd_match(buf, "failfast")) { > set_bit(FailFast, &rdev->flags); > + need_update_sb = 1; > err = 0; > } else if (cmd_match(buf, "-failfast")) { > clear_bit(FailFast, &rdev->flags); > + need_update_sb = 1; > err = 0; > } else if (cmd_match(buf, "-insync") && rdev->raid_disk >= 0 && > !test_bit(Journal, &rdev->flags)) { > @@ -3120,6 +3122,11 @@ state_store(struct md_rdev *rdev, const char > *buf, size_t len) > } > if (!err) > sysfs_notify_dirent_safe(rdev->sysfs_state); > + if (need_update_sb) > + if (mddev->pers) { > + set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); > + md_wakeup_thread(mddev->thread); > + } When will mddev->pers is NULL? If it is NULL, this change will not on disk. > return err ? err : len; > } > static struct rdev_sysfs_entry rdev_state = > > On Tue, Oct 12, 2021 at 4:44 PM Li Feng <fengli@smartx.com> wrote: > > > > Song Liu <song@kernel.org> 于2021年10月12日周二 下午4:17写道: > > > > > > On Tue, Oct 12, 2021 at 1:07 AM Li Feng <fengli@smartx.com> wrote: > > > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月12日周二 下午2:58写道: > > > > > > > > > > On Mon, Oct 11, 2021 at 5:42 PM Li Feng <fengli@smartx.com> wrote: > > > > > > > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > > > > > > > > > > > > > Hi all > > > > > > > > > > > > > > Now the per device sysfs interface file state can change failfast. Do > > > > > > > we need a new file for failfast? > > > > > > > > > > > > > > I did a test. The steps are: > > > > > > > > > > > > > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > > > > > > > cd /sys/block/md0/md/dev-sdb > > > > > > > echo failfast > state > > > > > > > cat state > > > > > > > in_sync,failfast > > > > > > > > > > > > This works, will it be persisted to disk? > > > > > > > > > > > > > > > > mdadm --detail /dev/md0 can show the failfast information. So it > > > > > should be written in superblock. > > > > > But I don't find how md does this. I'm looking at this. > > > > > > > > > Yes, I have tested that it has been persisted, but don't understand who does it. > > > > > > I think this is not guaranteed to be persistent: > > > > > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > > in_sync,failfast > > > [root@eth50-1 ~]# echo -failfast > /sys/block/md127/md/rd1/state > > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > > in_sync > > > [root@eth50-1 ~]# mdadm --stop /dev/md* > > > mdadm: /dev/md does not appear to be an md device > > > mdadm: stopped /dev/md127 > > > [root@eth50-1 ~]# mdadm -As > > > mdadm: /dev/md/0_0 has been started with 4 drives. > > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > > in_sync,failfast > > > > > > How about we fix state_store to make sure it is always persistent? > > > > > I agree with you. > > > > > Thanks, > > > Song > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-12 9:13 ` Li Feng @ 2021-10-13 7:57 ` Xiao Ni 0 siblings, 0 replies; 12+ messages in thread From: Xiao Ni @ 2021-10-13 7:57 UTC (permalink / raw) To: Li Feng Cc: Song Liu, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list On Tue, Oct 12, 2021 at 5:14 PM Li Feng <fengli@smartx.com> wrote: > > sysfs_notify_dirent_safe(rdev->sysfs_state); > > + if (need_update_sb) > > + if (mddev->pers) { > > + set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); > > + md_wakeup_thread(mddev->thread); > > + } > When will mddev->pers is NULL? The process of creating a raid device is: 1. md_ioctl->md_add_new_disk 2. md_ioctl->do_md_run->md_run->(pers->run)->(mddev->pers = pers) In md_add_new_disk it creates the per device sysfs files. It can read/write these files before setting mddev->pers. > If it is NULL, this change will not on disk. I did a test. You are right. Someone can change the per device state before ADD_NEW_DISK and RUN_ARRAY ioctl. Please note, the mdadm --create command doesn't return until RUN_ARRAY ioctl finishes. Even though the are small, we can try to set MD_SB_CHANGE_DEVS. Best regards Xiao ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 2021-10-12 8:49 ` Xiao Ni 2021-10-12 9:13 ` Li Feng @ 2021-10-12 17:20 ` Song Liu 1 sibling, 0 replies; 12+ messages in thread From: Song Liu @ 2021-10-12 17:20 UTC (permalink / raw) To: Xiao Ni Cc: Li Feng, open list:SOFTWARE RAID (Multiple Disks) SUPPORT, open list On Tue, Oct 12, 2021 at 1:49 AM Xiao Ni <xni@redhat.com> wrote: > > Hi all > > How about this patch? Now writemostly flag doesn't be stored in > superblock too. So this patch fix this problem too. > If this patch is ok, I'll send the patch. > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 6c0c3d0d905a..9e8a8c5c7758 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -2977,6 +2977,7 @@ state_store(struct md_rdev *rdev, const char > *buf, size_t len) > * {,-}failfast - set/clear FailFast > */ > int err = -EINVAL; > + int need_update_sb = 0; Please use bool for need_update_sb. > if (cmd_match(buf, "faulty") && rdev->mddev->pers) { > md_error(rdev->mddev, rdev); > if (test_bit(Faulty, &rdev->flags)) [...] > @@ -3120,6 +3122,11 @@ state_store(struct md_rdev *rdev, const char > *buf, size_t len) > } > if (!err) > sysfs_notify_dirent_safe(rdev->sysfs_state); > + if (need_update_sb) > + if (mddev->pers) { We can merge the two conditions in in one line if (need_update_sb && mddev->pers) { ... } > + set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); > + md_wakeup_thread(mddev->thread); > + } > return err ? err : len; > } > static struct rdev_sysfs_entry rdev_state = > > On Tue, Oct 12, 2021 at 4:44 PM Li Feng <fengli@smartx.com> wrote: > > > > Song Liu <song@kernel.org> 于2021年10月12日周二 下午4:17写道: > > > > > > On Tue, Oct 12, 2021 at 1:07 AM Li Feng <fengli@smartx.com> wrote: > > > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月12日周二 下午2:58写道: > > > > > > > > > > On Mon, Oct 11, 2021 at 5:42 PM Li Feng <fengli@smartx.com> wrote: > > > > > > > > > > > > Xiao Ni <xni@redhat.com> 于2021年10月11日周一 下午3:49写道: > > > > > > > > > > > > > > Hi all > > > > > > > > > > > > > > Now the per device sysfs interface file state can change failfast. Do > > > > > > > we need a new file for failfast? > > > > > > > > > > > > > > I did a test. The steps are: > > > > > > > > > > > > > > mdadm -CR /dev/md0 -l1 -n2 /dev/sdb /dev/sdc --assume-clean > > > > > > > cd /sys/block/md0/md/dev-sdb > > > > > > > echo failfast > state > > > > > > > cat state > > > > > > > in_sync,failfast > > > > > > > > > > > > This works, will it be persisted to disk? > > > > > > > > > > > > > > > > mdadm --detail /dev/md0 can show the failfast information. So it > > > > > should be written in superblock. > > > > > But I don't find how md does this. I'm looking at this. > > > > > > > > > Yes, I have tested that it has been persisted, but don't understand who does it. > > > > > > I think this is not guaranteed to be persistent: > > > > > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > > in_sync,failfast > > > [root@eth50-1 ~]# echo -failfast > /sys/block/md127/md/rd1/state > > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > > in_sync > > > [root@eth50-1 ~]# mdadm --stop /dev/md* > > > mdadm: /dev/md does not appear to be an md device > > > mdadm: stopped /dev/md127 > > > [root@eth50-1 ~]# mdadm -As > > > mdadm: /dev/md/0_0 has been started with 4 drives. > > > [root@eth50-1 ~]# cat /sys/block/md127/md/rd1/state > > > in_sync,failfast > > > > > > How about we fix state_store to make sure it is always persistent? > > > > > I agree with you. > > > > > Thanks, > > > Song > > > ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-10-13 7:58 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-10-08 3:22 [PATCH RESEND] md: allow to set the fail_fast on RAID1/RAID10 Li Feng 2021-10-08 23:35 ` Song Liu 2021-10-11 7:49 ` Xiao Ni 2021-10-11 9:42 ` Li Feng 2021-10-12 6:58 ` Xiao Ni 2021-10-12 8:07 ` Li Feng 2021-10-12 8:17 ` Song Liu 2021-10-12 8:43 ` Li Feng 2021-10-12 8:49 ` Xiao Ni 2021-10-12 9:13 ` Li Feng 2021-10-13 7:57 ` Xiao Ni 2021-10-12 17:20 ` Song Liu
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.