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:
http://marc.info/?l=linux-scsi&m=138288022619303&w=2
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html