summaryrefslogtreecommitdiffstats
path: root/drivers/md/multipath.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-02-21 18:25:57 +1100
committerNeilBrown <neilb@suse.de>2011-02-21 18:25:57 +1100
commitda9cf5050a2e3dbc3cf26a8d908482eb4485ed49 (patch)
treed5e7ea4ef419d07d294e88b47a4aaf2676a605eb /drivers/md/multipath.c
parent8f5f02c460b7ca74ce55ce126ce0c1e58a3f923d (diff)
downloadlinux-da9cf5050a2e3dbc3cf26a8d908482eb4485ed49.tar.gz
linux-da9cf5050a2e3dbc3cf26a8d908482eb4485ed49.tar.bz2
linux-da9cf5050a2e3dbc3cf26a8d908482eb4485ed49.zip
md: avoid spinlock problem in blk_throtl_exit
blk_throtl_exit assumes that ->queue_lock still exists, so make sure that it does. To do this, we stop redirecting ->queue_lock to conf->device_lock and leave it pointing where it is initialised - __queue_lock. As the blk_plug functions check the ->queue_lock is held, we now take that spin_lock explicitly around the plug functions. We don't need the locking, just the warning removal. This is needed for any kernel with the blk_throtl code, which is which is 2.6.37 and later. Cc: stable@kernel.org Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/multipath.c')
-rw-r--r--drivers/md/multipath.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c
index 6d7ddf32ef2e..3a62d440e27b 100644
--- a/drivers/md/multipath.c
+++ b/drivers/md/multipath.c
@@ -435,7 +435,6 @@ static int multipath_run (mddev_t *mddev)
* bookkeeping area. [whatever we allocate in multipath_run(),
* should be freed in multipath_stop()]
*/
- mddev->queue->queue_lock = &mddev->queue->__queue_lock;
conf = kzalloc(sizeof(multipath_conf_t), GFP_KERNEL);
mddev->private = conf;