Lines Matching refs:cmd

90 	struct iscsi_cmd *cmd,
98 spin_lock_bh(&cmd->r2t_lock);
100 spin_unlock_bh(&cmd->r2t_lock);
104 spin_unlock_bh(&cmd->r2t_lock);
106 iscsit_add_cmd_to_immediate_queue(cmd, cmd->conn, ISTATE_SEND_R2T);
112 struct iscsi_cmd *cmd,
124 if ((cmd->cmd_flags & ICF_GOT_DATACK_SNACK) &&
125 (begrun <= cmd->acked_data_sn)) {
129 " protocol error.\n", cmd->init_task_tag, begrun,
130 (begrun + runlength), cmd->acked_data_sn);
132 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, buf);
136 if ((begrun + runlength) > cmd->r2t_sn) {
140 cmd->init_task_tag, begrun, runlength, cmd->r2t_sn);
141 return iscsit_reject_cmd(cmd,
146 last_r2tsn = cmd->r2t_sn;
149 r2t = iscsit_get_holder_for_r2tsn(cmd, begrun);
152 if (iscsit_send_recovery_r2t_for_snack(cmd, r2t) < 0)
170 struct iscsi_cmd *cmd,
176 struct iscsi_conn *conn = cmd->conn;
199 cmd->seq_no = seq_no;
200 cmd->pdu_start = pdu_start;
201 cmd->pdu_send_order = data_sn_count;
216 struct iscsi_cmd *cmd,
223 struct iscsi_conn *conn = cmd->conn;
226 if (!cmd->seq_list) {
240 for (i = 0; i < cmd->seq_count; i++) {
241 seq = &cmd->seq_list[i];
268 read_data_done += cmd->seq_list[i].xfer_len;
316 pdu = &cmd->pdu_list[
350 cmd->init_task_tag, begrun);
361 cmd->init_task_tag, begrun, runlength,
374 struct iscsi_cmd *cmd,
379 struct iscsi_conn *conn = cmd->conn;
381 struct se_cmd *se_cmd = &cmd->se_cmd;
385 cmd->init_task_tag);
393 if ((cmd->cmd_flags & ICF_GOT_DATACK_SNACK) &&
394 (begrun <= cmd->acked_data_sn)) {
398 " protocol error.\n", cmd->init_task_tag, begrun,
399 (begrun + runlength), cmd->acked_data_sn);
401 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, buf);
406 * Note: (cmd->data_sn - 1) will carry the maximum DataSN sent.
408 if ((begrun + runlength) > (cmd->data_sn - 1)) {
411 begrun, runlength, (cmd->data_sn - 1));
412 return iscsit_reject_cmd(cmd, ISCSI_REASON_BOOKMARK_INVALID,
418 return iscsit_reject_cmd(cmd, ISCSI_REASON_BOOKMARK_NO_RESOURCES,
426 iscsit_attach_datain_req(cmd, dr);
428 cmd->i_state = ISTATE_SEND_DATAIN;
429 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state);
442 struct iscsi_cmd *cmd;
444 cmd = iscsit_find_cmd_from_itt(conn, init_task_tag);
445 if (!cmd)
451 switch (cmd->data_direction) {
453 return iscsit_handle_r2t_snack(cmd, buf, begrun, runlength);
455 return iscsit_handle_recovery_datain(cmd, buf, begrun,
458 pr_err("Unknown cmd->data_direction: 0x%02x\n",
459 cmd->data_direction);
474 struct iscsi_cmd *cmd = NULL;
494 list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {
495 if (cmd->stat_sn == begrun) {
511 spin_lock_bh(&cmd->istate_lock);
512 if (cmd->i_state == ISTATE_SEND_DATAIN) {
513 spin_unlock_bh(&cmd->istate_lock);
521 spin_unlock_bh(&cmd->istate_lock);
523 cmd->i_state = ISTATE_SEND_STATUS_RECOVERY;
524 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state);
537 struct iscsi_cmd *cmd = NULL;
539 cmd = iscsit_find_cmd_from_ttt(conn, targ_xfer_tag);
540 if (!cmd) {
546 if (begrun <= cmd->acked_data_sn) {
549 cmd->init_task_tag, begrun, cmd->acked_data_sn);
557 cmd->cmd_flags |= ICF_GOT_DATACK_SNACK;
558 cmd->acked_data_sn = (begrun - 1);
562 cmd->init_task_tag, cmd->acked_data_sn);
568 struct iscsi_cmd *cmd,
574 spin_lock_bh(&cmd->r2t_lock);
575 ret = iscsit_add_r2t_to_list(cmd, offset, xfer_len, 1, 0);
576 spin_unlock_bh(&cmd->r2t_lock);
582 struct iscsi_cmd *cmd,
587 struct iscsi_conn *conn = cmd->conn;
595 for (i = 0; i < cmd->pdu_count; i++) {
596 if (cmd->pdu_list[i].seq_no == pdu->seq_no) {
598 first_pdu = &cmd->pdu_list[i];
599 xfer_len += cmd->pdu_list[i].length;
605 struct iscsi_seq *seq = cmd->seq_ptr;
607 first_pdu = &cmd->pdu_list[seq->pdu_start];
623 if (iscsit_send_recovery_r2t(cmd, offset, length) < 0)
651 if (iscsit_send_recovery_r2t(cmd, offset, length) < 0)
658 struct iscsi_cmd *cmd,
665 struct iscsi_conn *conn = cmd->conn;
669 cmd->data_sn = 0;
672 *r2t_offset = cmd->write_data_done;
673 *r2t_length = (cmd->seq_end_offset -
674 cmd->write_data_done);
678 *r2t_offset = cmd->seq_start_offset;
679 *r2t_length = (cmd->seq_end_offset - cmd->seq_start_offset);
681 for (i = 0; i < cmd->pdu_count; i++) {
682 pdu = &cmd->pdu_list[i];
687 if ((pdu->offset >= cmd->seq_start_offset) &&
689 cmd->seq_end_offset)) {
690 if (!cmd->unsolicited_data)
691 cmd->next_burst_len -= pdu->length;
693 cmd->first_burst_len -= pdu->length;
695 cmd->write_data_done -= pdu->length;
702 seq = iscsit_get_seq_holder(cmd, pdu_offset, pdu_length);
709 cmd->write_data_done -= (seq->offset - seq->orig_offset);
710 if (cmd->immediate_data)
711 cmd->first_burst_len = cmd->write_data_done;
722 pdu = &cmd->pdu_list[i+seq->pdu_start];
735 struct iscsi_cmd *cmd,
741 spin_lock_bh(&cmd->istate_lock);
742 cmd->cmd_flags |= ICF_WITHIN_COMMAND_RECOVERY;
743 spin_unlock_bh(&cmd->istate_lock);
745 if (iscsit_recalculate_dataout_values(cmd, pdu_offset, pdu_length,
749 iscsit_send_recovery_r2t(cmd, r2t_offset, r2t_length);
838 ooo_cmdsn->cmd = NULL;
846 struct iscsi_cmd *cmd = NULL;
856 if (!ooo_cmdsn->cmd) {
862 cmd = ooo_cmdsn->cmd;
863 cmd->i_state = cmd->deferred_i_state;
868 cmd->cmd_sn, sess->exp_cmd_sn);
872 if (iscsit_execute_cmd(cmd, 1) < 0)
889 int iscsit_execute_cmd(struct iscsi_cmd *cmd, int ooo)
891 struct se_cmd *se_cmd = &cmd->se_cmd;
892 struct iscsi_conn *conn = cmd->conn;
895 spin_lock_bh(&cmd->istate_lock);
897 cmd->cmd_flags &= ~ICF_OOO_CMDSN;
899 switch (cmd->iscsi_opcode) {
905 if (cmd->sense_reason) {
906 if (cmd->sense_reason == TCM_RESERVATION_CONFLICT) {
907 cmd->i_state = ISTATE_SEND_STATUS;
908 spin_unlock_bh(&cmd->istate_lock);
909 iscsit_add_cmd_to_response_queue(cmd, cmd->conn,
910 cmd->i_state);
913 spin_unlock_bh(&cmd->istate_lock);
914 if (cmd->se_cmd.transport_state & CMD_T_ABORTED)
917 cmd->sense_reason, 0);
923 if (cmd->immediate_data) {
924 if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) {
925 spin_unlock_bh(&cmd->istate_lock);
926 target_execute_cmd(&cmd->se_cmd);
929 spin_unlock_bh(&cmd->istate_lock);
931 if (!(cmd->cmd_flags &
933 if (cmd->se_cmd.transport_state & CMD_T_ABORTED)
936 iscsit_set_dataout_sequence_values(cmd);
937 conn->conn_transport->iscsit_get_dataout(conn, cmd, false);
944 spin_unlock_bh(&cmd->istate_lock);
946 if ((cmd->data_direction == DMA_TO_DEVICE) &&
947 !(cmd->cmd_flags & ICF_NON_IMMEDIATE_UNSOLICITED_DATA)) {
948 if (cmd->se_cmd.transport_state & CMD_T_ABORTED)
951 iscsit_set_unsolicited_dataout(cmd);
953 return transport_handle_cdb_direct(&cmd->se_cmd);
957 spin_unlock_bh(&cmd->istate_lock);
958 iscsit_add_cmd_to_response_queue(cmd, cmd->conn, cmd->i_state);
961 if (cmd->se_cmd.se_tmr_req->response) {
962 spin_unlock_bh(&cmd->istate_lock);
963 iscsit_add_cmd_to_response_queue(cmd, cmd->conn,
964 cmd->i_state);
967 spin_unlock_bh(&cmd->istate_lock);
969 return transport_generic_handle_tmr(&cmd->se_cmd);
971 spin_unlock_bh(&cmd->istate_lock);
972 switch (cmd->logout_reason) {
974 lr = iscsit_logout_closesession(cmd, cmd->conn);
977 lr = iscsit_logout_closeconnection(cmd, cmd->conn);
980 lr = iscsit_logout_removeconnforrecovery(cmd, cmd->conn);
984 " 0x%02x\n", cmd->logout_reason);
990 spin_unlock_bh(&cmd->istate_lock);
992 " unknown iSCSI Opcode: 0x%02x\n", cmd->iscsi_opcode);
1015 struct iscsi_cmd *cmd,
1021 cmd->deferred_i_state = cmd->i_state;
1022 cmd->i_state = ISTATE_DEFERRED_CMD;
1023 cmd->cmd_flags |= ICF_OOO_CMDSN;
1038 ooo_cmdsn->cmd = cmd;
1041 ooo_cmdsn->cid = cmd->conn->cid;
1054 struct iscsi_cmd *cmd,
1058 struct iscsi_conn *conn = cmd->conn;
1061 if (cmd->unsolicited_data) {
1064 cmd->se_cmd.data_length) ?
1065 cmd->se_cmd.data_length :
1070 spin_lock_bh(&cmd->r2t_lock);
1071 if (list_empty(&cmd->cmd_r2t_list)) {
1072 pr_err("cmd->cmd_r2t_list is empty!\n");
1073 spin_unlock_bh(&cmd->r2t_lock);
1077 list_for_each_entry(r2t, &cmd->cmd_r2t_list, r2t_list) {
1081 spin_unlock_bh(&cmd->r2t_lock);
1085 spin_unlock_bh(&cmd->r2t_lock);
1088 " sequences for ITT: 0x%08x.\n", cmd->init_task_tag);
1100 struct iscsi_cmd *cmd = from_timer(cmd, t, dataout_timer);
1101 struct iscsi_conn *conn = cmd->conn;
1107 spin_lock_bh(&cmd->dataout_timeout_lock);
1108 if (cmd->dataout_timer_flags & ISCSI_TF_STOP) {
1109 spin_unlock_bh(&cmd->dataout_timeout_lock);
1113 cmd->dataout_timer_flags &= ~ISCSI_TF_RUNNING;
1126 if (++cmd->dataout_timeout_retries == na->dataout_timeout_retries) {
1130 cmd->init_task_tag, na->dataout_timeout_retries,
1136 cmd->cmd_flags |= ICF_WITHIN_COMMAND_RECOVERY;
1140 pdu_offset = cmd->write_data_done;
1142 cmd->next_burst_len)) > cmd->se_cmd.data_length)
1143 pdu_length = (cmd->se_cmd.data_length -
1144 cmd->write_data_done);
1147 cmd->next_burst_len);
1149 pdu_offset = cmd->seq_start_offset;
1150 pdu_length = (cmd->seq_end_offset -
1151 cmd->seq_start_offset);
1154 if (iscsit_set_dataout_timeout_values(cmd, &pdu_offset,
1159 if (iscsit_recalculate_dataout_values(cmd, pdu_offset, pdu_length,
1165 cmd->init_task_tag, (cmd->unsolicited_data) ? "Unsolicited " :
1168 if (iscsit_send_recovery_r2t(cmd, r2t_offset, r2t_length) < 0)
1171 iscsit_start_dataout_timer(cmd, conn);
1172 spin_unlock_bh(&cmd->dataout_timeout_lock);
1178 spin_unlock_bh(&cmd->dataout_timeout_lock);
1184 void iscsit_mod_dataout_timer(struct iscsi_cmd *cmd)
1186 struct iscsi_conn *conn = cmd->conn;
1190 spin_lock_bh(&cmd->dataout_timeout_lock);
1191 if (!(cmd->dataout_timer_flags & ISCSI_TF_RUNNING)) {
1192 spin_unlock_bh(&cmd->dataout_timeout_lock);
1196 mod_timer(&cmd->dataout_timer,
1199 cmd->init_task_tag);
1200 spin_unlock_bh(&cmd->dataout_timeout_lock);
1204 struct iscsi_cmd *cmd,
1210 lockdep_assert_held(&cmd->dataout_timeout_lock);
1212 if (cmd->dataout_timer_flags & ISCSI_TF_RUNNING)
1216 " CID: %hu.\n", cmd->init_task_tag, conn->cid);
1218 cmd->dataout_timer_flags &= ~ISCSI_TF_STOP;
1219 cmd->dataout_timer_flags |= ISCSI_TF_RUNNING;
1220 mod_timer(&cmd->dataout_timer, jiffies + na->dataout_timeout * HZ);
1223 void iscsit_stop_dataout_timer(struct iscsi_cmd *cmd)
1225 spin_lock_bh(&cmd->dataout_timeout_lock);
1226 if (!(cmd->dataout_timer_flags & ISCSI_TF_RUNNING)) {
1227 spin_unlock_bh(&cmd->dataout_timeout_lock);
1230 cmd->dataout_timer_flags |= ISCSI_TF_STOP;
1231 spin_unlock_bh(&cmd->dataout_timeout_lock);
1233 del_timer_sync(&cmd->dataout_timer);
1235 spin_lock_bh(&cmd->dataout_timeout_lock);
1236 cmd->dataout_timer_flags &= ~ISCSI_TF_RUNNING;
1238 cmd->init_task_tag);
1239 spin_unlock_bh(&cmd->dataout_timeout_lock);