On 5/29/19 10:38 AM, Hannes Reinecke wrote:
On 5/29/19 5:19 PM, Bart Van Assche wrote:
On 5/29/19 6:28 AM, Hannes Reinecke wrote:
+    rq = blk_mq_alloc_request(shost->reserved_cmd_q,
+                  REQ_OP_DRV_OUT | REQ_NOWAIT,
+                  BLK_MQ_REQ_RESERVED);

Is your purpose to avoid that blk_mq_alloc_request() waits? If so, why do you want to avoid that?

Typically these commands are intended for internal purposes, so there should always be enough commands free to allow direct allocation. If not we're in an error condition, and we need to return so as not to lock up the driver (as it might rely on this command to make forward progress).

That sounds like a risky strategy to me. blk_mq_alloc_request() can block for a number of reasons, e.g. because a request queue due to e.g. CPU hotplugging. I don't think that you want scsi_host_get_reserved_cmd() or scsi_get_reserved_cmd() to fail if a request queue is frozen.

Bart.

Reply via email to