Re: [PATCH 5/9] block: introduce holder ops

Darrick J. Wong
2023-05-16T14:36:34Z

On Tue, May 16, 2023 at 07:02:31PM +0800, Ming Lei wrote:
> On Fri, May 05, 2023 at 01:51:28PM -0400, Christoph Hellwig wrote:
> > Add a new blk_holder_ops structure, which is passed to blkdev_get_by_* and
> > installed in the block_device for exclusive claims. It will be used to
> > allow the block layer to call back into the user of the block device for
> > thing like notification of a removed device or a device resize.
> >
> > Signed-off-by: Christoph Hellwig <hch@lst.de>
> > ---
>
> ...
>
> > @@ -542,7 +543,8 @@ static void bd_clear_claiming(struct block_device *whole, void *holder)
> > * Finish exclusive open of a block device. Mark the device as exlusively
> > * open by the holder and wake up all waiters for exclusive open to finish.
> > */
> > -static void bd_finish_claiming(struct block_device *bdev, void *holder)
> > +static void bd_finish_claiming(struct block_device *bdev, void *holder,
> > + const struct blk_holder_ops *hops)
> > {
> > struct block_device *whole = bdev_whole(bdev);
> >
> > @@ -555,7 +557,10 @@ static void bd_finish_claiming(struct block_device *bdev, void *holder)
> > whole->bd_holders++;
> > whole->bd_holder = bd_may_claim;
> > bdev->bd_holders++;
> > + mutex_lock(&bdev->bd_holder_lock);
> > bdev->bd_holder = holder;
> > + bdev->bd_holder_ops = hops;
> > + mutex_unlock(&bdev->bd_holder_lock);
> > bd_clear_claiming(whole, holder);
> > mutex_unlock(&bdev_lock);
> > }
>
> I guess the holder ops may be override in case of multiple claim, can
> this be one problem from the holder ops user viewpoint? Or
> warn_on_once(bdev->bd_holder_ops && bdev->bd_holder_ops != hops) is needed here?

<shrug> I'd have thought bd_may_claim would suffice for detecting
multiple claims based on its "bd_holder != NULL" test?

Though I suppose an explicit test for bd_holder_ops != NULL would
prevent multiple claims if all the claims had NULL holders.

--D

>
> Thanks,
> Ming
>