aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/iscsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/target/iscsi')
-rw-r--r--drivers/target/iscsi/iscsi_target.c17
-rw-r--r--drivers/target/iscsi/iscsi_target_login.c9
2 files changed, 14 insertions, 12 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index db740e7e9ba2..35b61f7d6c63 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1073,7 +1073,6 @@ int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
1073 if (cmd->reject_reason) 1073 if (cmd->reject_reason)
1074 return 0; 1074 return 0;
1075 1075
1076 target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd);
1077 return 1; 1076 return 1;
1078 } 1077 }
1079 /* 1078 /*
@@ -1111,14 +1110,10 @@ after_immediate_data:
1111 */ 1110 */
1112 cmdsn_ret = iscsit_sequence_cmd(cmd->conn, cmd, 1111 cmdsn_ret = iscsit_sequence_cmd(cmd->conn, cmd,
1113 (unsigned char *)hdr, hdr->cmdsn); 1112 (unsigned char *)hdr, hdr->cmdsn);
1114 if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER) { 1113 if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER)
1115 return -1; 1114 return -1;
1116 } else if (cmdsn_ret == CMDSN_LOWER_THAN_EXP) {
1117 target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd);
1118 return 0;
1119 }
1120 1115
1121 if (cmd->sense_reason) { 1116 if (cmd->sense_reason || cmdsn_ret == CMDSN_LOWER_THAN_EXP) {
1122 int rc; 1117 int rc;
1123 1118
1124 rc = iscsit_dump_data_payload(cmd->conn, 1119 rc = iscsit_dump_data_payload(cmd->conn,
@@ -1514,6 +1509,10 @@ int iscsit_setup_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
1514 if (hdr->itt == RESERVED_ITT && !(hdr->opcode & ISCSI_OP_IMMEDIATE)) { 1509 if (hdr->itt == RESERVED_ITT && !(hdr->opcode & ISCSI_OP_IMMEDIATE)) {
1515 pr_err("NOPOUT ITT is reserved, but Immediate Bit is" 1510 pr_err("NOPOUT ITT is reserved, but Immediate Bit is"
1516 " not set, protocol error.\n"); 1511 " not set, protocol error.\n");
1512 if (!cmd)
1513 return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR,
1514 (unsigned char *)hdr);
1515
1517 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, 1516 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR,
1518 (unsigned char *)hdr); 1517 (unsigned char *)hdr);
1519 } 1518 }
@@ -1523,6 +1522,10 @@ int iscsit_setup_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
1523 " greater than MaxXmitDataSegmentLength: %u, protocol" 1522 " greater than MaxXmitDataSegmentLength: %u, protocol"
1524 " error.\n", payload_length, 1523 " error.\n", payload_length,
1525 conn->conn_ops->MaxXmitDataSegmentLength); 1524 conn->conn_ops->MaxXmitDataSegmentLength);
1525 if (!cmd)
1526 return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR,
1527 (unsigned char *)hdr);
1528
1526 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, 1529 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR,
1527 (unsigned char *)hdr); 1530 (unsigned char *)hdr);
1528 } 1531 }
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
index 7aa35e5d20d3..1794c753954a 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -1243,12 +1243,11 @@ static int __iscsi_target_login_thread(struct iscsi_np *np)
1243 if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { 1243 if (np->np_thread_state == ISCSI_NP_THREAD_RESET) {
1244 spin_unlock_bh(&np->np_thread_lock); 1244 spin_unlock_bh(&np->np_thread_lock);
1245 complete(&np->np_restart_comp); 1245 complete(&np->np_restart_comp);
1246 if (ret == -ENODEV) { 1246 iscsit_put_transport(conn->conn_transport);
1247 iscsit_put_transport(conn->conn_transport); 1247 kfree(conn);
1248 kfree(conn); 1248 conn = NULL;
1249 conn = NULL; 1249 if (ret == -ENODEV)
1250 goto out; 1250 goto out;
1251 }
1252 /* Get another socket */ 1251 /* Get another socket */
1253 return 1; 1252 return 1;
1254 } 1253 }