diff options
Diffstat (limited to 'block/genhd.c')
-rw-r--r-- | block/genhd.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/block/genhd.c b/block/genhd.c index 0a536dc05f3b..ea982eadaf63 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -422,9 +422,9 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt) | |||
422 | /* allocate ext devt */ | 422 | /* allocate ext devt */ |
423 | idr_preload(GFP_KERNEL); | 423 | idr_preload(GFP_KERNEL); |
424 | 424 | ||
425 | spin_lock(&ext_devt_lock); | 425 | spin_lock_bh(&ext_devt_lock); |
426 | idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT); | 426 | idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT); |
427 | spin_unlock(&ext_devt_lock); | 427 | spin_unlock_bh(&ext_devt_lock); |
428 | 428 | ||
429 | idr_preload_end(); | 429 | idr_preload_end(); |
430 | if (idx < 0) | 430 | if (idx < 0) |
@@ -449,9 +449,9 @@ void blk_free_devt(dev_t devt) | |||
449 | return; | 449 | return; |
450 | 450 | ||
451 | if (MAJOR(devt) == BLOCK_EXT_MAJOR) { | 451 | if (MAJOR(devt) == BLOCK_EXT_MAJOR) { |
452 | spin_lock(&ext_devt_lock); | 452 | spin_lock_bh(&ext_devt_lock); |
453 | idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); | 453 | idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); |
454 | spin_unlock(&ext_devt_lock); | 454 | spin_unlock_bh(&ext_devt_lock); |
455 | } | 455 | } |
456 | } | 456 | } |
457 | 457 | ||
@@ -653,7 +653,6 @@ void del_gendisk(struct gendisk *disk) | |||
653 | disk->flags &= ~GENHD_FL_UP; | 653 | disk->flags &= ~GENHD_FL_UP; |
654 | 654 | ||
655 | sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi"); | 655 | sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi"); |
656 | bdi_unregister(&disk->queue->backing_dev_info); | ||
657 | blk_unregister_queue(disk); | 656 | blk_unregister_queue(disk); |
658 | blk_unregister_region(disk_devt(disk), disk->minors); | 657 | blk_unregister_region(disk_devt(disk), disk->minors); |
659 | 658 | ||
@@ -691,13 +690,13 @@ struct gendisk *get_gendisk(dev_t devt, int *partno) | |||
691 | } else { | 690 | } else { |
692 | struct hd_struct *part; | 691 | struct hd_struct *part; |
693 | 692 | ||
694 | spin_lock(&ext_devt_lock); | 693 | spin_lock_bh(&ext_devt_lock); |
695 | part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); | 694 | part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt))); |
696 | if (part && get_disk(part_to_disk(part))) { | 695 | if (part && get_disk(part_to_disk(part))) { |
697 | *partno = part->partno; | 696 | *partno = part->partno; |
698 | disk = part_to_disk(part); | 697 | disk = part_to_disk(part); |
699 | } | 698 | } |
700 | spin_unlock(&ext_devt_lock); | 699 | spin_unlock_bh(&ext_devt_lock); |
701 | } | 700 | } |
702 | 701 | ||
703 | return disk; | 702 | return disk; |