mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
iscsi-target: Fix non-immediate TMR handling
This patch addresses two issues with non immediate TMR handling in iscsit_handle_task_mgt_cmd(). The first involves breakage due to v3.1-rc conversion of iscsit_sequence_cmd(), which upon good status would hit the iscsit_add_reject_from_cmd() block of code. This patch adds an explict check for CMDSN_ERROR_CANNOT_RECOVER. The second adds a check to return when non immediate TMR operation is detected after iscsit_ack_from_expstatsn(), as iscsit_sequence_cmd() -> iscsit_execute_cmd() will have called transport_generic_handle_tmr() for the non immediate TMR case already. Cc: Andy Grover <agrover@redhat.com> Cc: stable@kernel.org Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
7e32da55e2
commit
5a4c8666c6
1 changed files with 3 additions and 4 deletions
|
@ -1821,17 +1821,16 @@ static int iscsit_handle_task_mgt_cmd(
|
||||||
int cmdsn_ret = iscsit_sequence_cmd(conn, cmd, hdr->cmdsn);
|
int cmdsn_ret = iscsit_sequence_cmd(conn, cmd, hdr->cmdsn);
|
||||||
if (cmdsn_ret == CMDSN_HIGHER_THAN_EXP)
|
if (cmdsn_ret == CMDSN_HIGHER_THAN_EXP)
|
||||||
out_of_order_cmdsn = 1;
|
out_of_order_cmdsn = 1;
|
||||||
else if (cmdsn_ret == CMDSN_LOWER_THAN_EXP) {
|
else if (cmdsn_ret == CMDSN_LOWER_THAN_EXP)
|
||||||
return 0;
|
return 0;
|
||||||
} else { /* (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER) */
|
else if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER)
|
||||||
return iscsit_add_reject_from_cmd(
|
return iscsit_add_reject_from_cmd(
|
||||||
ISCSI_REASON_PROTOCOL_ERROR,
|
ISCSI_REASON_PROTOCOL_ERROR,
|
||||||
1, 0, buf, cmd);
|
1, 0, buf, cmd);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
iscsit_ack_from_expstatsn(conn, hdr->exp_statsn);
|
iscsit_ack_from_expstatsn(conn, hdr->exp_statsn);
|
||||||
|
|
||||||
if (out_of_order_cmdsn)
|
if (out_of_order_cmdsn || !(hdr->opcode & ISCSI_OP_IMMEDIATE))
|
||||||
return 0;
|
return 0;
|
||||||
/*
|
/*
|
||||||
* Found the referenced task, send to transport for processing.
|
* Found the referenced task, send to transport for processing.
|
||||||
|
|
Loading…
Reference in a new issue