Lines Matching refs:cmd

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