|
@@ -1086,7 +1086,6 @@ int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
|
|
if (cmd->reject_reason)
|
|
|
return 0;
|
|
|
|
|
|
- target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd);
|
|
|
return 1;
|
|
|
}
|
|
|
/*
|
|
@@ -1124,14 +1123,10 @@ after_immediate_data:
|
|
|
*/
|
|
|
cmdsn_ret = iscsit_sequence_cmd(cmd->conn, cmd,
|
|
|
(unsigned char *)hdr, hdr->cmdsn);
|
|
|
- if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER) {
|
|
|
+ if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER)
|
|
|
return -1;
|
|
|
- } else if (cmdsn_ret == CMDSN_LOWER_THAN_EXP) {
|
|
|
- target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd);
|
|
|
- return 0;
|
|
|
- }
|
|
|
|
|
|
- if (cmd->sense_reason) {
|
|
|
+ if (cmd->sense_reason || cmdsn_ret == CMDSN_LOWER_THAN_EXP) {
|
|
|
int rc;
|
|
|
|
|
|
rc = iscsit_dump_data_payload(cmd->conn,
|
|
@@ -1527,6 +1522,10 @@ int iscsit_setup_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
|
|
if (hdr->itt == RESERVED_ITT && !(hdr->opcode & ISCSI_OP_IMMEDIATE)) {
|
|
|
pr_err("NOPOUT ITT is reserved, but Immediate Bit is"
|
|
|
" not set, protocol error.\n");
|
|
|
+ if (!cmd)
|
|
|
+ return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR,
|
|
|
+ (unsigned char *)hdr);
|
|
|
+
|
|
|
return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR,
|
|
|
(unsigned char *)hdr);
|
|
|
}
|
|
@@ -1536,6 +1535,10 @@ int iscsit_setup_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
|
|
" greater than MaxXmitDataSegmentLength: %u, protocol"
|
|
|
" error.\n", payload_length,
|
|
|
conn->conn_ops->MaxXmitDataSegmentLength);
|
|
|
+ if (!cmd)
|
|
|
+ return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR,
|
|
|
+ (unsigned char *)hdr);
|
|
|
+
|
|
|
return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR,
|
|
|
(unsigned char *)hdr);
|
|
|
}
|