Re: [PATCH] block: fix leaking minors of hidden disks

Hannes Reinecke
2022-10-12T06:21:07Z

On 10/10/22 15:18, Christoph Hellwig wrote:
> The major/minor of a hidden gendisk is not propagated to the block
> device because it is never registered using bdev_add. But the lack of
> bd_dev also causes the dynamic major minor number not to be freed.
> Assign bd_dev manually to ensure the dynamic major minor gets freed.
>
> Based on a patch by Keith Busch.
>
> Fixes: 8ddcd653257c ("block: introduce GENHD_FL_HIDDEN")
> Reported-by: Daniel Wagner <dwagner@suse.de>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> Tested-by: Daniel Wagner <dwagner@suse.de>
> ---
> block/genhd.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/block/genhd.c b/block/genhd.c
> index 514395361d7c5..17b33c62423df 100644
> --- a/block/genhd.c
> +++ b/block/genhd.c
> @@ -507,6 +507,13 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
> */
> dev_set_uevent_suppress(ddev, 0);
> disk_uevent(disk, KOBJ_ADD);
> + } else {
> + /*
> + * Even if the block_device for a hidden gendisk is not
> + * registered, it needs to have a valid bd_dev so that the
> + * freeing of the dynamic major works.
> + */
> + disk->part0->bd_dev = MKDEV(disk->major, disk->first_minor);
> }
>
> disk_update_readahead(disk);

Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman