Lines Matching refs:cmd

121 	struct iscsi_cmd *cmd,
129 spin_lock_bh(&cmd->r2t_lock);
131 spin_unlock_bh(&cmd->r2t_lock);
135 spin_unlock_bh(&cmd->r2t_lock);
137 iscsit_add_cmd_to_immediate_queue(cmd, cmd->conn, ISTATE_SEND_R2T);
143 struct iscsi_cmd *cmd,
155 if ((cmd->cmd_flags & ICF_GOT_DATACK_SNACK) &&
156 (begrun <= cmd->acked_data_sn)) {
160 " protocol error.\n", cmd->init_task_tag, begrun,
161 (begrun + runlength), cmd->acked_data_sn);
163 return iscsit_reject_cmd(cmd,
168 if ((begrun + runlength) > cmd->r2t_sn) {
172 cmd->init_task_tag, begrun, runlength, cmd->r2t_sn);
173 return iscsit_reject_cmd(cmd,
178 last_r2tsn = cmd->r2t_sn;
181 r2t = iscsit_get_holder_for_r2tsn(cmd, begrun);
184 if (iscsit_send_recovery_r2t_for_snack(cmd, r2t) < 0)
202 struct iscsi_cmd *cmd,
208 struct iscsi_conn *conn = cmd->conn;
231 cmd->seq_no = seq_no;
232 cmd->pdu_start = pdu_start;
233 cmd->pdu_send_order = data_sn_count;
248 struct iscsi_cmd *cmd,
255 struct iscsi_conn *conn = cmd->conn;
258 if (!cmd->seq_list) {
272 for (i = 0; i < cmd->seq_count; i++) {
273 seq = &cmd->seq_list[i];
300 read_data_done += cmd->seq_list[i].xfer_len;
348 pdu = &cmd->pdu_list[
382 cmd->init_task_tag, begrun);
393 cmd->init_task_tag, begrun, runlength,
406 struct iscsi_cmd *cmd,
411 struct iscsi_conn *conn = cmd->conn;
413 struct se_cmd *se_cmd = &cmd->se_cmd;
417 cmd->init_task_tag);
425 if ((cmd->cmd_flags & ICF_GOT_DATACK_SNACK) &&
426 (begrun <= cmd->acked_data_sn)) {
430 " protocol error.\n", cmd->init_task_tag, begrun,
431 (begrun + runlength), cmd->acked_data_sn);
433 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, buf);
438 * Note: (cmd->data_sn - 1) will carry the maximum DataSN sent.
440 if ((begrun + runlength) > (cmd->data_sn - 1)) {
443 begrun, runlength, (cmd->data_sn - 1));
444 return iscsit_reject_cmd(cmd, ISCSI_REASON_BOOKMARK_INVALID,
450 return iscsit_reject_cmd(cmd, ISCSI_REASON_BOOKMARK_NO_RESOURCES,
458 iscsit_attach_datain_req(cmd, dr);
460 cmd->i_state = ISTATE_SEND_DATAIN;
461 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state);
474 struct iscsi_cmd *cmd;
476 cmd = iscsit_find_cmd_from_itt(conn, init_task_tag);
477 if (!cmd)
483 switch (cmd->data_direction) {
485 return iscsit_handle_r2t_snack(cmd, buf, begrun, runlength);
487 return iscsit_handle_recovery_datain(cmd, buf, begrun,
490 pr_err("Unknown cmd->data_direction: 0x%02x\n",
491 cmd->data_direction);
506 struct iscsi_cmd *cmd = NULL;
526 list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) {
527 if (cmd->stat_sn == begrun) {
543 spin_lock_bh(&cmd->istate_lock);
544 if (cmd->i_state == ISTATE_SEND_DATAIN) {
545 spin_unlock_bh(&cmd->istate_lock);
553 spin_unlock_bh(&cmd->istate_lock);
555 cmd->i_state = ISTATE_SEND_STATUS_RECOVERY;
556 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state);
569 struct iscsi_cmd *cmd = NULL;
571 cmd = iscsit_find_cmd_from_ttt(conn, targ_xfer_tag);
572 if (!cmd) {
578 if (begrun <= cmd->acked_data_sn) {
581 cmd->init_task_tag, begrun, cmd->acked_data_sn);
589 cmd->cmd_flags |= ICF_GOT_DATACK_SNACK;
590 cmd->acked_data_sn = (begrun - 1);
594 cmd->init_task_tag, cmd->acked_data_sn);
600 struct iscsi_cmd *cmd,
606 spin_lock_bh(&cmd->r2t_lock);
607 ret = iscsit_add_r2t_to_list(cmd, offset, xfer_len, 1, 0);
608 spin_unlock_bh(&cmd->r2t_lock);
614 struct iscsi_cmd *cmd,
619 struct iscsi_conn *conn = cmd->conn;
627 for (i = 0; i < cmd->pdu_count; i++) {
628 if (cmd->pdu_list[i].seq_no == pdu->seq_no) {
630 first_pdu = &cmd->pdu_list[i];
631 xfer_len += cmd->pdu_list[i].length;
637 struct iscsi_seq *seq = cmd->seq_ptr;
639 first_pdu = &cmd->pdu_list[seq->pdu_start];
655 if (iscsit_send_recovery_r2t(cmd, offset, length) < 0)
683 if (iscsit_send_recovery_r2t(cmd, offset, length) < 0)
690 struct iscsi_cmd *cmd,
697 struct iscsi_conn *conn = cmd->conn;
701 cmd->data_sn = 0;
704 *r2t_offset = cmd->write_data_done;
705 *r2t_length = (cmd->seq_end_offset -
706 cmd->write_data_done);
710 *r2t_offset = cmd->seq_start_offset;
711 *r2t_length = (cmd->seq_end_offset - cmd->seq_start_offset);
713 for (i = 0; i < cmd->pdu_count; i++) {
714 pdu = &cmd->pdu_list[i];
719 if ((pdu->offset >= cmd->seq_start_offset) &&
721 cmd->seq_end_offset)) {
722 if (!cmd->unsolicited_data)
723 cmd->next_burst_len -= pdu->length;
725 cmd->first_burst_len -= pdu->length;
727 cmd->write_data_done -= pdu->length;
734 seq = iscsit_get_seq_holder(cmd, pdu_offset, pdu_length);
741 cmd->write_data_done -= (seq->offset - seq->orig_offset);
742 if (cmd->immediate_data)
743 cmd->first_burst_len = cmd->write_data_done;
754 pdu = &cmd->pdu_list[i+seq->pdu_start];
767 struct iscsi_cmd *cmd,
773 spin_lock_bh(&cmd->istate_lock);
774 cmd->cmd_flags |= ICF_WITHIN_COMMAND_RECOVERY;
775 spin_unlock_bh(&cmd->istate_lock);
777 if (iscsit_recalculate_dataout_values(cmd, pdu_offset, pdu_length,
781 iscsit_send_recovery_r2t(cmd, r2t_offset, r2t_length);
870 ooo_cmdsn->cmd = NULL;
881 struct iscsi_cmd *cmd = NULL;
889 if (!ooo_cmdsn->cmd) {
895 cmd = ooo_cmdsn->cmd;
896 cmd->i_state = cmd->deferred_i_state;
901 cmd->cmd_sn, sess->exp_cmd_sn);
905 if (iscsit_execute_cmd(cmd, 1) < 0)
922 int iscsit_execute_cmd(struct iscsi_cmd *cmd, int ooo)
924 struct se_cmd *se_cmd = &cmd->se_cmd;
925 struct iscsi_conn *conn = cmd->conn;
928 spin_lock_bh(&cmd->istate_lock);
930 cmd->cmd_flags &= ~ICF_OOO_CMDSN;
932 switch (cmd->iscsi_opcode) {
938 if (cmd->sense_reason) {
939 if (cmd->sense_reason == TCM_RESERVATION_CONFLICT) {
940 cmd->i_state = ISTATE_SEND_STATUS;
941 spin_unlock_bh(&cmd->istate_lock);
942 iscsit_add_cmd_to_response_queue(cmd, cmd->conn,
943 cmd->i_state);
946 spin_unlock_bh(&cmd->istate_lock);
955 (cmd->unsolicited_data == 0)) != 0)
962 cmd->sense_reason, 0);
968 if (cmd->immediate_data) {
969 if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) {
970 spin_unlock_bh(&cmd->istate_lock);
971 target_execute_cmd(&cmd->se_cmd);
974 spin_unlock_bh(&cmd->istate_lock);
976 if (!(cmd->cmd_flags &
987 iscsit_set_dataout_sequence_values(cmd);
988 conn->conn_transport->iscsit_get_dataout(conn, cmd, false);
995 spin_unlock_bh(&cmd->istate_lock);
997 if ((cmd->data_direction == DMA_TO_DEVICE) &&
998 !(cmd->cmd_flags & ICF_NON_IMMEDIATE_UNSOLICITED_DATA)) {
1006 iscsit_set_unsoliticed_dataout(cmd);
1008 return transport_handle_cdb_direct(&cmd->se_cmd);
1012 spin_unlock_bh(&cmd->istate_lock);
1013 iscsit_add_cmd_to_response_queue(cmd, cmd->conn, cmd->i_state);
1016 if (cmd->se_cmd.se_tmr_req->response) {
1017 spin_unlock_bh(&cmd->istate_lock);
1018 iscsit_add_cmd_to_response_queue(cmd, cmd->conn,
1019 cmd->i_state);
1022 spin_unlock_bh(&cmd->istate_lock);
1024 return transport_generic_handle_tmr(&cmd->se_cmd);
1026 spin_unlock_bh(&cmd->istate_lock);
1027 switch (cmd->logout_reason) {
1029 lr = iscsit_logout_closesession(cmd, cmd->conn);
1032 lr = iscsit_logout_closeconnection(cmd, cmd->conn);
1035 lr = iscsit_logout_removeconnforrecovery(cmd, cmd->conn);
1039 " 0x%02x\n", cmd->logout_reason);
1045 spin_unlock_bh(&cmd->istate_lock);
1047 " unknown iSCSI Opcode: 0x%02x\n", cmd->iscsi_opcode);
1070 struct iscsi_cmd *cmd,
1076 cmd->deferred_i_state = cmd->i_state;
1077 cmd->i_state = ISTATE_DEFERRED_CMD;
1078 cmd->cmd_flags |= ICF_OOO_CMDSN;
1093 ooo_cmdsn->cmd = cmd;
1096 ooo_cmdsn->cid = cmd->conn->cid;
1109 struct iscsi_cmd *cmd,
1113 struct iscsi_conn *conn = cmd->conn;
1116 if (cmd->unsolicited_data) {
1119 cmd->se_cmd.data_length) ?
1120 cmd->se_cmd.data_length :
1125 spin_lock_bh(&cmd->r2t_lock);
1126 if (list_empty(&cmd->cmd_r2t_list)) {
1127 pr_err("cmd->cmd_r2t_list is empty!\n");
1128 spin_unlock_bh(&cmd->r2t_lock);
1132 list_for_each_entry(r2t, &cmd->cmd_r2t_list, r2t_list) {
1136 spin_unlock_bh(&cmd->r2t_lock);
1140 spin_unlock_bh(&cmd->r2t_lock);
1143 " sequences for ITT: 0x%08x.\n", cmd->init_task_tag);
1155 struct iscsi_cmd *cmd = (struct iscsi_cmd *) data;
1156 struct iscsi_conn *conn = cmd->conn;
1162 spin_lock_bh(&cmd->dataout_timeout_lock);
1163 if (cmd->dataout_timer_flags & ISCSI_TF_STOP) {
1164 spin_unlock_bh(&cmd->dataout_timeout_lock);
1168 cmd->dataout_timer_flags &= ~ISCSI_TF_RUNNING;
1178 if (++cmd->dataout_timeout_retries == na->dataout_timeout_retries) {
1181 cmd->init_task_tag, na->dataout_timeout_retries);
1185 cmd->cmd_flags |= ICF_WITHIN_COMMAND_RECOVERY;
1189 pdu_offset = cmd->write_data_done;
1191 cmd->next_burst_len)) > cmd->se_cmd.data_length)
1192 pdu_length = (cmd->se_cmd.data_length -
1193 cmd->write_data_done);
1196 cmd->next_burst_len);
1198 pdu_offset = cmd->seq_start_offset;
1199 pdu_length = (cmd->seq_end_offset -
1200 cmd->seq_start_offset);
1203 if (iscsit_set_dataout_timeout_values(cmd, &pdu_offset,
1208 if (iscsit_recalculate_dataout_values(cmd, pdu_offset, pdu_length,
1214 cmd->init_task_tag, (cmd->unsolicited_data) ? "Unsolicited " :
1217 if (iscsit_send_recovery_r2t(cmd, r2t_offset, r2t_length) < 0)
1220 iscsit_start_dataout_timer(cmd, conn);
1221 spin_unlock_bh(&cmd->dataout_timeout_lock);
1227 spin_unlock_bh(&cmd->dataout_timeout_lock);
1232 void iscsit_mod_dataout_timer(struct iscsi_cmd *cmd)
1234 struct iscsi_conn *conn = cmd->conn;
1238 spin_lock_bh(&cmd->dataout_timeout_lock);
1239 if (!(cmd->dataout_timer_flags & ISCSI_TF_RUNNING)) {
1240 spin_unlock_bh(&cmd->dataout_timeout_lock);
1244 mod_timer(&cmd->dataout_timer,
1247 cmd->init_task_tag);
1248 spin_unlock_bh(&cmd->dataout_timeout_lock);
1252 * Called with cmd->dataout_timeout_lock held.
1255 struct iscsi_cmd *cmd,
1261 if (cmd->dataout_timer_flags & ISCSI_TF_RUNNING)
1265 " CID: %hu.\n", cmd->init_task_tag, conn->cid);
1267 init_timer(&cmd->dataout_timer);
1268 cmd->dataout_timer.expires = (get_jiffies_64() + na->dataout_timeout * HZ);
1269 cmd->dataout_timer.data = (unsigned long)cmd;
1270 cmd->dataout_timer.function = iscsit_handle_dataout_timeout;
1271 cmd->dataout_timer_flags &= ~ISCSI_TF_STOP;
1272 cmd->dataout_timer_flags |= ISCSI_TF_RUNNING;
1273 add_timer(&cmd->dataout_timer);
1276 void iscsit_stop_dataout_timer(struct iscsi_cmd *cmd)
1278 spin_lock_bh(&cmd->dataout_timeout_lock);
1279 if (!(cmd->dataout_timer_flags & ISCSI_TF_RUNNING)) {
1280 spin_unlock_bh(&cmd->dataout_timeout_lock);
1283 cmd->dataout_timer_flags |= ISCSI_TF_STOP;
1284 spin_unlock_bh(&cmd->dataout_timeout_lock);
1286 del_timer_sync(&cmd->dataout_timer);
1288 spin_lock_bh(&cmd->dataout_timeout_lock);
1289 cmd->dataout_timer_flags &= ~ISCSI_TF_RUNNING;
1291 cmd->init_task_tag);
1292 spin_unlock_bh(&cmd->dataout_timeout_lock);