On Fri, May 30, 2025 at 2:48 PM Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> wrote: > > 在 2025/05/15 17:08, Xiao Ni 写道: > > UNTIL_STOP is used to avoid mddev is freed on the last close before adding > > disks to mddev. And it should be cleared when stopping an array which is > > mentioned in commit efeb53c0e572 ("md: Allow md devices to be created by > > name."). So reset ->hold_active to 0 in md_clean. > > > > And MD_CLOSING should be kept until mddev is freed to avoid reopen. > > > > Signed-off-by: Xiao Ni <xni@xxxxxxxxxx> > > --- > > drivers/md/md.c | 15 ++++----------- > > 1 file changed, 4 insertions(+), 11 deletions(-) > > > > Patch 1 applied to md-6.16 > > BTW, please send a new version for patch 2, we might consider it for > the next merge window. Thanks. I'm preparing patches for other changes. Regards Xiao > > Thanks, > Kuai > > > diff --git a/drivers/md/md.c b/drivers/md/md.c > > index 9daa78c5fe33..9b9950ed6ee9 100644 > > --- a/drivers/md/md.c > > +++ b/drivers/md/md.c > > @@ -6360,15 +6360,10 @@ static void md_clean(struct mddev *mddev) > > mddev->persistent = 0; > > mddev->level = LEVEL_NONE; > > mddev->clevel[0] = 0; > > - /* > > - * Don't clear MD_CLOSING, or mddev can be opened again. > > - * 'hold_active != 0' means mddev is still in the creation > > - * process and will be used later. > > - */ > > - if (mddev->hold_active) > > - mddev->flags = 0; > > - else > > - mddev->flags &= BIT_ULL_MASK(MD_CLOSING); > > + /* if UNTIL_STOP is set, it's cleared here */ > > + mddev->hold_active = 0; > > + /* Don't clear MD_CLOSING, or mddev can be opened again. */ > > + mddev->flags &= BIT_ULL_MASK(MD_CLOSING); > > mddev->sb_flags = 0; > > mddev->ro = MD_RDWR; > > mddev->metadata_type[0] = 0; > > @@ -6595,8 +6590,6 @@ static int do_md_stop(struct mddev *mddev, int mode) > > export_array(mddev); > > > > md_clean(mddev); > > - if (mddev->hold_active == UNTIL_STOP) > > - mddev->hold_active = 0; > > } > > md_new_event(); > > sysfs_notify_dirent_safe(mddev->sysfs_state); > > >