On 2021/12/17 1:19, Christoph Hellwig wrote: > On Thu, Dec 16, 2021 at 05:18:06PM +0100, Christoph Hellwig wrote: >>> out_disk_release_events: >>> - disk_release_events(disk); >>> + /* disk_release() will call disk_release_events(). */ >>> out_free_ext_minor: >>> if (disk->major == BLOCK_EXT_MAJOR) >>> blk_free_ext_minor(disk->first_minor); >> >> .. actually while you're at it - blk_free_ext_minor is also done >> by bdev_free_inode called from disk_release. >> >> So we can just remove the out_disk_release_events and out_free_ext_minor >> labels entirely. > > ... of course we can't. But we should return after the > device_del instead of falling through to the other resource cleanups. Well, I don't think that we can remove this blk_free_ext_minor() call, for this call is releasing disk->first_minor rather than MINOR(bdev->bd_dev). Since bdev_add(disk->part0, MKDEV(disk->major, disk->first_minor)) is not called when reaching the out_free_ext_minor label, if (MAJOR(bdev->bd_dev) == BLOCK_EXT_MAJOR) blk_free_ext_minor(MINOR(bdev->bd_dev)); in bdev_free_inode() will not be called because MAJOR(bdev->bd_dev) == 0 because bdev->bd_dev == 0. I think we can apply this patch as-is...