Re: [PATCH 1/2] md: Don't clear MD_CLOSING until mddev is freed

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

 



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.

Hi Kuai

The first patch isn't used to resolve the problem that /dev/md0 can't
be removed. So it's not useful to merge itself. I'll send all patches
in v2, so please remove it from this PR.

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);
> >
>






[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