On Tue, Jan 30, 2018 at 5:51 AM, Bart Van Assche <Bart.VanAssche@xxxxxxx> wrote: > On Mon, 2018-01-29 at 16:44 -0500, Mike Snitzer wrote: >> But regardless of which wins the race, the queue will have been run. >> Which is all we care about right? > > Running the queue is not sufficient. With this patch applied it can happen > that the block driver returns BLK_STS_DEV_RESOURCE, that the two or more > concurrent queue runs finish before sufficient device resources are available > to execute the request and that blk_mq_delay_run_hw_queue() does not get > called at all. If no other activity triggers a queue run, e.g. request > completion, this will result in a queue stall. Please see document of BLK_STS_DEV_RESOURCE: + * BLK_STS_DEV_RESOURCE is returned from driver to block layer if device + * related resource is unavailable, but driver can guarantee that queue + * will be rerun in future once the resource is available (whereby + * dispatching requests). I have explained the SCSI's BLK_STS_DEV_RESOURCE conversion in another thread, let's know if you have further concern: https://marc.info/?l=linux-block&m=151727454815018&w=2 -- Ming Lei