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.