diff options
author | David S. Miller <davem@davemloft.net> | 2012-11-25 12:49:17 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-25 12:49:17 -0500 |
commit | 24bc518a6888e4c97add5a5ebbff11c1ccac219f (patch) | |
tree | d125270f4e8432cebcbc8af9079dece51dd798a0 /drivers/md/dm.c | |
parent | b3e3bd71b429c04490d6a57671f2bbe2121d4f5a (diff) | |
parent | 194d9831f0419b5125dc94ec0ece4434d8ef74f0 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/wireless/iwlwifi/pcie/tx.c
Minor iwlwifi conflict in TX queue disabling between 'net', which
removed a bogus warning, and 'net-next' which added some status
register poking code.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r-- | drivers/md/dm.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 02db9183ca0..77e6eff41ca 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -740,8 +740,14 @@ static void rq_completed(struct mapped_device *md, int rw, int run_queue) if (!md_in_flight(md)) wake_up(&md->wait); + /* + * Run this off this callpath, as drivers could invoke end_io while + * inside their request_fn (and holding the queue lock). Calling + * back into ->request_fn() could deadlock attempting to grab the + * queue lock again. + */ if (run_queue) - blk_run_queue(md->queue); + blk_run_queue_async(md->queue); /* * dm_put() must be at the end of this function. See the comment above |