blk-mq: allow non-softirq completions
authorJens Axboe <axboe@fb.com>
Tue, 27 May 2014 23:46:48 +0000 (17:46 -0600)
committerJens Axboe <axboe@fb.com>
Tue, 27 May 2014 23:46:48 +0000 (17:46 -0600)
commit95f096849932fe5eaa7bfec887530cf556744a76
tree66f66e18fb1ae13d9e822cc14e4c3da6a59d0681
parentf14bbe77a96bb979dc539d8308ee18a9363a544f
blk-mq: allow non-softirq completions

Right now we export two ways of completing a request:

1) blk_mq_complete_request(). This uses an IPI (if needed) and
   completes through q->softirq_done_fn(). It also works with
   timeouts.

2) blk_mq_end_io(). This completes inline, and ignores any timeout
   state of the request.

Let blk_mq_complete_request() handle non-softirq_done_fn completions
as well, by just completing inline. If a driver has enough completion
ports to place completions correctly, it need not define a
mq_ops->complete() and we can avoid an indirect function call by
doing the completion inline.

Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq.c
include/linux/blk-mq.h