blk-mq: add a 'list' parameter to ->queue_rq()
authorJens Axboe <axboe@fb.com>
Wed, 29 Oct 2014 17:14:52 +0000 (11:14 -0600)
committerJens Axboe <axboe@fb.com>
Wed, 29 Oct 2014 17:14:52 +0000 (11:14 -0600)
commit74c450521dd8d245b982da62592a18aa6f88b045
treeb45928c02f0ee9051cd5cb257ad4bf1e0df125a8
parent34b48db66e08ca1c1bc07cf305d672ac940268dc
blk-mq: add a 'list' parameter to ->queue_rq()

Since we have the notion of a 'last' request in a chain, we can use
this to have the hardware optimize the issuing of requests. Add
a list_head parameter to queue_rq that the driver can use to
temporarily store hw commands for issue when 'last' is true. If we
are doing a chain of requests, pass in a NULL list for the first
request to force issue of that immediately, then batch the remainder
for deferred issue until the last request has been sent.

Instead of adding yet another argument to the hot ->queue_rq path,
encapsulate the passed arguments in a blk_mq_queue_data structure.
This is passed as a constant, and has been tested as faster than
passing 4 (or even 3) args through ->queue_rq. Update drivers for
the new ->queue_rq() prototype. There are no functional changes
in this patch for drivers - if they don't use the passed in list,
then they will just queue requests individually like before.

Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq.c
drivers/block/mtip32xx/mtip32xx.c
drivers/block/null_blk.c
drivers/block/virtio_blk.c
drivers/scsi/scsi_lib.c
include/linux/blk-mq.h