Re: CmdSN greather than MaxCmdSN protocol error in LIO Iser

Mike Christie
2013-11-12T15:43:41Z

On 11/12/13 9:37 AM, Mike Christie wrote:
>>
>> if (max_cmdsn != session->max_cmdsn &&
>> !iscsi_sna_lt(max_cmdsn, session->max_cmdsn)) {
>> session->max_cmdsn = max_cmdsn;
>> /*
>> * if the window closed with IO queued, then kick the
>> * xmit thread
>> */
>> if (!list_empty(&session->leadconn->cmdqueue) ||
>> !list_empty(&session->leadconn->mgmtqueue))
>> iscsi_conn_queue_work(session->leadconn);
>> }
>> }
>>
>> Once iscsi_conn_queue_work() is invoked here to start process context
>> execution of iscsi_xmitworker() -> iscsi_data_xmit() code, AFAICT there
>> is no logic in place within iscsi_data_xmit() to honor the last received
>> MaxCmdSN.
>>
>> Or to put it another way: what is preventing iscsi_data_xmit() from
>> completely draining both conn->cmdqueue + conn->requeue, even when the
>> CmdSN window has potentially been closed again..?
>>
>
> If the window was not big enough we would have not accepted the cmd from
> scsi-ml in iscsi_queuecommand. We would have never put it on the list
> above then.

Oh yeah, if you are asking yourself why that code exists then, it is
because we used to internally queue cmds when the window closed. In
iscsi_data_xmit we then checked the window like in your patch. We
switched to having the scsi layer queue for us, but that code above got
left there.

Or sent a patch the other day to remove it: