Re: [PATCH 05/10] block: remove per-queue plugging
From: "hch@infradead.org" <hch@infradead.org>
Date: 2011-04-12 16:44:23
Also in:
dm-devel, lkml
From: "hch@infradead.org" <hch@infradead.org>
Date: 2011-04-12 16:44:23
Also in:
dm-devel, lkml
On Tue, Apr 12, 2011 at 02:58:46PM +0200, Jens Axboe wrote:
Supposedly it's faster to do it inline rather than punt the dispatch. But that may actually not be true, if you have multiple plugs going (and thus multiple contenders for the queue lock on dispatch). So lets play it safe and punt to kblockd, we can always revisit this later.
Note that this can be optimized further by adding a new helper that just
queues up work on kblockd without taking the queue lock, e.g. adding a
new
void blk_run_queue_async(struct request_queue *q)
{
if (likely(!blk_queue_stopped(q)))
queue_delayed_work(kblockd_workqueue, &q->delay_work, 0);
}
And replacing all
__blk_run_queue(q, true);
callers with that, at which point they won't need the queuelock any
more.