summaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorJens Axboe <jaxboe@fusionio.com>2011-04-12 16:58:51 +0400
committerJens Axboe <jaxboe@fusionio.com>2011-04-12 16:58:51 +0400
commitf4af3c3d077a004762aaad052049c809fd8c6f0c (patch)
treec4cbbc37e357775fc8200e16c6eb9b3f14d30069 /block
parentcf82c798394cd443eed7d91f998b79a63f341e91 (diff)
downloadlinux-f4af3c3d077a004762aaad052049c809fd8c6f0c.tar.xz
block: move queue run on unplug to kblockd
There are worries that we are now consuming a lot more stack in some cases, since we potentially call into IO dispatch from schedule() or io_schedule(). We can reduce this problem by moving the running of the queue to kblockd, like the old plugging scheme did as well. This may or may not be a good idea from a performance perspective, depending on how many tasks have queue plugs running at the same time. For even the slightly contended case, doing just a single queue run from kblockd instead of multiple runs directly from the unpluggers will be faster. Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'block')
-rw-r--r--block/blk-core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index c6eaa1f56466..36b1a7559f94 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2665,7 +2665,7 @@ static int plug_rq_cmp(void *priv, struct list_head *a, struct list_head *b)
static void queue_unplugged(struct request_queue *q, unsigned int depth)
{
trace_block_unplug_io(q, depth);
- __blk_run_queue(q, false);
+ __blk_run_queue(q, true);
if (q->unplugged_fn)
q->unplugged_fn(q);