Commit f4af3c3d authored by Jens Axboe's avatar Jens Axboe

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: default avatarJens Axboe <jaxboe@fusionio.com>
parent cf82c798
...@@ -2665,7 +2665,7 @@ static int plug_rq_cmp(void *priv, struct list_head *a, struct list_head *b) ...@@ -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) static void queue_unplugged(struct request_queue *q, unsigned int depth)
{ {
trace_block_unplug_io(q, depth); trace_block_unplug_io(q, depth);
__blk_run_queue(q, false); __blk_run_queue(q, true);
if (q->unplugged_fn) if (q->unplugged_fn)
q->unplugged_fn(q); q->unplugged_fn(q);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment