On 2011-04-12 18:44, hch@xxxxxxxxxxxxx wrote: > 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. I realize that, in fact it's already safe as long as you pass in 'true' for __blk_run_queue(). Before I had rewritten it to move the running out, so that makes the trick a little difficult. This afternoon I also tested it and saw no noticable difference, but I'll probably just do it anyway as it makes sense. -- Jens Axboe -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel