block: clarify badblocks lifetime
authorDan Williams <dan.j.williams@intel.com>
Wed, 6 Jan 2016 20:03:41 +0000 (12:03 -0800)
committerDan Williams <dan.j.williams@intel.com>
Sat, 9 Jan 2016 16:39:04 +0000 (08:39 -0800)
The badblocks list attached to a gendisk is allocated by the driver
which equates to the driver owning the lifetime of the object.  Do not
automatically free it in del_gendisk(). This is in preparation for
expanding the use of badblocks in libnvdimm drivers and introducing
devm_init_badblocks().

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
block/badblocks.c
block/genhd.c

index fabf6b64c2d17692b511336de3e113c18c3e95e6..37e5c0a2ef6952cc71bd6e0ad1dd789ca83d6b3c 100644 (file)
@@ -555,6 +555,8 @@ EXPORT_SYMBOL_GPL(badblocks_init);
  */
 void badblocks_exit(struct badblocks *bb)
 {
+       if (!bb)
+               return;
        kfree(bb->page);
        bb->page = NULL;
 }
index f463c67e6ba2611e896382ba9485aa00b4644b23..aa38cd0a66c76b72c7f1bc90fea55590bcbf52c9 100644 (file)
@@ -670,11 +670,6 @@ void del_gendisk(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;