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.