block: Fix dev_t minor allocation lifetime
authorKeith Busch <keith.busch@intel.com>
Tue, 26 Aug 2014 15:05:36 +0000 (09:05 -0600)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 5 Nov 2014 20:27:40 +0000 (20:27 +0000)
commita288cafeceb6e18ba4fd10ec8d3270593472cca6
tree3ec11e6f9758e5620b7d4f8ad55bc77ba9dd8083
parent1cc8e21690688b24b0b9388dbb14e1d2cf4f94b4
block: Fix dev_t minor allocation lifetime

commit 2da78092dda13f1efd26edbbf99a567776913750 upstream.

Releases the dev_t minor when all references are closed to prevent
another device from acquiring the same major/minor.

Since the partition's release may be invoked from call_rcu's soft-irq
context, the ext_dev_idr's mutex had to be replaced with a spinlock so
as not so sleep.

Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
[bwh: Backported to 3.2:
 - Adjust filename
 - idr insertion API is different, and blk_alloc_devt() is preallocating
   a node in a different way]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
block/genhd.c
fs/partitions/check.c