On 10/7/22 12:38, Keith Busch wrote: > From: Keith Busch <kbusch@xxxxxxxxxx> > > The major/minor of a hidden gendisk is not propagated to the block > device. This is required to suppress it from being visible. For these > disks, we need to handle freeing the dynamic minor directly when it's > released since bdev_free_inode() won't be able to. > > Cc: Christoph Hellwig <hch@xxxxxx> > Reported-by: Daniel Wagner <dwagner@xxxxxxx> > Signed-off-by: Keith Busch <kbusch@xxxxxxxxxx> > --- > v1->v2: > > Actually check that the disk is hidden before assuming the minor needs > to be freed. > > block/genhd.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/block/genhd.c b/block/genhd.c > index 514395361d7c..0afcdbb7575c 100644 > --- a/block/genhd.c > +++ b/block/genhd.c > @@ -1166,6 +1166,8 @@ static void disk_release(struct device *dev) > if (test_bit(GD_ADDED, &disk->state) && disk->fops->free_disk) > disk->fops->free_disk(disk); > > + if ((disk->flags & GENHD_FL_HIDDEN) && disk->major == BLOCK_EXT_MAJOR) > + blk_free_ext_minor(disk->first_minor); > iput(disk->part0->bd_inode); /* frees the disk */ > } > Looks good. Reviewed-by: Chaitanya Kulkarni <kch@xxxxxxxxxx> -ck