Files
linux/include/linux
Ming Lei 4ec3ca2770 blk-mq: add callback of .cleanup_rq
[ Upstream commit 226b4fc75c ]

SCSI maintains its own driver private data hooked off of each SCSI
request, and the pridate data won't be freed after scsi_queue_rq()
returns BLK_STS_RESOURCE or BLK_STS_DEV_RESOURCE. An upper layer driver
(e.g. dm-rq) may need to retry these SCSI requests, before SCSI has
fully dispatched them, due to a lower level SCSI driver's resource
limitation identified in scsi_queue_rq(). Currently SCSI's per-request
private data is leaked when the upper layer driver (dm-rq) frees and
then retries these requests in response to BLK_STS_RESOURCE or
BLK_STS_DEV_RESOURCE returns from scsi_queue_rq().

This usecase is so specialized that it doesn't warrant training an
existing blk-mq interface (e.g. blk_mq_free_request) to allow SCSI to
account for freeing its driver private data -- doing so would add an
extra branch for handling a special case that all other consumers of
SCSI (and blk-mq) won't ever need to worry about.

So the most pragmatic way forward is to delegate freeing SCSI driver
private data to the upper layer driver (dm-rq).  Do so by adding
new .cleanup_rq callback and calling a new blk_mq_cleanup_rq() method
from dm-rq.  A following commit will implement the .cleanup_rq() hook
in scsi_mq_ops.

Cc: Ewan D. Milne <emilne@redhat.com>
Cc: Bart Van Assche <bvanassche@acm.org>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Mike Snitzer <snitzer@redhat.com>
Cc: dm-devel@redhat.com
Cc: <stable@vger.kernel.org>
Fixes: 396eaf21ee ("blk-mq: improve DM's blk-mq IO merging via blk_insert_cloned_request feedback")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-10-05 13:10:03 +02:00
..
2018-05-26 09:16:44 +02:00
2018-06-15 18:10:01 -03:00
2019-04-20 09:16:05 +02:00
2019-10-05 13:10:03 +02:00
2019-07-03 13:14:48 +02:00
2018-05-09 17:25:13 +02:00
2018-06-15 18:10:01 -03:00
2018-06-19 10:06:29 -07:00
2018-03-26 15:09:38 +02:00
2018-08-22 10:52:48 -07:00
2019-08-09 17:52:28 +02:00
2018-07-24 19:11:26 +02:00
2018-07-12 10:04:29 -04:00
2018-07-27 09:57:23 +10:00
2019-05-31 06:46:18 -07:00
2018-06-28 20:32:51 +09:00
2018-03-26 08:53:43 -06:00
2018-08-08 11:06:20 +02:00
2018-06-22 13:43:27 +09:00
2018-05-09 12:21:46 -05:00
2018-04-11 10:28:38 -07:00
2018-07-12 21:35:28 +02:00
2018-04-12 09:41:19 -07:00
2018-06-05 08:50:16 -04:00
2018-06-07 17:34:35 -07:00
2018-04-11 10:28:32 -07:00
2019-05-04 09:20:11 +02:00
2018-06-07 17:34:39 -07:00
2018-03-26 13:14:43 -04:00
2018-03-26 13:14:43 -04:00
2018-08-22 10:52:45 -07:00
2018-01-28 22:17:24 -05:00
2018-07-10 17:22:35 +02:00
2018-06-07 17:34:36 -07:00
2018-04-11 10:28:39 -07:00
2018-01-31 17:18:37 -08:00
2018-07-19 11:34:23 +01:00
2018-07-25 13:41:22 -07:00
2018-07-21 10:43:12 -05:00
2018-08-22 10:52:46 -07:00
2018-05-31 00:13:56 +08:00
2019-06-11 12:20:52 +02:00
2018-07-20 01:11:45 +02:00
2018-08-02 17:33:06 -04:00
2018-05-11 17:28:45 -07:00
2018-05-11 17:28:45 -07:00
2018-08-02 17:16:05 +02:00
2018-03-01 08:33:05 -07:00
2018-06-29 08:48:06 -06:00
2018-06-07 17:34:35 -07:00
2018-07-07 17:25:23 +02:00
2018-05-03 15:55:23 -07:00
2018-08-16 12:14:42 -07:00
2018-01-15 12:07:46 -08:00
2019-04-17 08:38:45 +02:00
2018-06-20 11:35:56 +02:00
2018-02-06 18:32:47 -08:00
2018-11-13 11:08:51 -08:00
2019-06-17 19:51:56 +02:00
2018-02-06 18:32:44 -08:00
2018-05-14 09:51:34 -04:00