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@xxxxxx> > --- ... > @@ -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? Thanks, Ming