The badblocks list attached to a gendisk is optionally allocated by the driver which implies the driver owns the lifetime of the object. Do not automatically free it in del_gendisk(), leave that to the driver. This is in preparation for expanding the use of badblocks in libnvdimm drivers and introducing devm_alloc_badblocks(). Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> --- block/badblocks.c | 2 ++ block/genhd.c | 5 ----- drivers/nvdimm/pmem.c | 11 ++++++++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/block/badblocks.c b/block/badblocks.c index fabf6b64c2d1..37e5c0a2ef69 100644 --- a/block/badblocks.c +++ b/block/badblocks.c @@ -555,6 +555,8 @@ EXPORT_SYMBOL_GPL(badblocks_init); */ void badblocks_exit(struct badblocks *bb) { + if (!bb) + return; kfree(bb->page); bb->page = NULL; } diff --git a/block/genhd.c b/block/genhd.c index 5e78f6eec8dd..b96012849e26 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -660,11 +660,6 @@ static void del_gendisk_end(struct gendisk *disk) blk_unregister_queue(disk); blk_unregister_region(disk_devt(disk), disk->minors); - if (disk->bb) { - badblocks_exit(disk->bb); - kfree(disk->bb); - } - part_stat_set_all(&disk->part0, 0); disk->part0.stamp = 0; diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index d20c8112e90d..8f562acc5034 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c @@ -23,6 +23,7 @@ #include <linux/module.h> #include <linux/memory_hotplug.h> #include <linux/moduleparam.h> +#include <linux/badblocks.h> #include <linux/vmalloc.h> #include <linux/slab.h> #include <linux/pmem.h> @@ -155,11 +156,15 @@ static struct pmem_device *pmem_alloc(struct device *dev, static void pmem_detach_disk(struct pmem_device *pmem) { - if (!pmem->pmem_disk) + struct gendisk *disk = pmem->pmem_disk; + + if (!disk) return; - del_gendisk_queue(pmem->pmem_disk); - put_disk(pmem->pmem_disk); + badblocks_exit(disk->bb); + kfree(disk->bb); + del_gendisk_queue(disk); + put_disk(disk); } static int pmem_attach_disk(struct device *dev, -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html