On Wed, Oct 13, 2021 at 8:19 AM Li Feng <fengli@xxxxxxxxxx> wrote: > > Looks good. Feel free to add: > > Reviewed-by: Li Feng <fengli@xxxxxxxxxx> > > > Xiao Ni <xni@xxxxxxxxxx> 于2021年10月13日周三 下午10:59写道: > > > > > > It doesn't update rdev superblock flags to disk after changing these flags. > > This patch does this job. > > > > Signed-off-by: Xiao Ni <xni@xxxxxxxxxx> I updated the commit log and applied it to md-next. Thanks, Song > > --- > > V2: calls md_update_sb directly > > --- > > drivers/md/md.c | 11 ++++++++++- > > 1 file changed, 10 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/md/md.c b/drivers/md/md.c > > index 6c0c3d0..e89eb46 100644 > > --- a/drivers/md/md.c > > +++ b/drivers/md/md.c > > @@ -2976,7 +2976,11 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) > > * -write_error - clears WriteErrorSeen > > * {,-}failfast - set/clear FailFast > > */ > > + > > + struct mddev *mddev = rdev->mddev; > > int err = -EINVAL; > > + bool need_update_sb = false; > > + > > if (cmd_match(buf, "faulty") && rdev->mddev->pers) { > > md_error(rdev->mddev, rdev); > > if (test_bit(Faulty, &rdev->flags)) > > @@ -2991,7 +2995,6 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) > > if (rdev->raid_disk >= 0) > > err = -EBUSY; > > else { > > - struct mddev *mddev = rdev->mddev; > > err = 0; > > if (mddev_is_clustered(mddev)) > > err = md_cluster_ops->remove_disk(mddev, rdev); > > @@ -3008,10 +3011,12 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) > > } else if (cmd_match(buf, "writemostly")) { > > set_bit(WriteMostly, &rdev->flags); > > mddev_create_serial_pool(rdev->mddev, rdev, false); > > + need_update_sb = true; > > err = 0; > > } else if (cmd_match(buf, "-writemostly")) { > > mddev_destroy_serial_pool(rdev->mddev, rdev, false); > > clear_bit(WriteMostly, &rdev->flags); > > + need_update_sb = true; > > err = 0; > > } else if (cmd_match(buf, "blocked")) { > > set_bit(Blocked, &rdev->flags); > > @@ -3037,9 +3042,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 = true; > > err = 0; > > } else if (cmd_match(buf, "-failfast")) { > > clear_bit(FailFast, &rdev->flags); > > + need_update_sb = true; > > err = 0; > > } else if (cmd_match(buf, "-insync") && rdev->raid_disk >= 0 && > > !test_bit(Journal, &rdev->flags)) { > > @@ -3118,6 +3125,8 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len) > > clear_bit(ExternalBbl, &rdev->flags); > > err = 0; > > } > > + if (need_update_sb) > > + md_update_sb(mddev, 1); > > if (!err) > > sysfs_notify_dirent_safe(rdev->sysfs_state); > > return err ? err : len; > > -- > > 2.7.5 > >