]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - block/genhd.c
Merge remote-tracking branches 'asoc/fix/rt5665', 'asoc/fix/simple', 'asoc/fix/sti...
[karo-tx-linux.git] / block / genhd.c
index 3631cd4802955247d27316c10b172744700e6340..b26a5ea115d00b51f20c8e59f09a420b2dbadc9f 100644 (file)
@@ -669,18 +669,23 @@ void del_gendisk(struct gendisk *disk)
        disk_part_iter_init(&piter, disk,
                             DISK_PITER_INCL_EMPTY | DISK_PITER_REVERSE);
        while ((part = disk_part_iter_next(&piter))) {
-               bdev_unhash_inode(MKDEV(disk->major,
-                                       disk->first_minor + part->partno));
                invalidate_partition(disk, part->partno);
+               bdev_unhash_inode(part_devt(part));
                delete_partition(disk, part->partno);
        }
        disk_part_iter_exit(&piter);
 
        invalidate_partition(disk, 0);
+       bdev_unhash_inode(disk_devt(disk));
        set_capacity(disk, 0);
        disk->flags &= ~GENHD_FL_UP;
 
        sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
+       /*
+        * Unregister bdi before releasing device numbers (as they can get
+        * reused and we'd get clashes in sysfs).
+        */
+       bdi_unregister(disk->queue->backing_dev_info);
        blk_unregister_queue(disk);
        blk_unregister_region(disk_devt(disk), disk->minors);