The patch titled
     Subject: block: fix synchronization and limit check in blk_alloc_devt()
has been removed from the -mm tree.  Its filename was
     block-fix-synchronization-and-limit-check-in-blk_alloc_devt.patch

This patch was dropped because it was merged into mainline or a subsystem tree

------------------------------------------------------
From: Tejun Heo <[email protected]>
Subject: block: fix synchronization and limit check in blk_alloc_devt()

idr allocation in blk_alloc_devt() wasn't synchronized against lookup
and removal, and its limit check was off by one - 1 << MINORBITS is
the number of minors allowed, not the maximum allowed minor.

Add locking and rename MAX_EXT_DEVT to NR_EXT_DEVT and fix limit
checking.

Signed-off-by: Tejun Heo <[email protected]>
Acked-by: Jens Axboe <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
---

 block/genhd.c |   13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff -puN 
block/genhd.c~block-fix-synchronization-and-limit-check-in-blk_alloc_devt 
block/genhd.c
--- a/block/genhd.c~block-fix-synchronization-and-limit-check-in-blk_alloc_devt
+++ a/block/genhd.c
@@ -26,7 +26,7 @@ static DEFINE_MUTEX(block_class_lock);
 struct kobject *block_depr;
 
 /* for extended dynamic devt allocation, currently only one major is used */
-#define MAX_EXT_DEVT           (1 << MINORBITS)
+#define NR_EXT_DEVT            (1 << MINORBITS)
 
 /* For extended devt allocation.  ext_devt_mutex prevents look up
  * results from going away underneath its user.
@@ -425,19 +425,16 @@ int blk_alloc_devt(struct hd_struct *par
                        return -ENOMEM;
                mutex_lock(&ext_devt_mutex);
                rc = idr_get_new(&ext_devt_idr, part, &idx);
+               if (!rc && idx >= NR_EXT_DEVT) {
+                       idr_remove(&ext_devt_idr, idx);
+                       rc = -EBUSY;
+               }
                mutex_unlock(&ext_devt_mutex);
        } while (rc == -EAGAIN);
 
        if (rc)
                return rc;
 
-       if (idx > MAX_EXT_DEVT) {
-               mutex_lock(&ext_devt_mutex);
-               idr_remove(&ext_devt_idr, idx);
-               mutex_unlock(&ext_devt_mutex);
-               return -EBUSY;
-       }
-
        *devt = MKDEV(BLOCK_EXT_MAJOR, blk_mangle_minor(idx));
        return 0;
 }
_

Patches currently in -mm which might be from [email protected] are

origin.patch
linux-next.patch
slub-correctly-bootstrap-boot-caches.patch
block-restore-proc-partitions-to-not-display-non-partitionable-removable-devices.patch
coredump-only-sigkill-should-interrupt-the-coredumping-task.patch
coredump-ensure-that-sigkill-always-kills-the-dumping-thread.patch
coredump-sanitize-the-setting-of-signal-group_exit_code.patch
coredump-factor-out-the-setting-of-pf_dumpcore.patch
freezer-do-not-send-a-fake-signal-to-a-pf_dumpcore-thread.patch
coredump-make-wait_for_dump_helpers-freezable.patch
nfsd-idr_destroy-no-longer-needs-idr_remove_all.patch

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to