Manually set bd_bdev for hidden gendisk to ensure they are freed when the whole device bdev inode is freed. For normal gendisks this is done by bdev_add, which isn't called for hidden ones. Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- block/genhd.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/block/genhd.c b/block/genhd.c index 626c8406f21a6..563fb84ff746f 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -498,7 +498,10 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk, if (ret) goto out_put_slave_dir; - if (!(disk->flags & GENHD_FL_HIDDEN)) { + if (disk->flags & GENHD_FL_HIDDEN) { + /* needed so that the extended dev_t gets freed */ + disk->part0->bd_dev = MKDEV(disk->major, disk->first_minor); + } else { ret = bdi_register(disk->bdi, "%u:%u", disk->major, disk->first_minor); if (ret) -- 2.30.2