These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / block / genhd.c
index ea982ea..e5cafa5 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/kdev_t.h>
 #include <linux/kernel.h>
 #include <linux/blkdev.h>
+#include <linux/backing-dev.h>
 #include <linux/init.h>
 #include <linux/spinlock.h>
 #include <linux/proc_fs.h>
@@ -629,6 +630,7 @@ void add_disk(struct gendisk *disk)
        WARN_ON(retval);
 
        disk_add_events(disk);
+       blk_integrity_add(disk);
 }
 EXPORT_SYMBOL(add_disk);
 
@@ -637,6 +639,7 @@ void del_gendisk(struct gendisk *disk)
        struct disk_part_iter piter;
        struct hd_struct *part;
 
+       blk_integrity_del(disk);
        disk_del_events(disk);
 
        /* invalidate stuff */
@@ -1109,8 +1112,7 @@ static void disk_release(struct device *dev)
        disk_release_events(disk);
        kfree(disk->random);
        disk_replace_part_tbl(disk, NULL);
-       free_part_stats(&disk->part0);
-       free_part_info(&disk->part0);
+       hd_free_part(&disk->part0);
        if (disk->queue)
                blk_put_queue(disk->queue);
        kfree(disk);
@@ -1284,7 +1286,11 @@ struct gendisk *alloc_disk_node(int minors, int node_id)
                 * converted to make use of bd_mutex and sequence counters.
                 */
                seqcount_init(&disk->part0.nr_sects_seq);
-               hd_ref_init(&disk->part0);
+               if (hd_ref_init(&disk->part0)) {
+                       hd_free_part(&disk->part0);
+                       kfree(disk);
+                       return NULL;
+               }
 
                disk->minors = minors;
                rand_initialize_disk(disk);