[dm-devel] dm rq: Avoid that request processing stalls sporadically

Bart Van Assche Bart.VanAssche at wdc.com
Thu Jan 18 17:13:53 UTC 2018


On Thu, 2018-01-18 at 11:50 -0500, Mike Snitzer wrote:
> The issue you say it was originally intended to fix _should_ be
> addressed with this change:
> https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=dm-4.16&id=4dd6edd23e7ea971efddc303f9e67eb79e95808e

Hello Mike,

Sorry but I'm not convinced that that patch is sufficient. That patch helps
if .end_io() is called with status BLK_STS_RESOURCE and also if
blk_insert_cloned_request() returns the .queue_rq() return value. It does not
help if .queue_rq() returns BLK_STS_RESOURCE and that return value gets
ignored. I think that can happen as follows:
- Request cloning in multipath_clone_and_map() succeeds and that function
  returns DM_MAPIO_REMAPPED.
- dm_dispatch_clone_request() calls blk_insert_cloned_request().
- blk_insert_cloned_request() calls blk_mq_request_direct_issue(), which
  results in a call of __blk_mq_try_issue_directly().
- __blk_mq_try_issue_directly() calls blk_mq_sched_insert_request(). In this
  case the BLK_STS_RESOURCE returned by the .queue_rq() implementation of the
  underlying path will be ignored.

Please note that I have not tried to find all paths that ignore the
.queue_rq() return value.

Thanks,

Bart.




More information about the dm-devel mailing list