[SCSI] libiscsi: Do not fail commands immediately during logout
If the target requests a logout, then we do not want to fail commands to scsi-ml right away. This patch just fails in pending commands for a requeue immediately, and then lets iscsid handle running commands like normal recovery. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
bca1088a81
commit
9000bcd649
1 changed files with 6 additions and 8 deletions
|
@ -917,7 +917,7 @@ static int iscsi_data_xmit(struct iscsi_conn *conn)
|
|||
conn->ctask = list_entry(conn->xmitqueue.next,
|
||||
struct iscsi_cmd_task, running);
|
||||
if (conn->session->state == ISCSI_STATE_LOGGING_OUT) {
|
||||
fail_command(conn, conn->ctask, DID_NO_CONNECT << 16);
|
||||
fail_command(conn, conn->ctask, DID_IMM_RETRY << 16);
|
||||
continue;
|
||||
}
|
||||
if (iscsi_prep_scsi_cmd_pdu(conn->ctask)) {
|
||||
|
@ -1024,21 +1024,19 @@ int iscsi_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
|
|||
* be entering our queuecommand while a block is starting
|
||||
* up because the block code is not locked)
|
||||
*/
|
||||
if (session->state == ISCSI_STATE_IN_RECOVERY) {
|
||||
switch (session->state) {
|
||||
case ISCSI_STATE_IN_RECOVERY:
|
||||
reason = FAILURE_SESSION_IN_RECOVERY;
|
||||
goto reject;
|
||||
}
|
||||
|
||||
switch (session->state) {
|
||||
case ISCSI_STATE_LOGGING_OUT:
|
||||
reason = FAILURE_SESSION_LOGGING_OUT;
|
||||
goto reject;
|
||||
case ISCSI_STATE_RECOVERY_FAILED:
|
||||
reason = FAILURE_SESSION_RECOVERY_TIMEOUT;
|
||||
break;
|
||||
case ISCSI_STATE_TERMINATE:
|
||||
reason = FAILURE_SESSION_TERMINATE;
|
||||
break;
|
||||
case ISCSI_STATE_LOGGING_OUT:
|
||||
reason = FAILURE_SESSION_LOGGING_OUT;
|
||||
break;
|
||||
default:
|
||||
reason = FAILURE_SESSION_FREED;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue