Lines Matching refs:cmd

492 static int iscsit_queue_rsp(struct iscsi_conn *conn, struct iscsi_cmd *cmd)  in iscsit_queue_rsp()  argument
494 iscsit_add_cmd_to_response_queue(cmd, cmd->conn, cmd->i_state); in iscsit_queue_rsp()
498 static void iscsit_aborted_task(struct iscsi_conn *conn, struct iscsi_cmd *cmd) in iscsit_aborted_task() argument
500 bool scsi_cmd = (cmd->iscsi_opcode == ISCSI_OP_SCSI_CMD); in iscsit_aborted_task()
503 if (!list_empty(&cmd->i_conn_node)) in iscsit_aborted_task()
504 list_del_init(&cmd->i_conn_node); in iscsit_aborted_task()
507 __iscsit_free_cmd(cmd, scsi_cmd, true); in iscsit_aborted_task()
650 struct iscsi_cmd *cmd; in iscsit_add_reject() local
652 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsit_add_reject()
653 if (!cmd) in iscsit_add_reject()
656 cmd->iscsi_opcode = ISCSI_OP_REJECT; in iscsit_add_reject()
657 cmd->reject_reason = reason; in iscsit_add_reject()
659 cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); in iscsit_add_reject()
660 if (!cmd->buf_ptr) { in iscsit_add_reject()
662 iscsit_free_cmd(cmd, false); in iscsit_add_reject()
667 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_add_reject()
670 cmd->i_state = ISTATE_SEND_REJECT; in iscsit_add_reject()
671 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_add_reject()
677 struct iscsi_cmd *cmd, in iscsit_add_reject_from_cmd() argument
684 if (!cmd->conn) { in iscsit_add_reject_from_cmd()
686 cmd->init_task_tag); in iscsit_add_reject_from_cmd()
689 conn = cmd->conn; in iscsit_add_reject_from_cmd()
691 cmd->iscsi_opcode = ISCSI_OP_REJECT; in iscsit_add_reject_from_cmd()
692 cmd->reject_reason = reason; in iscsit_add_reject_from_cmd()
694 cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); in iscsit_add_reject_from_cmd()
695 if (!cmd->buf_ptr) { in iscsit_add_reject_from_cmd()
697 iscsit_free_cmd(cmd, false); in iscsit_add_reject_from_cmd()
703 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_add_reject_from_cmd()
707 cmd->i_state = ISTATE_SEND_REJECT; in iscsit_add_reject_from_cmd()
708 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_add_reject_from_cmd()
713 if (cmd->se_cmd.se_tfo != NULL) { in iscsit_add_reject_from_cmd()
715 target_put_sess_cmd(&cmd->se_cmd); in iscsit_add_reject_from_cmd()
720 static int iscsit_add_reject_cmd(struct iscsi_cmd *cmd, u8 reason, in iscsit_add_reject_cmd() argument
723 return iscsit_add_reject_from_cmd(cmd, reason, true, buf); in iscsit_add_reject_cmd()
726 int iscsit_reject_cmd(struct iscsi_cmd *cmd, u8 reason, unsigned char *buf) in iscsit_reject_cmd() argument
728 return iscsit_add_reject_from_cmd(cmd, reason, false, buf); in iscsit_reject_cmd()
736 struct iscsi_cmd *cmd, in iscsit_map_iovec() argument
748 sg = &cmd->se_cmd.t_data_sg[data_offset / PAGE_SIZE]; in iscsit_map_iovec()
751 cmd->first_data_sg = sg; in iscsit_map_iovec()
752 cmd->first_data_sg_off = page_off; in iscsit_map_iovec()
766 cmd->kmapped_nents = i; in iscsit_map_iovec()
771 static void iscsit_unmap_iovec(struct iscsi_cmd *cmd) in iscsit_unmap_iovec() argument
776 sg = cmd->first_data_sg; in iscsit_unmap_iovec()
778 for (i = 0; i < cmd->kmapped_nents; i++) in iscsit_unmap_iovec()
785 struct iscsi_cmd *cmd, *cmd_p; in iscsit_ack_from_expstatsn() local
793 list_for_each_entry_safe(cmd, cmd_p, &conn->conn_cmd_list, i_conn_node) { in iscsit_ack_from_expstatsn()
794 spin_lock(&cmd->istate_lock); in iscsit_ack_from_expstatsn()
795 if ((cmd->i_state == ISTATE_SENT_STATUS) && in iscsit_ack_from_expstatsn()
796 iscsi_sna_lt(cmd->stat_sn, exp_statsn)) { in iscsit_ack_from_expstatsn()
797 cmd->i_state = ISTATE_REMOVE; in iscsit_ack_from_expstatsn()
798 spin_unlock(&cmd->istate_lock); in iscsit_ack_from_expstatsn()
799 list_move_tail(&cmd->i_conn_node, &ack_list); in iscsit_ack_from_expstatsn()
802 spin_unlock(&cmd->istate_lock); in iscsit_ack_from_expstatsn()
806 list_for_each_entry_safe(cmd, cmd_p, &ack_list, i_conn_node) { in iscsit_ack_from_expstatsn()
807 list_del_init(&cmd->i_conn_node); in iscsit_ack_from_expstatsn()
808 iscsit_free_cmd(cmd, false); in iscsit_ack_from_expstatsn()
812 static int iscsit_allocate_iovecs(struct iscsi_cmd *cmd) in iscsit_allocate_iovecs() argument
814 u32 iov_count = max(1UL, DIV_ROUND_UP(cmd->se_cmd.data_length, PAGE_SIZE)); in iscsit_allocate_iovecs()
818 cmd->iov_data = kzalloc(iov_count * sizeof(struct kvec), GFP_KERNEL); in iscsit_allocate_iovecs()
819 if (!cmd->iov_data) { in iscsit_allocate_iovecs()
824 cmd->orig_iov_data_count = iov_count; in iscsit_allocate_iovecs()
828 int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_setup_scsi_cmd() argument
847 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
876 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
883 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
890 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
897 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
906 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
914 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
922 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
930 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
938 cmd->data_direction = data_direction; in iscsit_setup_scsi_cmd()
958 cmd->iscsi_opcode = ISCSI_OP_SCSI_CMD; in iscsit_setup_scsi_cmd()
959 cmd->i_state = ISTATE_NEW_CMD; in iscsit_setup_scsi_cmd()
960 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_setup_scsi_cmd()
961 cmd->immediate_data = (payload_length) ? 1 : 0; in iscsit_setup_scsi_cmd()
962 cmd->unsolicited_data = ((!(hdr->flags & ISCSI_FLAG_CMD_FINAL) && in iscsit_setup_scsi_cmd()
964 if (cmd->unsolicited_data) in iscsit_setup_scsi_cmd()
965 cmd->cmd_flags |= ICF_NON_IMMEDIATE_UNSOLICITED_DATA; in iscsit_setup_scsi_cmd()
967 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_setup_scsi_cmd()
969 cmd->targ_xfer_tag = session_get_next_ttt(conn->sess); in iscsit_setup_scsi_cmd()
971 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_setup_scsi_cmd()
972 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_setup_scsi_cmd()
973 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_setup_scsi_cmd()
974 cmd->first_burst_len = payload_length; in iscsit_setup_scsi_cmd()
977 cmd->data_direction == DMA_FROM_DEVICE) { in iscsit_setup_scsi_cmd()
982 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
985 iscsit_attach_datain_req(cmd, dr); in iscsit_setup_scsi_cmd()
991 transport_init_se_cmd(&cmd->se_cmd, &iscsi_ops, in iscsit_setup_scsi_cmd()
993 cmd->data_direction, sam_task_attr, in iscsit_setup_scsi_cmd()
994 cmd->sense_buffer + 2); in iscsit_setup_scsi_cmd()
1001 target_get_sess_cmd(&cmd->se_cmd, true); in iscsit_setup_scsi_cmd()
1003 cmd->sense_reason = transport_lookup_cmd_lun(&cmd->se_cmd, in iscsit_setup_scsi_cmd()
1005 if (cmd->sense_reason) in iscsit_setup_scsi_cmd()
1008 cmd->sense_reason = target_setup_cmd_from_cdb(&cmd->se_cmd, hdr->cdb); in iscsit_setup_scsi_cmd()
1009 if (cmd->sense_reason) { in iscsit_setup_scsi_cmd()
1010 if (cmd->sense_reason == TCM_OUT_OF_RESOURCES) { in iscsit_setup_scsi_cmd()
1011 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
1018 if (iscsit_build_pdu_and_seq_lists(cmd, payload_length) < 0) { in iscsit_setup_scsi_cmd()
1019 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
1025 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_setup_scsi_cmd()
1031 core_alua_check_nonop_delay(&cmd->se_cmd); in iscsit_setup_scsi_cmd()
1037 void iscsit_set_unsoliticed_dataout(struct iscsi_cmd *cmd) in iscsit_set_unsoliticed_dataout() argument
1039 iscsit_set_dataout_sequence_values(cmd); in iscsit_set_unsoliticed_dataout()
1041 spin_lock_bh(&cmd->dataout_timeout_lock); in iscsit_set_unsoliticed_dataout()
1042 iscsit_start_dataout_timer(cmd, cmd->conn); in iscsit_set_unsoliticed_dataout()
1043 spin_unlock_bh(&cmd->dataout_timeout_lock); in iscsit_set_unsoliticed_dataout()
1047 int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_process_scsi_cmd() argument
1061 if (!cmd->immediate_data) { in iscsit_process_scsi_cmd()
1062 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, in iscsit_process_scsi_cmd()
1067 target_put_sess_cmd(&cmd->se_cmd); in iscsit_process_scsi_cmd()
1077 if (!cmd->immediate_data) { in iscsit_process_scsi_cmd()
1078 if (!cmd->sense_reason && cmd->unsolicited_data) in iscsit_process_scsi_cmd()
1079 iscsit_set_unsoliticed_dataout(cmd); in iscsit_process_scsi_cmd()
1080 if (!cmd->sense_reason) in iscsit_process_scsi_cmd()
1083 target_put_sess_cmd(&cmd->se_cmd); in iscsit_process_scsi_cmd()
1092 if (cmd->sense_reason) { in iscsit_process_scsi_cmd()
1093 if (cmd->reject_reason) in iscsit_process_scsi_cmd()
1102 cmd->sense_reason = transport_generic_new_cmd(&cmd->se_cmd); in iscsit_process_scsi_cmd()
1103 if (cmd->sense_reason) in iscsit_process_scsi_cmd()
1111 iscsit_get_immediate_data(struct iscsi_cmd *cmd, struct iscsi_scsi_req *hdr, in iscsit_get_immediate_data() argument
1121 immed_ret = iscsit_handle_immediate_data(cmd, hdr, in iscsit_get_immediate_data()
1122 cmd->first_burst_len); in iscsit_get_immediate_data()
1130 cmdsn_ret = iscsit_sequence_cmd(cmd->conn, cmd, in iscsit_get_immediate_data()
1135 if (cmd->sense_reason || cmdsn_ret == CMDSN_LOWER_THAN_EXP) { in iscsit_get_immediate_data()
1138 rc = iscsit_dump_data_payload(cmd->conn, in iscsit_get_immediate_data()
1139 cmd->first_burst_len, 1); in iscsit_get_immediate_data()
1140 target_put_sess_cmd(&cmd->se_cmd); in iscsit_get_immediate_data()
1142 } else if (cmd->unsolicited_data) in iscsit_get_immediate_data()
1143 iscsit_set_unsoliticed_dataout(cmd); in iscsit_get_immediate_data()
1157 cmd->i_state = ISTATE_REMOVE; in iscsit_get_immediate_data()
1158 iscsit_add_cmd_to_immediate_queue(cmd, cmd->conn, cmd->i_state); in iscsit_get_immediate_data()
1166 iscsit_handle_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_scsi_cmd() argument
1173 rc = iscsit_setup_scsi_cmd(conn, cmd, buf); in iscsit_handle_scsi_cmd()
1180 if (iscsit_allocate_iovecs(cmd) < 0) { in iscsit_handle_scsi_cmd()
1181 return iscsit_reject_cmd(cmd, in iscsit_handle_scsi_cmd()
1184 immed_data = cmd->immediate_data; in iscsit_handle_scsi_cmd()
1186 rc = iscsit_process_scsi_cmd(conn, cmd, hdr); in iscsit_handle_scsi_cmd()
1195 return iscsit_get_immediate_data(cmd, hdr, dump_payload); in iscsit_handle_scsi_cmd()
1200 struct iscsi_cmd *cmd, in iscsit_do_crypto_hash_sg() argument
1213 sg = cmd->first_data_sg; in iscsit_do_crypto_hash_sg()
1214 page_off = cmd->first_data_sg_off; in iscsit_do_crypto_hash_sg()
1265 struct iscsi_cmd *cmd = NULL; in iscsit_check_dataout_hdr() local
1286 cmd = iscsit_find_cmd_from_itt_or_dump(conn, hdr->itt, in iscsit_check_dataout_hdr()
1288 if (!cmd) in iscsit_check_dataout_hdr()
1296 if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) { in iscsit_check_dataout_hdr()
1299 cmd->init_task_tag); in iscsit_check_dataout_hdr()
1303 if (cmd->data_direction != DMA_TO_DEVICE) { in iscsit_check_dataout_hdr()
1305 " NON-WRITE command.\n", cmd->init_task_tag); in iscsit_check_dataout_hdr()
1308 se_cmd = &cmd->se_cmd; in iscsit_check_dataout_hdr()
1309 iscsit_mod_dataout_timer(cmd); in iscsit_check_dataout_hdr()
1311 if ((be32_to_cpu(hdr->offset) + payload_length) > cmd->se_cmd.data_length) { in iscsit_check_dataout_hdr()
1314 hdr->offset, payload_length, cmd->se_cmd.data_length); in iscsit_check_dataout_hdr()
1315 return iscsit_reject_cmd(cmd, ISCSI_REASON_BOOKMARK_INVALID, buf); in iscsit_check_dataout_hdr()
1318 if (cmd->unsolicited_data) { in iscsit_check_dataout_hdr()
1324 transport_send_check_condition_and_sense(&cmd->se_cmd, in iscsit_check_dataout_hdr()
1346 iscsit_stop_dataout_timer(cmd); in iscsit_check_dataout_hdr()
1365 if (--cmd->outstanding_r2ts < 1) { in iscsit_check_dataout_hdr()
1366 iscsit_stop_dataout_timer(cmd); in iscsit_check_dataout_hdr()
1378 rc = iscsit_check_pre_dataout(cmd, buf); in iscsit_check_dataout_hdr()
1384 *out_cmd = cmd; in iscsit_check_dataout_hdr()
1390 iscsit_get_dataout(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_get_dataout() argument
1399 iov = &cmd->iov_data[0]; in iscsit_get_dataout()
1401 iov_ret = iscsit_map_iovec(cmd, iov, be32_to_cpu(hdr->offset), in iscsit_get_dataout()
1410 iov[iov_count].iov_base = cmd->pad_bytes; in iscsit_get_dataout()
1422 rx_got = rx_data(conn, &cmd->iov_data[0], iov_count, rx_size); in iscsit_get_dataout()
1424 iscsit_unmap_iovec(cmd); in iscsit_get_dataout()
1432 data_crc = iscsit_do_crypto_hash_sg(&conn->conn_rx_hash, cmd, in iscsit_get_dataout()
1435 cmd->pad_bytes); in iscsit_get_dataout()
1455 iscsit_check_dataout_payload(struct iscsi_cmd *cmd, struct iscsi_data *hdr, in iscsit_check_dataout_payload() argument
1458 struct iscsi_conn *conn = cmd->conn; in iscsit_check_dataout_payload()
1464 rc = iscsit_check_post_dataout(cmd, (unsigned char *)hdr, data_crc_failed); in iscsit_check_dataout_payload()
1468 iscsit_set_dataout_sequence_values(cmd); in iscsit_check_dataout_payload()
1469 conn->conn_transport->iscsit_get_dataout(conn, cmd, false); in iscsit_check_dataout_payload()
1475 spin_lock_bh(&cmd->istate_lock); in iscsit_check_dataout_payload()
1476 ooo_cmdsn = (cmd->cmd_flags & ICF_OOO_CMDSN); in iscsit_check_dataout_payload()
1477 cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT; in iscsit_check_dataout_payload()
1478 cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; in iscsit_check_dataout_payload()
1479 spin_unlock_bh(&cmd->istate_lock); in iscsit_check_dataout_payload()
1481 iscsit_stop_dataout_timer(cmd); in iscsit_check_dataout_payload()
1484 target_execute_cmd(&cmd->se_cmd); in iscsit_check_dataout_payload()
1495 struct iscsi_cmd *cmd = NULL; in iscsit_handle_data_out() local
1500 rc = iscsit_check_dataout_hdr(conn, buf, &cmd); in iscsit_handle_data_out()
1503 else if (!cmd) in iscsit_handle_data_out()
1506 rc = iscsit_get_dataout(conn, cmd, hdr); in iscsit_handle_data_out()
1512 return iscsit_check_dataout_payload(cmd, hdr, data_crc_failed); in iscsit_handle_data_out()
1515 int iscsit_setup_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_setup_nop_out() argument
1522 if (!cmd) in iscsit_setup_nop_out()
1526 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_nop_out()
1533 if (!cmd) in iscsit_setup_nop_out()
1537 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_nop_out()
1546 if (!cmd) in iscsit_setup_nop_out()
1550 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_nop_out()
1567 cmd->iscsi_opcode = ISCSI_OP_NOOP_OUT; in iscsit_setup_nop_out()
1568 cmd->i_state = ISTATE_SEND_NOPIN; in iscsit_setup_nop_out()
1569 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? in iscsit_setup_nop_out()
1571 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_setup_nop_out()
1572 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_setup_nop_out()
1573 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_setup_nop_out()
1574 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_setup_nop_out()
1575 cmd->data_direction = DMA_NONE; in iscsit_setup_nop_out()
1582 int iscsit_process_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_process_nop_out() argument
1591 if (!cmd) in iscsit_process_nop_out()
1596 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_process_nop_out()
1602 iscsit_add_cmd_to_response_queue(cmd, conn, in iscsit_process_nop_out()
1603 cmd->i_state); in iscsit_process_nop_out()
1607 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, in iscsit_process_nop_out()
1640 static int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_nop_out() argument
1649 ret = iscsit_setup_nop_out(conn, cmd, hdr); in iscsit_handle_nop_out()
1667 iov = &cmd->iov_misc[0]; in iscsit_handle_nop_out()
1675 iov[niov].iov_base = &cmd->pad_bytes; in iscsit_handle_nop_out()
1685 rx_got = rx_data(conn, &cmd->iov_misc[0], niov, rx_size); in iscsit_handle_nop_out()
1694 padding, cmd->pad_bytes, in iscsit_handle_nop_out()
1729 cmd->buf_ptr = ping_data; in iscsit_handle_nop_out()
1730 cmd->buf_ptr_size = payload_length; in iscsit_handle_nop_out()
1737 return iscsit_process_nop_out(conn, cmd, hdr); in iscsit_handle_nop_out()
1739 if (cmd) in iscsit_handle_nop_out()
1740 iscsit_free_cmd(cmd, false); in iscsit_handle_nop_out()
1747 iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_task_mgt_cmd() argument
1778 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1785 cmd->data_direction = DMA_NONE; in iscsit_handle_task_mgt_cmd()
1787 cmd->tmr_req = kzalloc(sizeof(struct iscsi_tmr_req), GFP_KERNEL); in iscsit_handle_task_mgt_cmd()
1788 if (!cmd->tmr_req) { in iscsit_handle_task_mgt_cmd()
1791 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1805 transport_init_se_cmd(&cmd->se_cmd, &iscsi_ops, in iscsit_handle_task_mgt_cmd()
1807 TCM_SIMPLE_TAG, cmd->sense_buffer + 2); in iscsit_handle_task_mgt_cmd()
1809 target_get_sess_cmd(&cmd->se_cmd, true); in iscsit_handle_task_mgt_cmd()
1837 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1841 ret = core_tmr_alloc_req(&cmd->se_cmd, cmd->tmr_req, in iscsit_handle_task_mgt_cmd()
1844 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1847 cmd->tmr_req->se_tmr_req = cmd->se_cmd.se_tmr_req; in iscsit_handle_task_mgt_cmd()
1850 cmd->iscsi_opcode = ISCSI_OP_SCSI_TMFUNC; in iscsit_handle_task_mgt_cmd()
1851 cmd->i_state = ISTATE_SEND_TASKMGTRSP; in iscsit_handle_task_mgt_cmd()
1852 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_handle_task_mgt_cmd()
1853 cmd->init_task_tag = hdr->itt; in iscsit_handle_task_mgt_cmd()
1854 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_handle_task_mgt_cmd()
1855 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_handle_task_mgt_cmd()
1856 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_handle_task_mgt_cmd()
1857 se_tmr = cmd->se_cmd.se_tmr_req; in iscsit_handle_task_mgt_cmd()
1858 tmr_req = cmd->tmr_req; in iscsit_handle_task_mgt_cmd()
1863 ret = transport_lookup_tmr_lun(&cmd->se_cmd, in iscsit_handle_task_mgt_cmd()
1873 se_tmr->response = iscsit_tmr_abort_task(cmd, buf); in iscsit_handle_task_mgt_cmd()
1895 se_tmr->response = iscsit_tmr_task_reassign(cmd, buf); in iscsit_handle_task_mgt_cmd()
1904 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1919 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_handle_task_mgt_cmd()
1923 int cmdsn_ret = iscsit_sequence_cmd(conn, cmd, buf, hdr->cmdsn); in iscsit_handle_task_mgt_cmd()
1939 return transport_generic_handle_tmr(&cmd->se_cmd); in iscsit_handle_task_mgt_cmd()
1951 target_put_sess_cmd(&cmd->se_cmd); in iscsit_handle_task_mgt_cmd()
1954 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_handle_task_mgt_cmd()
1961 iscsit_setup_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_setup_text_cmd() argument
1970 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_text_cmd()
1977 return iscsit_reject_cmd(cmd, ISCSI_REASON_CMD_NOT_SUPPORTED, in iscsit_setup_text_cmd()
1985 cmd->iscsi_opcode = ISCSI_OP_TEXT; in iscsit_setup_text_cmd()
1986 cmd->i_state = ISTATE_SEND_TEXTRSP; in iscsit_setup_text_cmd()
1987 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_setup_text_cmd()
1988 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_setup_text_cmd()
1989 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_setup_text_cmd()
1990 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_setup_text_cmd()
1991 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_setup_text_cmd()
1992 cmd->data_direction = DMA_NONE; in iscsit_setup_text_cmd()
1993 cmd->text_in_ptr = NULL; in iscsit_setup_text_cmd()
2000 iscsit_process_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_process_text_cmd() argument
2003 unsigned char *text_in = cmd->text_in_ptr, *text_ptr; in iscsit_process_text_cmd()
2007 cmd->targ_xfer_tag = be32_to_cpu(hdr->ttt); in iscsit_process_text_cmd()
2008 if (cmd->targ_xfer_tag == 0xFFFFFFFF) { in iscsit_process_text_cmd()
2027 cmd->cmd_flags |= ICF_SENDTARGETS_ALL; in iscsit_process_text_cmd()
2030 cmd->cmd_flags |= ICF_SENDTARGETS_SINGLE; in iscsit_process_text_cmd()
2037 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_process_text_cmd()
2044 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, in iscsit_process_text_cmd()
2052 return iscsit_execute_cmd(cmd, 0); in iscsit_process_text_cmd()
2055 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_process_text_cmd()
2061 iscsit_handle_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_text_cmd() argument
2069 rc = iscsit_setup_text_cmd(conn, cmd, hdr); in iscsit_handle_text_cmd()
2086 cmd->text_in_ptr = text_in; in iscsit_handle_text_cmd()
2147 return iscsit_process_text_cmd(conn, cmd, hdr); in iscsit_handle_text_cmd()
2150 kfree(cmd->text_in_ptr); in iscsit_handle_text_cmd()
2151 cmd->text_in_ptr = NULL; in iscsit_handle_text_cmd()
2152 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, buf); in iscsit_handle_text_cmd()
2155 int iscsit_logout_closesession(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_logout_closesession() argument
2180 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_closesession()
2185 int iscsit_logout_closeconnection(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_logout_closeconnection() argument
2191 " %hu on CID: %hu.\n", cmd->logout_cid, conn->cid); in iscsit_logout_closeconnection()
2197 if (conn->cid == cmd->logout_cid) { in iscsit_logout_closeconnection()
2217 cmd->logout_cid); in iscsit_logout_closeconnection()
2219 cmd->logout_response = ISCSI_LOGOUT_CID_NOT_FOUND; in iscsit_logout_closeconnection()
2220 iscsit_add_cmd_to_response_queue(cmd, conn, in iscsit_logout_closeconnection()
2221 cmd->i_state); in iscsit_logout_closeconnection()
2228 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_closeconnection()
2233 int iscsit_logout_removeconnforrecovery(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_logout_removeconnforrecovery() argument
2238 " CID: %hu on CID: %hu.\n", cmd->logout_cid, conn->cid); in iscsit_logout_removeconnforrecovery()
2243 cmd->logout_response = ISCSI_LOGOUT_RECOVERY_UNSUPPORTED; in iscsit_logout_removeconnforrecovery()
2244 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_removeconnforrecovery()
2248 if (conn->cid == cmd->logout_cid) { in iscsit_logout_removeconnforrecovery()
2251 cmd->logout_cid, conn->cid); in iscsit_logout_removeconnforrecovery()
2252 cmd->logout_response = ISCSI_LOGOUT_CLEANUP_FAILED; in iscsit_logout_removeconnforrecovery()
2253 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_removeconnforrecovery()
2257 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_removeconnforrecovery()
2263 iscsit_handle_logout_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_logout_cmd() argument
2291 iscsit_free_cmd(cmd, false); in iscsit_handle_logout_cmd()
2295 cmd->iscsi_opcode = ISCSI_OP_LOGOUT; in iscsit_handle_logout_cmd()
2296 cmd->i_state = ISTATE_SEND_LOGOUTRSP; in iscsit_handle_logout_cmd()
2297 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_handle_logout_cmd()
2298 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_handle_logout_cmd()
2299 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_handle_logout_cmd()
2300 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_handle_logout_cmd()
2301 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_handle_logout_cmd()
2302 cmd->logout_cid = be16_to_cpu(hdr->cid); in iscsit_handle_logout_cmd()
2303 cmd->logout_reason = reason_code; in iscsit_handle_logout_cmd()
2304 cmd->data_direction = DMA_NONE; in iscsit_handle_logout_cmd()
2316 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_handle_logout_cmd()
2326 if (cmd->immediate_cmd) { in iscsit_handle_logout_cmd()
2327 int ret = iscsit_execute_cmd(cmd, 0); in iscsit_handle_logout_cmd()
2332 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, buf, hdr->cmdsn); in iscsit_handle_logout_cmd()
2408 struct iscsi_cmd *cmd, in iscsit_handle_immediate_data() argument
2414 struct iscsi_conn *conn = cmd->conn; in iscsit_handle_immediate_data()
2417 iov_ret = iscsit_map_iovec(cmd, cmd->iov_data, cmd->write_data_done, length); in iscsit_handle_immediate_data()
2423 iov = &cmd->iov_data[0]; in iscsit_handle_immediate_data()
2427 iov[iov_count].iov_base = cmd->pad_bytes; in iscsit_handle_immediate_data()
2438 rx_got = rx_data(conn, &cmd->iov_data[0], iov_count, rx_size); in iscsit_handle_immediate_data()
2440 iscsit_unmap_iovec(cmd); in iscsit_handle_immediate_data()
2450 data_crc = iscsit_do_crypto_hash_sg(&conn->conn_rx_hash, cmd, in iscsit_handle_immediate_data()
2451 cmd->write_data_done, length, padding, in iscsit_handle_immediate_data()
2452 cmd->pad_bytes); in iscsit_handle_immediate_data()
2463 iscsit_reject_cmd(cmd, in iscsit_handle_immediate_data()
2468 iscsit_reject_cmd(cmd, in iscsit_handle_immediate_data()
2480 cmd->write_data_done += length; in iscsit_handle_immediate_data()
2482 if (cmd->write_data_done == cmd->se_cmd.data_length) { in iscsit_handle_immediate_data()
2483 spin_lock_bh(&cmd->istate_lock); in iscsit_handle_immediate_data()
2484 cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT; in iscsit_handle_immediate_data()
2485 cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; in iscsit_handle_immediate_data()
2486 spin_unlock_bh(&cmd->istate_lock); in iscsit_handle_immediate_data()
2499 struct iscsi_cmd *cmd; in iscsit_build_conn_drop_async_message() local
2518 cmd = iscsit_allocate_cmd(conn_p, TASK_RUNNING); in iscsit_build_conn_drop_async_message()
2519 if (!cmd) { in iscsit_build_conn_drop_async_message()
2524 cmd->logout_cid = conn->cid; in iscsit_build_conn_drop_async_message()
2525 cmd->iscsi_opcode = ISCSI_OP_ASYNC_EVENT; in iscsit_build_conn_drop_async_message()
2526 cmd->i_state = ISTATE_SEND_ASYNCMSG; in iscsit_build_conn_drop_async_message()
2529 list_add_tail(&cmd->i_conn_node, &conn_p->conn_cmd_list); in iscsit_build_conn_drop_async_message()
2532 iscsit_add_cmd_to_response_queue(cmd, conn_p, cmd->i_state); in iscsit_build_conn_drop_async_message()
2537 struct iscsi_cmd *cmd, in iscsit_send_conn_drop_async_message() argument
2542 cmd->tx_size = ISCSI_HDR_LEN; in iscsit_send_conn_drop_async_message()
2543 cmd->iscsi_opcode = ISCSI_OP_ASYNC_EVENT; in iscsit_send_conn_drop_async_message()
2545 hdr = (struct iscsi_async *) cmd->pdu; in iscsit_send_conn_drop_async_message()
2548 cmd->init_task_tag = RESERVED_ITT; in iscsit_send_conn_drop_async_message()
2549 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_send_conn_drop_async_message()
2551 cmd->stat_sn = conn->stat_sn++; in iscsit_send_conn_drop_async_message()
2552 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_send_conn_drop_async_message()
2556 hdr->param1 = cpu_to_be16(cmd->logout_cid); in iscsit_send_conn_drop_async_message()
2561 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_conn_drop_async_message()
2566 cmd->tx_size += ISCSI_CRC_LEN; in iscsit_send_conn_drop_async_message()
2571 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_conn_drop_async_message()
2572 cmd->iov_misc[0].iov_len = cmd->tx_size; in iscsit_send_conn_drop_async_message()
2573 cmd->iov_misc_count = 1; in iscsit_send_conn_drop_async_message()
2576 " 0x%08x, for CID: %hu on CID: %hu\n", cmd->stat_sn, in iscsit_send_conn_drop_async_message()
2577 cmd->logout_cid, conn->cid); in iscsit_send_conn_drop_async_message()
2592 iscsit_build_datain_pdu(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_datain_pdu() argument
2599 if (cmd->se_cmd.se_cmd_flags & SCF_OVERFLOW_BIT) { in iscsit_build_datain_pdu()
2601 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_datain_pdu()
2602 } else if (cmd->se_cmd.se_cmd_flags & SCF_UNDERFLOW_BIT) { in iscsit_build_datain_pdu()
2604 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_datain_pdu()
2609 int_to_scsilun(cmd->se_cmd.orig_fe_lun, in iscsit_build_datain_pdu()
2614 hdr->itt = cmd->init_task_tag; in iscsit_build_datain_pdu()
2617 hdr->ttt = cpu_to_be32(cmd->targ_xfer_tag); in iscsit_build_datain_pdu()
2621 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_datain_pdu()
2632 cmd->init_task_tag, ntohl(hdr->statsn), ntohl(hdr->datasn), in iscsit_build_datain_pdu()
2636 static int iscsit_send_datain(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_datain() argument
2638 struct iscsi_data_rsp *hdr = (struct iscsi_data_rsp *)&cmd->pdu[0]; in iscsit_send_datain()
2647 dr = iscsit_get_datain_values(cmd, &datain); in iscsit_send_datain()
2650 cmd->init_task_tag); in iscsit_send_datain()
2656 if ((datain.offset + datain.length) > cmd->se_cmd.data_length) { in iscsit_send_datain()
2659 cmd->init_task_tag, datain.offset, datain.length, in iscsit_send_datain()
2660 cmd->se_cmd.data_length); in iscsit_send_datain()
2670 (cmd->se_cmd.se_cmd_flags & SCF_TRANSPORT_TASK_SENSE)) in iscsit_send_datain()
2675 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_send_datain()
2676 cmd->stat_sn = conn->stat_sn++; in iscsit_send_datain()
2683 iscsit_build_datain_pdu(cmd, conn, &datain, hdr, set_statsn); in iscsit_send_datain()
2685 iov = &cmd->iov_data[0]; in iscsit_send_datain()
2686 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_datain()
2691 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_datain()
2693 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, cmd->pdu, in iscsit_send_datain()
2703 iov_ret = iscsit_map_iovec(cmd, &cmd->iov_data[1], in iscsit_send_datain()
2711 cmd->padding = ((-datain.length) & 3); in iscsit_send_datain()
2712 if (cmd->padding) { in iscsit_send_datain()
2713 iov[iov_count].iov_base = cmd->pad_bytes; in iscsit_send_datain()
2714 iov[iov_count++].iov_len = cmd->padding; in iscsit_send_datain()
2715 tx_size += cmd->padding; in iscsit_send_datain()
2718 cmd->padding); in iscsit_send_datain()
2721 cmd->data_crc = iscsit_do_crypto_hash_sg(&conn->conn_tx_hash, cmd, in iscsit_send_datain()
2722 datain.offset, datain.length, cmd->padding, cmd->pad_bytes); in iscsit_send_datain()
2724 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_datain()
2729 " 0x%08x\n", datain.length+cmd->padding, cmd->data_crc); in iscsit_send_datain()
2732 cmd->iov_data_count = iov_count; in iscsit_send_datain()
2733 cmd->tx_size = tx_size; in iscsit_send_datain()
2737 ret = iscsit_fe_sendpage_sg(cmd, conn); in iscsit_send_datain()
2739 ret = iscsit_send_tx_data(cmd, conn, 0); in iscsit_send_datain()
2741 iscsit_unmap_iovec(cmd); in iscsit_send_datain()
2749 eodr = (cmd->se_cmd.se_cmd_flags & SCF_TRANSPORT_TASK_SENSE) ? in iscsit_send_datain()
2751 iscsit_free_datain_req(cmd, dr); in iscsit_send_datain()
2758 iscsit_build_logout_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_logout_rsp() argument
2769 switch (cmd->logout_reason) { in iscsit_build_logout_rsp()
2773 cmd->logout_response = ISCSI_LOGOUT_SUCCESS; in iscsit_build_logout_rsp()
2776 if (cmd->logout_response == ISCSI_LOGOUT_CID_NOT_FOUND) in iscsit_build_logout_rsp()
2791 " successful.\n", cmd->logout_cid, conn->cid); in iscsit_build_logout_rsp()
2792 cmd->logout_response = ISCSI_LOGOUT_SUCCESS; in iscsit_build_logout_rsp()
2795 if ((cmd->logout_response == ISCSI_LOGOUT_RECOVERY_UNSUPPORTED) || in iscsit_build_logout_rsp()
2796 (cmd->logout_response == ISCSI_LOGOUT_CLEANUP_FAILED)) in iscsit_build_logout_rsp()
2803 cmd->logout_cid); in iscsit_build_logout_rsp()
2810 conn->sess, cmd->logout_cid); in iscsit_build_logout_rsp()
2814 cmd->logout_cid); in iscsit_build_logout_rsp()
2815 cmd->logout_response = ISCSI_LOGOUT_CID_NOT_FOUND; in iscsit_build_logout_rsp()
2819 iscsit_discard_cr_cmds_by_expstatsn(cr, cmd->exp_stat_sn); in iscsit_build_logout_rsp()
2823 cmd->logout_cid, conn->cid); in iscsit_build_logout_rsp()
2824 cmd->logout_response = ISCSI_LOGOUT_SUCCESS; in iscsit_build_logout_rsp()
2828 cmd->logout_reason); in iscsit_build_logout_rsp()
2834 hdr->response = cmd->logout_response; in iscsit_build_logout_rsp()
2835 hdr->itt = cmd->init_task_tag; in iscsit_build_logout_rsp()
2836 cmd->stat_sn = conn->stat_sn++; in iscsit_build_logout_rsp()
2837 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_logout_rsp()
2839 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_logout_rsp()
2845 cmd->init_task_tag, cmd->stat_sn, hdr->response, in iscsit_build_logout_rsp()
2846 cmd->logout_cid, conn->cid); in iscsit_build_logout_rsp()
2853 iscsit_send_logout(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_logout() argument
2858 rc = iscsit_build_logout_rsp(cmd, conn, in iscsit_send_logout()
2859 (struct iscsi_logout_rsp *)&cmd->pdu[0]); in iscsit_send_logout()
2864 iov = &cmd->iov_misc[0]; in iscsit_send_logout()
2865 iov[niov].iov_base = cmd->pdu; in iscsit_send_logout()
2869 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_logout()
2871 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, &cmd->pdu[0], in iscsit_send_logout()
2879 cmd->iov_misc_count = niov; in iscsit_send_logout()
2880 cmd->tx_size = tx_size; in iscsit_send_logout()
2886 iscsit_build_nopin_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_nopin_rsp() argument
2891 hton24(hdr->dlength, cmd->buf_ptr_size); in iscsit_build_nopin_rsp()
2894 hdr->itt = cmd->init_task_tag; in iscsit_build_nopin_rsp()
2895 hdr->ttt = cpu_to_be32(cmd->targ_xfer_tag); in iscsit_build_nopin_rsp()
2896 cmd->stat_sn = (nopout_response) ? conn->stat_sn++ : in iscsit_build_nopin_rsp()
2898 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_nopin_rsp()
2901 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_nopin_rsp()
2908 "Solicitied" : "Unsolicitied", cmd->init_task_tag, in iscsit_build_nopin_rsp()
2909 cmd->targ_xfer_tag, cmd->stat_sn, cmd->buf_ptr_size); in iscsit_build_nopin_rsp()
2917 struct iscsi_cmd *cmd, in iscsit_send_unsolicited_nopin() argument
2921 struct iscsi_nopin *hdr = (struct iscsi_nopin *)&cmd->pdu[0]; in iscsit_send_unsolicited_nopin()
2924 iscsit_build_nopin_rsp(cmd, conn, hdr, false); in iscsit_send_unsolicited_nopin()
2927 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_unsolicited_nopin()
2937 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_unsolicited_nopin()
2938 cmd->iov_misc[0].iov_len = tx_size; in iscsit_send_unsolicited_nopin()
2939 cmd->iov_misc_count = 1; in iscsit_send_unsolicited_nopin()
2940 cmd->tx_size = tx_size; in iscsit_send_unsolicited_nopin()
2943 " 0x%08x CID: %hu\n", hdr->ttt, cmd->stat_sn, conn->cid); in iscsit_send_unsolicited_nopin()
2945 ret = iscsit_send_tx_data(cmd, conn, 1); in iscsit_send_unsolicited_nopin()
2951 spin_lock_bh(&cmd->istate_lock); in iscsit_send_unsolicited_nopin()
2952 cmd->i_state = want_response ? in iscsit_send_unsolicited_nopin()
2954 spin_unlock_bh(&cmd->istate_lock); in iscsit_send_unsolicited_nopin()
2960 iscsit_send_nopin(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_nopin() argument
2962 struct iscsi_nopin *hdr = (struct iscsi_nopin *)&cmd->pdu[0]; in iscsit_send_nopin()
2967 iscsit_build_nopin_rsp(cmd, conn, hdr, true); in iscsit_send_nopin()
2970 iov = &cmd->iov_misc[0]; in iscsit_send_nopin()
2971 iov[niov].iov_base = cmd->pdu; in iscsit_send_nopin()
2975 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_nopin()
2990 if (cmd->buf_ptr_size) { in iscsit_send_nopin()
2991 iov[niov].iov_base = cmd->buf_ptr; in iscsit_send_nopin()
2992 iov[niov++].iov_len = cmd->buf_ptr_size; in iscsit_send_nopin()
2993 tx_size += cmd->buf_ptr_size; in iscsit_send_nopin()
2996 " data.\n", cmd->buf_ptr_size); in iscsit_send_nopin()
2998 padding = ((-cmd->buf_ptr_size) & 3); in iscsit_send_nopin()
3000 iov[niov].iov_base = &cmd->pad_bytes; in iscsit_send_nopin()
3008 cmd->buf_ptr, cmd->buf_ptr_size, in iscsit_send_nopin()
3009 padding, (u8 *)&cmd->pad_bytes, in iscsit_send_nopin()
3010 (u8 *)&cmd->data_crc); in iscsit_send_nopin()
3012 iov[niov].iov_base = &cmd->data_crc; in iscsit_send_nopin()
3017 cmd->buf_ptr_size, cmd->data_crc); in iscsit_send_nopin()
3021 cmd->iov_misc_count = niov; in iscsit_send_nopin()
3022 cmd->tx_size = tx_size; in iscsit_send_nopin()
3028 struct iscsi_cmd *cmd, in iscsit_send_r2t() argument
3036 r2t = iscsit_get_r2t_from_list(cmd); in iscsit_send_r2t()
3040 hdr = (struct iscsi_r2t_rsp *) cmd->pdu; in iscsit_send_r2t()
3044 int_to_scsilun(cmd->se_cmd.orig_fe_lun, in iscsit_send_r2t()
3046 hdr->itt = cmd->init_task_tag; in iscsit_send_r2t()
3056 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_r2t()
3057 cmd->iov_misc[0].iov_len = ISCSI_HDR_LEN; in iscsit_send_r2t()
3061 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_r2t()
3066 cmd->iov_misc[0].iov_len += ISCSI_CRC_LEN; in iscsit_send_r2t()
3074 (!r2t->recovery_r2t) ? "" : "Recovery ", cmd->init_task_tag, in iscsit_send_r2t()
3078 cmd->iov_misc_count = 1; in iscsit_send_r2t()
3079 cmd->tx_size = tx_size; in iscsit_send_r2t()
3081 spin_lock_bh(&cmd->r2t_lock); in iscsit_send_r2t()
3083 spin_unlock_bh(&cmd->r2t_lock); in iscsit_send_r2t()
3085 ret = iscsit_send_tx_data(cmd, conn, 1); in iscsit_send_r2t()
3091 spin_lock_bh(&cmd->dataout_timeout_lock); in iscsit_send_r2t()
3092 iscsit_start_dataout_timer(cmd, conn); in iscsit_send_r2t()
3093 spin_unlock_bh(&cmd->dataout_timeout_lock); in iscsit_send_r2t()
3104 struct iscsi_cmd *cmd, in iscsit_build_r2ts_for_cmd() argument
3110 spin_lock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3111 if (cmd->cmd_flags & ICF_SENT_LAST_R2T) { in iscsit_build_r2ts_for_cmd()
3112 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3118 cmd->r2t_offset = max(cmd->r2t_offset, cmd->write_data_done); in iscsit_build_r2ts_for_cmd()
3120 while (cmd->outstanding_r2ts < conn->sess->sess_ops->MaxOutstandingR2T) { in iscsit_build_r2ts_for_cmd()
3122 offset = cmd->r2t_offset; in iscsit_build_r2ts_for_cmd()
3127 cmd->next_burst_len; in iscsit_build_r2ts_for_cmd()
3129 if (new_data_end > cmd->se_cmd.data_length) in iscsit_build_r2ts_for_cmd()
3130 xfer_len = cmd->se_cmd.data_length - offset; in iscsit_build_r2ts_for_cmd()
3134 cmd->next_burst_len; in iscsit_build_r2ts_for_cmd()
3139 if (new_data_end > cmd->se_cmd.data_length) in iscsit_build_r2ts_for_cmd()
3140 xfer_len = cmd->se_cmd.data_length - offset; in iscsit_build_r2ts_for_cmd()
3144 cmd->r2t_offset += xfer_len; in iscsit_build_r2ts_for_cmd()
3146 if (cmd->r2t_offset == cmd->se_cmd.data_length) in iscsit_build_r2ts_for_cmd()
3147 cmd->cmd_flags |= ICF_SENT_LAST_R2T; in iscsit_build_r2ts_for_cmd()
3151 seq = iscsit_get_seq_holder_for_r2t(cmd); in iscsit_build_r2ts_for_cmd()
3153 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3160 if (cmd->seq_send_order == cmd->seq_count) in iscsit_build_r2ts_for_cmd()
3161 cmd->cmd_flags |= ICF_SENT_LAST_R2T; in iscsit_build_r2ts_for_cmd()
3163 cmd->outstanding_r2ts++; in iscsit_build_r2ts_for_cmd()
3166 if (iscsit_add_r2t_to_list(cmd, offset, xfer_len, 0, 0) < 0) { in iscsit_build_r2ts_for_cmd()
3167 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3171 if (cmd->cmd_flags & ICF_SENT_LAST_R2T) in iscsit_build_r2ts_for_cmd()
3174 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3179 void iscsit_build_rsp_pdu(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_rsp_pdu() argument
3183 cmd->stat_sn = conn->stat_sn++; in iscsit_build_rsp_pdu()
3190 if (cmd->se_cmd.se_cmd_flags & SCF_OVERFLOW_BIT) { in iscsit_build_rsp_pdu()
3192 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_rsp_pdu()
3193 } else if (cmd->se_cmd.se_cmd_flags & SCF_UNDERFLOW_BIT) { in iscsit_build_rsp_pdu()
3195 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_rsp_pdu()
3197 hdr->response = cmd->iscsi_response; in iscsit_build_rsp_pdu()
3198 hdr->cmd_status = cmd->se_cmd.scsi_status; in iscsit_build_rsp_pdu()
3199 hdr->itt = cmd->init_task_tag; in iscsit_build_rsp_pdu()
3200 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_rsp_pdu()
3202 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_rsp_pdu()
3208 cmd->init_task_tag, cmd->stat_sn, cmd->se_cmd.scsi_status, in iscsit_build_rsp_pdu()
3209 cmd->se_cmd.scsi_status, conn->cid); in iscsit_build_rsp_pdu()
3213 static int iscsit_send_response(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_response() argument
3215 struct iscsi_scsi_rsp *hdr = (struct iscsi_scsi_rsp *)&cmd->pdu[0]; in iscsit_send_response()
3219 bool inc_stat_sn = (cmd->i_state == ISTATE_SEND_STATUS); in iscsit_send_response()
3221 iscsit_build_rsp_pdu(cmd, conn, inc_stat_sn, hdr); in iscsit_send_response()
3223 iov = &cmd->iov_misc[0]; in iscsit_send_response()
3224 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_response()
3231 if (cmd->se_cmd.sense_buffer && in iscsit_send_response()
3232 ((cmd->se_cmd.se_cmd_flags & SCF_TRANSPORT_TASK_SENSE) || in iscsit_send_response()
3233 (cmd->se_cmd.se_cmd_flags & SCF_EMULATED_TASK_SENSE))) { in iscsit_send_response()
3234 put_unaligned_be16(cmd->se_cmd.scsi_sense_length, cmd->sense_buffer); in iscsit_send_response()
3235 cmd->se_cmd.scsi_sense_length += sizeof (__be16); in iscsit_send_response()
3237 padding = -(cmd->se_cmd.scsi_sense_length) & 3; in iscsit_send_response()
3238 hton24(hdr->dlength, (u32)cmd->se_cmd.scsi_sense_length); in iscsit_send_response()
3239 iov[iov_count].iov_base = cmd->sense_buffer; in iscsit_send_response()
3241 (cmd->se_cmd.scsi_sense_length + padding); in iscsit_send_response()
3242 tx_size += cmd->se_cmd.scsi_sense_length; in iscsit_send_response()
3245 memset(cmd->sense_buffer + in iscsit_send_response()
3246 cmd->se_cmd.scsi_sense_length, 0, padding); in iscsit_send_response()
3254 cmd->sense_buffer, in iscsit_send_response()
3255 (cmd->se_cmd.scsi_sense_length + padding), in iscsit_send_response()
3256 0, NULL, (u8 *)&cmd->data_crc); in iscsit_send_response()
3258 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_response()
3264 (cmd->se_cmd.scsi_sense_length + padding), in iscsit_send_response()
3265 cmd->data_crc); in iscsit_send_response()
3270 cmd->se_cmd.scsi_sense_length); in iscsit_send_response()
3274 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_response()
3276 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, cmd->pdu, in iscsit_send_response()
3285 cmd->iov_misc_count = iov_count; in iscsit_send_response()
3286 cmd->tx_size = tx_size; in iscsit_send_response()
3309 iscsit_build_task_mgt_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_task_mgt_rsp() argument
3312 struct se_tmr_req *se_tmr = cmd->se_cmd.se_tmr_req; in iscsit_build_task_mgt_rsp()
3317 hdr->itt = cmd->init_task_tag; in iscsit_build_task_mgt_rsp()
3318 cmd->stat_sn = conn->stat_sn++; in iscsit_build_task_mgt_rsp()
3319 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_task_mgt_rsp()
3321 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_task_mgt_rsp()
3327 cmd->init_task_tag, cmd->stat_sn, hdr->response, conn->cid); in iscsit_build_task_mgt_rsp()
3332 iscsit_send_task_mgt_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_task_mgt_rsp() argument
3334 struct iscsi_tm_rsp *hdr = (struct iscsi_tm_rsp *)&cmd->pdu[0]; in iscsit_send_task_mgt_rsp()
3337 iscsit_build_task_mgt_rsp(cmd, conn, hdr); in iscsit_send_task_mgt_rsp()
3339 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_task_mgt_rsp()
3340 cmd->iov_misc[0].iov_len = ISCSI_HDR_LEN; in iscsit_send_task_mgt_rsp()
3344 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_task_mgt_rsp()
3349 cmd->iov_misc[0].iov_len += ISCSI_CRC_LEN; in iscsit_send_task_mgt_rsp()
3355 cmd->iov_misc_count = 1; in iscsit_send_task_mgt_rsp()
3356 cmd->tx_size = tx_size; in iscsit_send_task_mgt_rsp()
3388 iscsit_build_sendtargets_response(struct iscsi_cmd *cmd, in iscsit_build_sendtargets_response() argument
3393 struct iscsi_conn *conn = cmd->conn; in iscsit_build_sendtargets_response()
3400 unsigned char *text_in = cmd->text_in_ptr, *text_ptr = NULL; in iscsit_build_sendtargets_response()
3415 if (cmd->cmd_flags & ICF_SENDTARGETS_SINGLE) { in iscsit_build_sendtargets_response()
3431 if ((cmd->cmd_flags & ICF_SENDTARGETS_SINGLE) && in iscsit_build_sendtargets_response()
3449 cmd->conn->sess->sess_ops->InitiatorName))) { in iscsit_build_sendtargets_response()
3532 if (cmd->cmd_flags & ICF_SENDTARGETS_SINGLE) in iscsit_build_sendtargets_response()
3537 cmd->buf_ptr = payload; in iscsit_build_sendtargets_response()
3543 iscsit_build_text_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_text_rsp() argument
3550 text_length = iscsit_build_sendtargets_response(cmd, network_transport, in iscsit_build_text_rsp()
3551 cmd->read_data_done, in iscsit_build_text_rsp()
3560 cmd->read_data_done += text_length; in iscsit_build_text_rsp()
3561 if (cmd->targ_xfer_tag == 0xFFFFFFFF) in iscsit_build_text_rsp()
3562 cmd->targ_xfer_tag = session_get_next_ttt(conn->sess); in iscsit_build_text_rsp()
3567 hdr->itt = cmd->init_task_tag; in iscsit_build_text_rsp()
3568 hdr->ttt = cpu_to_be32(cmd->targ_xfer_tag); in iscsit_build_text_rsp()
3569 cmd->stat_sn = conn->stat_sn++; in iscsit_build_text_rsp()
3570 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_text_rsp()
3572 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_text_rsp()
3578 cmd->maxcmdsn_inc = 0; in iscsit_build_text_rsp()
3583 " Length: %u, CID: %hu F: %d C: %d\n", cmd->init_task_tag, in iscsit_build_text_rsp()
3584 cmd->targ_xfer_tag, cmd->stat_sn, text_length, conn->cid, in iscsit_build_text_rsp()
3593 struct iscsi_cmd *cmd, in iscsit_send_text_rsp() argument
3596 struct iscsi_text_rsp *hdr = (struct iscsi_text_rsp *)cmd->pdu; in iscsit_send_text_rsp()
3601 rc = iscsit_build_text_rsp(cmd, conn, hdr, ISCSI_TCP); in iscsit_send_text_rsp()
3606 iov = &cmd->iov_misc[0]; in iscsit_send_text_rsp()
3607 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_text_rsp()
3609 iov[iov_count].iov_base = cmd->buf_ptr; in iscsit_send_text_rsp()
3615 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_text_rsp()
3628 cmd->buf_ptr, text_length, in iscsit_send_text_rsp()
3629 0, NULL, (u8 *)&cmd->data_crc); in iscsit_send_text_rsp()
3631 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_text_rsp()
3637 cmd->data_crc); in iscsit_send_text_rsp()
3640 cmd->iov_misc_count = iov_count; in iscsit_send_text_rsp()
3641 cmd->tx_size = tx_size; in iscsit_send_text_rsp()
3647 iscsit_build_reject(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_reject() argument
3651 hdr->reason = cmd->reject_reason; in iscsit_build_reject()
3655 cmd->stat_sn = conn->stat_sn++; in iscsit_build_reject()
3656 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_reject()
3664 struct iscsi_cmd *cmd, in iscsit_send_reject() argument
3667 struct iscsi_reject *hdr = (struct iscsi_reject *)&cmd->pdu[0]; in iscsit_send_reject()
3671 iscsit_build_reject(cmd, conn, hdr); in iscsit_send_reject()
3673 iov = &cmd->iov_misc[0]; in iscsit_send_reject()
3674 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_reject()
3676 iov[iov_count].iov_base = cmd->buf_ptr; in iscsit_send_reject()
3682 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_reject()
3694 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, cmd->buf_ptr, in iscsit_send_reject()
3695 ISCSI_HDR_LEN, 0, NULL, (u8 *)&cmd->data_crc); in iscsit_send_reject()
3697 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_reject()
3701 " PDU 0x%08x\n", cmd->data_crc); in iscsit_send_reject()
3704 cmd->iov_misc_count = iov_count; in iscsit_send_reject()
3705 cmd->tx_size = tx_size; in iscsit_send_reject()
3765 iscsit_immediate_queue(struct iscsi_conn *conn, struct iscsi_cmd *cmd, int state) in iscsit_immediate_queue() argument
3771 ret = iscsit_send_r2t(cmd, conn); in iscsit_immediate_queue()
3777 list_del_init(&cmd->i_conn_node); in iscsit_immediate_queue()
3780 iscsit_free_cmd(cmd, false); in iscsit_immediate_queue()
3784 ret = iscsit_send_unsolicited_nopin(cmd, conn, 1); in iscsit_immediate_queue()
3789 ret = iscsit_send_unsolicited_nopin(cmd, conn, 0); in iscsit_immediate_queue()
3796 cmd->iscsi_opcode, cmd->init_task_tag, state, in iscsit_immediate_queue()
3812 struct iscsi_cmd *cmd; in iscsit_handle_immediate_queue() local
3818 cmd = qr->cmd; in iscsit_handle_immediate_queue()
3822 ret = t->iscsit_immediate_queue(conn, cmd, state); in iscsit_handle_immediate_queue()
3831 iscsit_response_queue(struct iscsi_conn *conn, struct iscsi_cmd *cmd, int state) in iscsit_response_queue() argument
3838 ret = iscsit_send_datain(cmd, conn); in iscsit_response_queue()
3846 spin_lock_bh(&cmd->istate_lock); in iscsit_response_queue()
3847 cmd->i_state = ISTATE_SENT_STATUS; in iscsit_response_queue()
3848 spin_unlock_bh(&cmd->istate_lock); in iscsit_response_queue()
3857 spin_lock_bh(&cmd->istate_lock); in iscsit_response_queue()
3858 cmd->i_state = ISTATE_SEND_STATUS; in iscsit_response_queue()
3859 spin_unlock_bh(&cmd->istate_lock); in iscsit_response_queue()
3867 ret = iscsit_send_response(cmd, conn); in iscsit_response_queue()
3870 ret = iscsit_send_logout(cmd, conn); in iscsit_response_queue()
3874 cmd, conn); in iscsit_response_queue()
3877 ret = iscsit_send_nopin(cmd, conn); in iscsit_response_queue()
3880 ret = iscsit_send_reject(cmd, conn); in iscsit_response_queue()
3883 ret = iscsit_send_task_mgt_rsp(cmd, conn); in iscsit_response_queue()
3886 ret = iscsit_tmr_post_handler(cmd, conn); in iscsit_response_queue()
3891 ret = iscsit_send_text_rsp(cmd, conn); in iscsit_response_queue()
3896 cmd->iscsi_opcode, cmd->init_task_tag, in iscsit_response_queue()
3903 if (iscsit_send_tx_data(cmd, conn, 1) < 0) { in iscsit_response_queue()
3905 iscsit_unmap_iovec(cmd); in iscsit_response_queue()
3908 iscsit_unmap_iovec(cmd); in iscsit_response_queue()
3912 if (!iscsit_logout_post_handler(cmd, conn)) in iscsit_response_queue()
3922 spin_lock_bh(&cmd->istate_lock); in iscsit_response_queue()
3923 cmd->i_state = ISTATE_SENT_STATUS; in iscsit_response_queue()
3924 spin_unlock_bh(&cmd->istate_lock); in iscsit_response_queue()
3929 cmd->iscsi_opcode, cmd->init_task_tag, in iscsit_response_queue()
3930 cmd->i_state, conn->cid); in iscsit_response_queue()
3947 struct iscsi_cmd *cmd; in iscsit_handle_response_queue() local
3952 cmd = qr->cmd; in iscsit_handle_response_queue()
3956 ret = t->iscsit_response_queue(conn, cmd, state); in iscsit_handle_response_queue()
4016 struct iscsi_cmd *cmd; in iscsi_target_rx_opcode() local
4021 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4022 if (!cmd) in iscsi_target_rx_opcode()
4025 ret = iscsit_handle_scsi_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4031 cmd = NULL; in iscsi_target_rx_opcode()
4033 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4034 if (!cmd) in iscsi_target_rx_opcode()
4037 ret = iscsit_handle_nop_out(conn, cmd, buf); in iscsi_target_rx_opcode()
4040 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4041 if (!cmd) in iscsi_target_rx_opcode()
4044 ret = iscsit_handle_task_mgt_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4048 cmd = iscsit_find_cmd_from_itt(conn, hdr->itt); in iscsi_target_rx_opcode()
4049 if (!cmd) in iscsi_target_rx_opcode()
4052 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4053 if (!cmd) in iscsi_target_rx_opcode()
4057 ret = iscsit_handle_text_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4060 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4061 if (!cmd) in iscsi_target_rx_opcode()
4064 ret = iscsit_handle_logout_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4218 struct iscsi_cmd *cmd = NULL, *cmd_tmp = NULL; in iscsit_release_commands_from_conn() local
4226 list_for_each_entry_safe(cmd, cmd_tmp, &conn->conn_cmd_list, i_conn_node) { in iscsit_release_commands_from_conn()
4228 list_del_init(&cmd->i_conn_node); in iscsit_release_commands_from_conn()
4231 iscsit_increment_maxcmdsn(cmd, sess); in iscsit_release_commands_from_conn()
4233 iscsit_free_cmd(cmd, true); in iscsit_release_commands_from_conn()
4243 struct iscsi_cmd *cmd; in iscsit_stop_timers_for_cmds() local
4246 list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) { in iscsit_stop_timers_for_cmds()
4247 if (cmd->data_direction == DMA_TO_DEVICE) in iscsit_stop_timers_for_cmds()
4248 iscsit_stop_dataout_timer(cmd); in iscsit_stop_timers_for_cmds()
4644 struct iscsi_cmd *cmd, in iscsit_logout_post_handler() argument
4649 switch (cmd->logout_reason) { in iscsit_logout_post_handler()
4651 switch (cmd->logout_response) { in iscsit_logout_post_handler()
4661 if (conn->cid == cmd->logout_cid) { in iscsit_logout_post_handler()
4662 switch (cmd->logout_response) { in iscsit_logout_post_handler()
4671 switch (cmd->logout_response) { in iscsit_logout_post_handler()
4674 cmd->logout_cid); in iscsit_logout_post_handler()
4685 switch (cmd->logout_response) { in iscsit_logout_post_handler()