Lines Matching refs:cmd
484 static int iscsit_queue_rsp(struct iscsi_conn *conn, struct iscsi_cmd *cmd) in iscsit_queue_rsp() argument
486 iscsit_add_cmd_to_response_queue(cmd, cmd->conn, cmd->i_state); in iscsit_queue_rsp()
490 static void iscsit_aborted_task(struct iscsi_conn *conn, struct iscsi_cmd *cmd) in iscsit_aborted_task() argument
492 bool scsi_cmd = (cmd->iscsi_opcode == ISCSI_OP_SCSI_CMD); in iscsit_aborted_task()
495 if (!list_empty(&cmd->i_conn_node)) in iscsit_aborted_task()
496 list_del_init(&cmd->i_conn_node); in iscsit_aborted_task()
499 __iscsit_free_cmd(cmd, scsi_cmd, true); in iscsit_aborted_task()
642 struct iscsi_cmd *cmd; in iscsit_add_reject() local
644 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsit_add_reject()
645 if (!cmd) in iscsit_add_reject()
648 cmd->iscsi_opcode = ISCSI_OP_REJECT; in iscsit_add_reject()
649 cmd->reject_reason = reason; in iscsit_add_reject()
651 cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); in iscsit_add_reject()
652 if (!cmd->buf_ptr) { in iscsit_add_reject()
654 iscsit_free_cmd(cmd, false); in iscsit_add_reject()
659 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_add_reject()
662 cmd->i_state = ISTATE_SEND_REJECT; in iscsit_add_reject()
663 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_add_reject()
669 struct iscsi_cmd *cmd, in iscsit_add_reject_from_cmd() argument
676 if (!cmd->conn) { in iscsit_add_reject_from_cmd()
678 cmd->init_task_tag); in iscsit_add_reject_from_cmd()
681 conn = cmd->conn; in iscsit_add_reject_from_cmd()
683 cmd->iscsi_opcode = ISCSI_OP_REJECT; in iscsit_add_reject_from_cmd()
684 cmd->reject_reason = reason; in iscsit_add_reject_from_cmd()
686 cmd->buf_ptr = kmemdup(buf, ISCSI_HDR_LEN, GFP_KERNEL); in iscsit_add_reject_from_cmd()
687 if (!cmd->buf_ptr) { in iscsit_add_reject_from_cmd()
689 iscsit_free_cmd(cmd, false); in iscsit_add_reject_from_cmd()
695 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_add_reject_from_cmd()
699 cmd->i_state = ISTATE_SEND_REJECT; in iscsit_add_reject_from_cmd()
700 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_add_reject_from_cmd()
705 if (cmd->se_cmd.se_tfo != NULL) { in iscsit_add_reject_from_cmd()
707 target_put_sess_cmd(&cmd->se_cmd); in iscsit_add_reject_from_cmd()
712 static int iscsit_add_reject_cmd(struct iscsi_cmd *cmd, u8 reason, in iscsit_add_reject_cmd() argument
715 return iscsit_add_reject_from_cmd(cmd, reason, true, buf); in iscsit_add_reject_cmd()
718 int iscsit_reject_cmd(struct iscsi_cmd *cmd, u8 reason, unsigned char *buf) in iscsit_reject_cmd() argument
720 return iscsit_add_reject_from_cmd(cmd, reason, false, buf); in iscsit_reject_cmd()
728 struct iscsi_cmd *cmd, in iscsit_map_iovec() argument
740 sg = &cmd->se_cmd.t_data_sg[data_offset / PAGE_SIZE]; in iscsit_map_iovec()
743 cmd->first_data_sg = sg; in iscsit_map_iovec()
744 cmd->first_data_sg_off = page_off; in iscsit_map_iovec()
758 cmd->kmapped_nents = i; in iscsit_map_iovec()
763 static void iscsit_unmap_iovec(struct iscsi_cmd *cmd) in iscsit_unmap_iovec() argument
768 sg = cmd->first_data_sg; in iscsit_unmap_iovec()
770 for (i = 0; i < cmd->kmapped_nents; i++) in iscsit_unmap_iovec()
777 struct iscsi_cmd *cmd, *cmd_p; in iscsit_ack_from_expstatsn() local
785 list_for_each_entry_safe(cmd, cmd_p, &conn->conn_cmd_list, i_conn_node) { in iscsit_ack_from_expstatsn()
786 spin_lock(&cmd->istate_lock); in iscsit_ack_from_expstatsn()
787 if ((cmd->i_state == ISTATE_SENT_STATUS) && in iscsit_ack_from_expstatsn()
788 iscsi_sna_lt(cmd->stat_sn, exp_statsn)) { in iscsit_ack_from_expstatsn()
789 cmd->i_state = ISTATE_REMOVE; in iscsit_ack_from_expstatsn()
790 spin_unlock(&cmd->istate_lock); in iscsit_ack_from_expstatsn()
791 list_move_tail(&cmd->i_conn_node, &ack_list); in iscsit_ack_from_expstatsn()
794 spin_unlock(&cmd->istate_lock); in iscsit_ack_from_expstatsn()
798 list_for_each_entry_safe(cmd, cmd_p, &ack_list, i_conn_node) { in iscsit_ack_from_expstatsn()
799 list_del_init(&cmd->i_conn_node); in iscsit_ack_from_expstatsn()
800 iscsit_free_cmd(cmd, false); in iscsit_ack_from_expstatsn()
804 static int iscsit_allocate_iovecs(struct iscsi_cmd *cmd) in iscsit_allocate_iovecs() argument
806 u32 iov_count = max(1UL, DIV_ROUND_UP(cmd->se_cmd.data_length, PAGE_SIZE)); in iscsit_allocate_iovecs()
810 cmd->iov_data = kzalloc(iov_count * sizeof(struct kvec), GFP_KERNEL); in iscsit_allocate_iovecs()
811 if (!cmd->iov_data) { in iscsit_allocate_iovecs()
816 cmd->orig_iov_data_count = iov_count; in iscsit_allocate_iovecs()
820 int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_setup_scsi_cmd() argument
839 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
868 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
875 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
882 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
889 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
898 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 cmd->data_direction = data_direction; in iscsit_setup_scsi_cmd()
950 cmd->iscsi_opcode = ISCSI_OP_SCSI_CMD; in iscsit_setup_scsi_cmd()
951 cmd->i_state = ISTATE_NEW_CMD; in iscsit_setup_scsi_cmd()
952 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_setup_scsi_cmd()
953 cmd->immediate_data = (payload_length) ? 1 : 0; in iscsit_setup_scsi_cmd()
954 cmd->unsolicited_data = ((!(hdr->flags & ISCSI_FLAG_CMD_FINAL) && in iscsit_setup_scsi_cmd()
956 if (cmd->unsolicited_data) in iscsit_setup_scsi_cmd()
957 cmd->cmd_flags |= ICF_NON_IMMEDIATE_UNSOLICITED_DATA; in iscsit_setup_scsi_cmd()
959 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_setup_scsi_cmd()
961 cmd->targ_xfer_tag = session_get_next_ttt(conn->sess); in iscsit_setup_scsi_cmd()
963 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_setup_scsi_cmd()
964 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_setup_scsi_cmd()
965 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_setup_scsi_cmd()
966 cmd->first_burst_len = payload_length; in iscsit_setup_scsi_cmd()
969 cmd->data_direction == DMA_FROM_DEVICE) { in iscsit_setup_scsi_cmd()
974 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
977 iscsit_attach_datain_req(cmd, dr); in iscsit_setup_scsi_cmd()
983 transport_init_se_cmd(&cmd->se_cmd, &iscsi_ops, in iscsit_setup_scsi_cmd()
985 cmd->data_direction, sam_task_attr, in iscsit_setup_scsi_cmd()
986 cmd->sense_buffer + 2); in iscsit_setup_scsi_cmd()
993 target_get_sess_cmd(&cmd->se_cmd, true); in iscsit_setup_scsi_cmd()
995 cmd->sense_reason = transport_lookup_cmd_lun(&cmd->se_cmd, in iscsit_setup_scsi_cmd()
997 if (cmd->sense_reason) in iscsit_setup_scsi_cmd()
1001 cmd->se_cmd.tag = (__force u32)cmd->init_task_tag; in iscsit_setup_scsi_cmd()
1002 cmd->sense_reason = target_setup_cmd_from_cdb(&cmd->se_cmd, hdr->cdb); in iscsit_setup_scsi_cmd()
1003 if (cmd->sense_reason) { in iscsit_setup_scsi_cmd()
1004 if (cmd->sense_reason == TCM_OUT_OF_RESOURCES) { in iscsit_setup_scsi_cmd()
1005 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
1012 if (iscsit_build_pdu_and_seq_lists(cmd, payload_length) < 0) { in iscsit_setup_scsi_cmd()
1013 return iscsit_add_reject_cmd(cmd, in iscsit_setup_scsi_cmd()
1019 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_setup_scsi_cmd()
1025 core_alua_check_nonop_delay(&cmd->se_cmd); in iscsit_setup_scsi_cmd()
1031 void iscsit_set_unsoliticed_dataout(struct iscsi_cmd *cmd) in iscsit_set_unsoliticed_dataout() argument
1033 iscsit_set_dataout_sequence_values(cmd); in iscsit_set_unsoliticed_dataout()
1035 spin_lock_bh(&cmd->dataout_timeout_lock); in iscsit_set_unsoliticed_dataout()
1036 iscsit_start_dataout_timer(cmd, cmd->conn); in iscsit_set_unsoliticed_dataout()
1037 spin_unlock_bh(&cmd->dataout_timeout_lock); in iscsit_set_unsoliticed_dataout()
1041 int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_process_scsi_cmd() argument
1055 if (!cmd->immediate_data) { in iscsit_process_scsi_cmd()
1056 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, in iscsit_process_scsi_cmd()
1061 target_put_sess_cmd(&cmd->se_cmd); in iscsit_process_scsi_cmd()
1071 if (!cmd->immediate_data) { in iscsit_process_scsi_cmd()
1072 if (!cmd->sense_reason && cmd->unsolicited_data) in iscsit_process_scsi_cmd()
1073 iscsit_set_unsoliticed_dataout(cmd); in iscsit_process_scsi_cmd()
1074 if (!cmd->sense_reason) in iscsit_process_scsi_cmd()
1077 target_put_sess_cmd(&cmd->se_cmd); in iscsit_process_scsi_cmd()
1086 if (cmd->sense_reason) { in iscsit_process_scsi_cmd()
1087 if (cmd->reject_reason) in iscsit_process_scsi_cmd()
1096 cmd->sense_reason = transport_generic_new_cmd(&cmd->se_cmd); in iscsit_process_scsi_cmd()
1097 if (cmd->sense_reason) in iscsit_process_scsi_cmd()
1105 iscsit_get_immediate_data(struct iscsi_cmd *cmd, struct iscsi_scsi_req *hdr, in iscsit_get_immediate_data() argument
1115 immed_ret = iscsit_handle_immediate_data(cmd, hdr, in iscsit_get_immediate_data()
1116 cmd->first_burst_len); in iscsit_get_immediate_data()
1124 cmdsn_ret = iscsit_sequence_cmd(cmd->conn, cmd, in iscsit_get_immediate_data()
1129 if (cmd->sense_reason || cmdsn_ret == CMDSN_LOWER_THAN_EXP) { in iscsit_get_immediate_data()
1132 rc = iscsit_dump_data_payload(cmd->conn, in iscsit_get_immediate_data()
1133 cmd->first_burst_len, 1); in iscsit_get_immediate_data()
1134 target_put_sess_cmd(&cmd->se_cmd); in iscsit_get_immediate_data()
1136 } else if (cmd->unsolicited_data) in iscsit_get_immediate_data()
1137 iscsit_set_unsoliticed_dataout(cmd); in iscsit_get_immediate_data()
1151 cmd->i_state = ISTATE_REMOVE; in iscsit_get_immediate_data()
1152 iscsit_add_cmd_to_immediate_queue(cmd, cmd->conn, cmd->i_state); in iscsit_get_immediate_data()
1160 iscsit_handle_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_scsi_cmd() argument
1167 rc = iscsit_setup_scsi_cmd(conn, cmd, buf); in iscsit_handle_scsi_cmd()
1174 if (iscsit_allocate_iovecs(cmd) < 0) { in iscsit_handle_scsi_cmd()
1175 return iscsit_reject_cmd(cmd, in iscsit_handle_scsi_cmd()
1178 immed_data = cmd->immediate_data; in iscsit_handle_scsi_cmd()
1180 rc = iscsit_process_scsi_cmd(conn, cmd, hdr); in iscsit_handle_scsi_cmd()
1189 return iscsit_get_immediate_data(cmd, hdr, dump_payload); in iscsit_handle_scsi_cmd()
1194 struct iscsi_cmd *cmd, in iscsit_do_crypto_hash_sg() argument
1206 sg = cmd->first_data_sg; in iscsit_do_crypto_hash_sg()
1207 page_off = cmd->first_data_sg_off; in iscsit_do_crypto_hash_sg()
1258 struct iscsi_cmd *cmd = NULL; in iscsit_check_dataout_hdr() local
1279 cmd = iscsit_find_cmd_from_itt_or_dump(conn, hdr->itt, in iscsit_check_dataout_hdr()
1281 if (!cmd) in iscsit_check_dataout_hdr()
1289 if (cmd->cmd_flags & ICF_GOT_LAST_DATAOUT) { in iscsit_check_dataout_hdr()
1292 cmd->init_task_tag); in iscsit_check_dataout_hdr()
1296 if (cmd->data_direction != DMA_TO_DEVICE) { in iscsit_check_dataout_hdr()
1298 " NON-WRITE command.\n", cmd->init_task_tag); in iscsit_check_dataout_hdr()
1301 se_cmd = &cmd->se_cmd; in iscsit_check_dataout_hdr()
1302 iscsit_mod_dataout_timer(cmd); in iscsit_check_dataout_hdr()
1304 if ((be32_to_cpu(hdr->offset) + payload_length) > cmd->se_cmd.data_length) { in iscsit_check_dataout_hdr()
1307 hdr->offset, payload_length, cmd->se_cmd.data_length); in iscsit_check_dataout_hdr()
1308 return iscsit_reject_cmd(cmd, ISCSI_REASON_BOOKMARK_INVALID, buf); in iscsit_check_dataout_hdr()
1311 if (cmd->unsolicited_data) { in iscsit_check_dataout_hdr()
1317 transport_send_check_condition_and_sense(&cmd->se_cmd, in iscsit_check_dataout_hdr()
1339 iscsit_stop_dataout_timer(cmd); in iscsit_check_dataout_hdr()
1358 if (--cmd->outstanding_r2ts < 1) { in iscsit_check_dataout_hdr()
1359 iscsit_stop_dataout_timer(cmd); in iscsit_check_dataout_hdr()
1371 rc = iscsit_check_pre_dataout(cmd, buf); in iscsit_check_dataout_hdr()
1377 *out_cmd = cmd; in iscsit_check_dataout_hdr()
1383 iscsit_get_dataout(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_get_dataout() argument
1392 iov = &cmd->iov_data[0]; in iscsit_get_dataout()
1394 iov_ret = iscsit_map_iovec(cmd, iov, be32_to_cpu(hdr->offset), in iscsit_get_dataout()
1403 iov[iov_count].iov_base = cmd->pad_bytes; in iscsit_get_dataout()
1415 rx_got = rx_data(conn, &cmd->iov_data[0], iov_count, rx_size); in iscsit_get_dataout()
1417 iscsit_unmap_iovec(cmd); in iscsit_get_dataout()
1425 data_crc = iscsit_do_crypto_hash_sg(&conn->conn_rx_hash, cmd, in iscsit_get_dataout()
1428 cmd->pad_bytes); in iscsit_get_dataout()
1448 iscsit_check_dataout_payload(struct iscsi_cmd *cmd, struct iscsi_data *hdr, in iscsit_check_dataout_payload() argument
1451 struct iscsi_conn *conn = cmd->conn; in iscsit_check_dataout_payload()
1457 rc = iscsit_check_post_dataout(cmd, (unsigned char *)hdr, data_crc_failed); in iscsit_check_dataout_payload()
1461 iscsit_set_dataout_sequence_values(cmd); in iscsit_check_dataout_payload()
1462 conn->conn_transport->iscsit_get_dataout(conn, cmd, false); in iscsit_check_dataout_payload()
1468 spin_lock_bh(&cmd->istate_lock); in iscsit_check_dataout_payload()
1469 ooo_cmdsn = (cmd->cmd_flags & ICF_OOO_CMDSN); in iscsit_check_dataout_payload()
1470 cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT; in iscsit_check_dataout_payload()
1471 cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; in iscsit_check_dataout_payload()
1472 spin_unlock_bh(&cmd->istate_lock); in iscsit_check_dataout_payload()
1474 iscsit_stop_dataout_timer(cmd); in iscsit_check_dataout_payload()
1477 target_execute_cmd(&cmd->se_cmd); in iscsit_check_dataout_payload()
1488 struct iscsi_cmd *cmd = NULL; in iscsit_handle_data_out() local
1493 rc = iscsit_check_dataout_hdr(conn, buf, &cmd); in iscsit_handle_data_out()
1496 else if (!cmd) in iscsit_handle_data_out()
1499 rc = iscsit_get_dataout(conn, cmd, hdr); in iscsit_handle_data_out()
1505 return iscsit_check_dataout_payload(cmd, hdr, data_crc_failed); in iscsit_handle_data_out()
1508 int iscsit_setup_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_setup_nop_out() argument
1515 if (!cmd) in iscsit_setup_nop_out()
1519 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_nop_out()
1526 if (!cmd) in iscsit_setup_nop_out()
1530 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_nop_out()
1539 if (!cmd) in iscsit_setup_nop_out()
1543 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_nop_out()
1560 cmd->iscsi_opcode = ISCSI_OP_NOOP_OUT; in iscsit_setup_nop_out()
1561 cmd->i_state = ISTATE_SEND_NOPIN; in iscsit_setup_nop_out()
1562 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? in iscsit_setup_nop_out()
1564 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_setup_nop_out()
1565 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_setup_nop_out()
1566 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_setup_nop_out()
1567 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_setup_nop_out()
1568 cmd->data_direction = DMA_NONE; in iscsit_setup_nop_out()
1575 int iscsit_process_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_process_nop_out() argument
1584 if (!cmd) in iscsit_process_nop_out()
1589 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_process_nop_out()
1595 iscsit_add_cmd_to_response_queue(cmd, conn, in iscsit_process_nop_out()
1596 cmd->i_state); in iscsit_process_nop_out()
1600 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, in iscsit_process_nop_out()
1633 static int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_nop_out() argument
1642 ret = iscsit_setup_nop_out(conn, cmd, hdr); in iscsit_handle_nop_out()
1660 iov = &cmd->iov_misc[0]; in iscsit_handle_nop_out()
1668 iov[niov].iov_base = &cmd->pad_bytes; in iscsit_handle_nop_out()
1678 rx_got = rx_data(conn, &cmd->iov_misc[0], niov, rx_size); in iscsit_handle_nop_out()
1687 padding, cmd->pad_bytes, in iscsit_handle_nop_out()
1722 cmd->buf_ptr = ping_data; in iscsit_handle_nop_out()
1723 cmd->buf_ptr_size = payload_length; in iscsit_handle_nop_out()
1730 return iscsit_process_nop_out(conn, cmd, hdr); in iscsit_handle_nop_out()
1732 if (cmd) in iscsit_handle_nop_out()
1733 iscsit_free_cmd(cmd, false); in iscsit_handle_nop_out()
1740 iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_task_mgt_cmd() argument
1771 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1778 cmd->data_direction = DMA_NONE; in iscsit_handle_task_mgt_cmd()
1780 cmd->tmr_req = kzalloc(sizeof(struct iscsi_tmr_req), GFP_KERNEL); in iscsit_handle_task_mgt_cmd()
1781 if (!cmd->tmr_req) { in iscsit_handle_task_mgt_cmd()
1784 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1798 transport_init_se_cmd(&cmd->se_cmd, &iscsi_ops, in iscsit_handle_task_mgt_cmd()
1800 TCM_SIMPLE_TAG, cmd->sense_buffer + 2); in iscsit_handle_task_mgt_cmd()
1802 target_get_sess_cmd(&cmd->se_cmd, true); in iscsit_handle_task_mgt_cmd()
1830 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1834 ret = core_tmr_alloc_req(&cmd->se_cmd, cmd->tmr_req, in iscsit_handle_task_mgt_cmd()
1837 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1840 cmd->tmr_req->se_tmr_req = cmd->se_cmd.se_tmr_req; in iscsit_handle_task_mgt_cmd()
1843 cmd->iscsi_opcode = ISCSI_OP_SCSI_TMFUNC; in iscsit_handle_task_mgt_cmd()
1844 cmd->i_state = ISTATE_SEND_TASKMGTRSP; in iscsit_handle_task_mgt_cmd()
1845 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_handle_task_mgt_cmd()
1846 cmd->init_task_tag = hdr->itt; in iscsit_handle_task_mgt_cmd()
1847 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_handle_task_mgt_cmd()
1848 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_handle_task_mgt_cmd()
1849 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_handle_task_mgt_cmd()
1850 se_tmr = cmd->se_cmd.se_tmr_req; in iscsit_handle_task_mgt_cmd()
1851 tmr_req = cmd->tmr_req; in iscsit_handle_task_mgt_cmd()
1856 ret = transport_lookup_tmr_lun(&cmd->se_cmd, in iscsit_handle_task_mgt_cmd()
1866 se_tmr->response = iscsit_tmr_abort_task(cmd, buf); in iscsit_handle_task_mgt_cmd()
1888 se_tmr->response = iscsit_tmr_task_reassign(cmd, buf); in iscsit_handle_task_mgt_cmd()
1897 return iscsit_add_reject_cmd(cmd, in iscsit_handle_task_mgt_cmd()
1912 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_handle_task_mgt_cmd()
1916 int cmdsn_ret = iscsit_sequence_cmd(conn, cmd, buf, hdr->cmdsn); in iscsit_handle_task_mgt_cmd()
1932 return transport_generic_handle_tmr(&cmd->se_cmd); in iscsit_handle_task_mgt_cmd()
1944 target_put_sess_cmd(&cmd->se_cmd); in iscsit_handle_task_mgt_cmd()
1947 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_handle_task_mgt_cmd()
1954 iscsit_setup_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_setup_text_cmd() argument
1963 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_setup_text_cmd()
1970 return iscsit_reject_cmd(cmd, ISCSI_REASON_CMD_NOT_SUPPORTED, in iscsit_setup_text_cmd()
1978 cmd->iscsi_opcode = ISCSI_OP_TEXT; in iscsit_setup_text_cmd()
1979 cmd->i_state = ISTATE_SEND_TEXTRSP; in iscsit_setup_text_cmd()
1980 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_setup_text_cmd()
1981 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_setup_text_cmd()
1982 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_setup_text_cmd()
1983 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_setup_text_cmd()
1984 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_setup_text_cmd()
1985 cmd->data_direction = DMA_NONE; in iscsit_setup_text_cmd()
1986 cmd->text_in_ptr = NULL; in iscsit_setup_text_cmd()
1993 iscsit_process_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_process_text_cmd() argument
1996 unsigned char *text_in = cmd->text_in_ptr, *text_ptr; in iscsit_process_text_cmd()
2000 cmd->targ_xfer_tag = be32_to_cpu(hdr->ttt); in iscsit_process_text_cmd()
2001 if (cmd->targ_xfer_tag == 0xFFFFFFFF) { in iscsit_process_text_cmd()
2020 cmd->cmd_flags |= ICF_SENDTARGETS_ALL; in iscsit_process_text_cmd()
2023 cmd->cmd_flags |= ICF_SENDTARGETS_SINGLE; in iscsit_process_text_cmd()
2030 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_process_text_cmd()
2037 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, in iscsit_process_text_cmd()
2045 return iscsit_execute_cmd(cmd, 0); in iscsit_process_text_cmd()
2048 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, in iscsit_process_text_cmd()
2054 iscsit_handle_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_text_cmd() argument
2062 rc = iscsit_setup_text_cmd(conn, cmd, hdr); in iscsit_handle_text_cmd()
2079 cmd->text_in_ptr = text_in; in iscsit_handle_text_cmd()
2140 return iscsit_process_text_cmd(conn, cmd, hdr); in iscsit_handle_text_cmd()
2143 kfree(cmd->text_in_ptr); in iscsit_handle_text_cmd()
2144 cmd->text_in_ptr = NULL; in iscsit_handle_text_cmd()
2145 return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, buf); in iscsit_handle_text_cmd()
2148 int iscsit_logout_closesession(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_logout_closesession() argument
2173 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_closesession()
2178 int iscsit_logout_closeconnection(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_logout_closeconnection() argument
2184 " %hu on CID: %hu.\n", cmd->logout_cid, conn->cid); in iscsit_logout_closeconnection()
2190 if (conn->cid == cmd->logout_cid) { in iscsit_logout_closeconnection()
2210 cmd->logout_cid); in iscsit_logout_closeconnection()
2212 cmd->logout_response = ISCSI_LOGOUT_CID_NOT_FOUND; in iscsit_logout_closeconnection()
2213 iscsit_add_cmd_to_response_queue(cmd, conn, in iscsit_logout_closeconnection()
2214 cmd->i_state); in iscsit_logout_closeconnection()
2221 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_closeconnection()
2226 int iscsit_logout_removeconnforrecovery(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_logout_removeconnforrecovery() argument
2231 " CID: %hu on CID: %hu.\n", cmd->logout_cid, conn->cid); in iscsit_logout_removeconnforrecovery()
2236 cmd->logout_response = ISCSI_LOGOUT_RECOVERY_UNSUPPORTED; in iscsit_logout_removeconnforrecovery()
2237 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_removeconnforrecovery()
2241 if (conn->cid == cmd->logout_cid) { in iscsit_logout_removeconnforrecovery()
2244 cmd->logout_cid, conn->cid); in iscsit_logout_removeconnforrecovery()
2245 cmd->logout_response = ISCSI_LOGOUT_CLEANUP_FAILED; in iscsit_logout_removeconnforrecovery()
2246 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_removeconnforrecovery()
2250 iscsit_add_cmd_to_response_queue(cmd, conn, cmd->i_state); in iscsit_logout_removeconnforrecovery()
2256 iscsit_handle_logout_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, in iscsit_handle_logout_cmd() argument
2284 iscsit_free_cmd(cmd, false); in iscsit_handle_logout_cmd()
2288 cmd->iscsi_opcode = ISCSI_OP_LOGOUT; in iscsit_handle_logout_cmd()
2289 cmd->i_state = ISTATE_SEND_LOGOUTRSP; in iscsit_handle_logout_cmd()
2290 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); in iscsit_handle_logout_cmd()
2291 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; in iscsit_handle_logout_cmd()
2292 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_handle_logout_cmd()
2293 cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); in iscsit_handle_logout_cmd()
2294 cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); in iscsit_handle_logout_cmd()
2295 cmd->logout_cid = be16_to_cpu(hdr->cid); in iscsit_handle_logout_cmd()
2296 cmd->logout_reason = reason_code; in iscsit_handle_logout_cmd()
2297 cmd->data_direction = DMA_NONE; in iscsit_handle_logout_cmd()
2309 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); in iscsit_handle_logout_cmd()
2319 if (cmd->immediate_cmd) { in iscsit_handle_logout_cmd()
2320 int ret = iscsit_execute_cmd(cmd, 0); in iscsit_handle_logout_cmd()
2325 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, buf, hdr->cmdsn); in iscsit_handle_logout_cmd()
2401 struct iscsi_cmd *cmd, in iscsit_handle_immediate_data() argument
2407 struct iscsi_conn *conn = cmd->conn; in iscsit_handle_immediate_data()
2410 iov_ret = iscsit_map_iovec(cmd, cmd->iov_data, cmd->write_data_done, length); in iscsit_handle_immediate_data()
2416 iov = &cmd->iov_data[0]; in iscsit_handle_immediate_data()
2420 iov[iov_count].iov_base = cmd->pad_bytes; in iscsit_handle_immediate_data()
2431 rx_got = rx_data(conn, &cmd->iov_data[0], iov_count, rx_size); in iscsit_handle_immediate_data()
2433 iscsit_unmap_iovec(cmd); in iscsit_handle_immediate_data()
2443 data_crc = iscsit_do_crypto_hash_sg(&conn->conn_rx_hash, cmd, in iscsit_handle_immediate_data()
2444 cmd->write_data_done, length, padding, in iscsit_handle_immediate_data()
2445 cmd->pad_bytes); in iscsit_handle_immediate_data()
2456 iscsit_reject_cmd(cmd, in iscsit_handle_immediate_data()
2461 iscsit_reject_cmd(cmd, in iscsit_handle_immediate_data()
2473 cmd->write_data_done += length; in iscsit_handle_immediate_data()
2475 if (cmd->write_data_done == cmd->se_cmd.data_length) { in iscsit_handle_immediate_data()
2476 spin_lock_bh(&cmd->istate_lock); in iscsit_handle_immediate_data()
2477 cmd->cmd_flags |= ICF_GOT_LAST_DATAOUT; in iscsit_handle_immediate_data()
2478 cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; in iscsit_handle_immediate_data()
2479 spin_unlock_bh(&cmd->istate_lock); in iscsit_handle_immediate_data()
2492 struct iscsi_cmd *cmd; in iscsit_build_conn_drop_async_message() local
2511 cmd = iscsit_allocate_cmd(conn_p, TASK_RUNNING); in iscsit_build_conn_drop_async_message()
2512 if (!cmd) { in iscsit_build_conn_drop_async_message()
2517 cmd->logout_cid = conn->cid; in iscsit_build_conn_drop_async_message()
2518 cmd->iscsi_opcode = ISCSI_OP_ASYNC_EVENT; in iscsit_build_conn_drop_async_message()
2519 cmd->i_state = ISTATE_SEND_ASYNCMSG; in iscsit_build_conn_drop_async_message()
2522 list_add_tail(&cmd->i_conn_node, &conn_p->conn_cmd_list); in iscsit_build_conn_drop_async_message()
2525 iscsit_add_cmd_to_response_queue(cmd, conn_p, cmd->i_state); in iscsit_build_conn_drop_async_message()
2530 struct iscsi_cmd *cmd, in iscsit_send_conn_drop_async_message() argument
2535 cmd->tx_size = ISCSI_HDR_LEN; in iscsit_send_conn_drop_async_message()
2536 cmd->iscsi_opcode = ISCSI_OP_ASYNC_EVENT; in iscsit_send_conn_drop_async_message()
2538 hdr = (struct iscsi_async *) cmd->pdu; in iscsit_send_conn_drop_async_message()
2541 cmd->init_task_tag = RESERVED_ITT; in iscsit_send_conn_drop_async_message()
2542 cmd->targ_xfer_tag = 0xFFFFFFFF; in iscsit_send_conn_drop_async_message()
2544 cmd->stat_sn = conn->stat_sn++; in iscsit_send_conn_drop_async_message()
2545 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_send_conn_drop_async_message()
2549 hdr->param1 = cpu_to_be16(cmd->logout_cid); in iscsit_send_conn_drop_async_message()
2554 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_conn_drop_async_message()
2559 cmd->tx_size += ISCSI_CRC_LEN; in iscsit_send_conn_drop_async_message()
2564 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_conn_drop_async_message()
2565 cmd->iov_misc[0].iov_len = cmd->tx_size; in iscsit_send_conn_drop_async_message()
2566 cmd->iov_misc_count = 1; in iscsit_send_conn_drop_async_message()
2569 " 0x%08x, for CID: %hu on CID: %hu\n", cmd->stat_sn, in iscsit_send_conn_drop_async_message()
2570 cmd->logout_cid, conn->cid); in iscsit_send_conn_drop_async_message()
2585 iscsit_build_datain_pdu(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_datain_pdu() argument
2592 if (cmd->se_cmd.se_cmd_flags & SCF_OVERFLOW_BIT) { in iscsit_build_datain_pdu()
2594 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_datain_pdu()
2595 } else if (cmd->se_cmd.se_cmd_flags & SCF_UNDERFLOW_BIT) { in iscsit_build_datain_pdu()
2597 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_datain_pdu()
2602 int_to_scsilun(cmd->se_cmd.orig_fe_lun, in iscsit_build_datain_pdu()
2607 hdr->itt = cmd->init_task_tag; in iscsit_build_datain_pdu()
2610 hdr->ttt = cpu_to_be32(cmd->targ_xfer_tag); in iscsit_build_datain_pdu()
2614 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_datain_pdu()
2625 cmd->init_task_tag, ntohl(hdr->statsn), ntohl(hdr->datasn), in iscsit_build_datain_pdu()
2629 static int iscsit_send_datain(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_datain() argument
2631 struct iscsi_data_rsp *hdr = (struct iscsi_data_rsp *)&cmd->pdu[0]; in iscsit_send_datain()
2640 dr = iscsit_get_datain_values(cmd, &datain); in iscsit_send_datain()
2643 cmd->init_task_tag); in iscsit_send_datain()
2649 if ((datain.offset + datain.length) > cmd->se_cmd.data_length) { in iscsit_send_datain()
2652 cmd->init_task_tag, datain.offset, datain.length, in iscsit_send_datain()
2653 cmd->se_cmd.data_length); in iscsit_send_datain()
2663 (cmd->se_cmd.se_cmd_flags & SCF_TRANSPORT_TASK_SENSE)) in iscsit_send_datain()
2668 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_send_datain()
2669 cmd->stat_sn = conn->stat_sn++; in iscsit_send_datain()
2676 iscsit_build_datain_pdu(cmd, conn, &datain, hdr, set_statsn); in iscsit_send_datain()
2678 iov = &cmd->iov_data[0]; in iscsit_send_datain()
2679 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_datain()
2684 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_datain()
2686 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, cmd->pdu, in iscsit_send_datain()
2696 iov_ret = iscsit_map_iovec(cmd, &cmd->iov_data[1], in iscsit_send_datain()
2704 cmd->padding = ((-datain.length) & 3); in iscsit_send_datain()
2705 if (cmd->padding) { in iscsit_send_datain()
2706 iov[iov_count].iov_base = cmd->pad_bytes; in iscsit_send_datain()
2707 iov[iov_count++].iov_len = cmd->padding; in iscsit_send_datain()
2708 tx_size += cmd->padding; in iscsit_send_datain()
2711 cmd->padding); in iscsit_send_datain()
2714 cmd->data_crc = iscsit_do_crypto_hash_sg(&conn->conn_tx_hash, cmd, in iscsit_send_datain()
2715 datain.offset, datain.length, cmd->padding, cmd->pad_bytes); in iscsit_send_datain()
2717 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_datain()
2722 " 0x%08x\n", datain.length+cmd->padding, cmd->data_crc); in iscsit_send_datain()
2725 cmd->iov_data_count = iov_count; in iscsit_send_datain()
2726 cmd->tx_size = tx_size; in iscsit_send_datain()
2728 ret = iscsit_fe_sendpage_sg(cmd, conn); in iscsit_send_datain()
2730 iscsit_unmap_iovec(cmd); in iscsit_send_datain()
2738 eodr = (cmd->se_cmd.se_cmd_flags & SCF_TRANSPORT_TASK_SENSE) ? in iscsit_send_datain()
2740 iscsit_free_datain_req(cmd, dr); in iscsit_send_datain()
2747 iscsit_build_logout_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_logout_rsp() argument
2758 switch (cmd->logout_reason) { in iscsit_build_logout_rsp()
2762 cmd->logout_response = ISCSI_LOGOUT_SUCCESS; in iscsit_build_logout_rsp()
2765 if (cmd->logout_response == ISCSI_LOGOUT_CID_NOT_FOUND) in iscsit_build_logout_rsp()
2780 " successful.\n", cmd->logout_cid, conn->cid); in iscsit_build_logout_rsp()
2781 cmd->logout_response = ISCSI_LOGOUT_SUCCESS; in iscsit_build_logout_rsp()
2784 if ((cmd->logout_response == ISCSI_LOGOUT_RECOVERY_UNSUPPORTED) || in iscsit_build_logout_rsp()
2785 (cmd->logout_response == ISCSI_LOGOUT_CLEANUP_FAILED)) in iscsit_build_logout_rsp()
2792 cmd->logout_cid); in iscsit_build_logout_rsp()
2799 conn->sess, cmd->logout_cid); in iscsit_build_logout_rsp()
2803 cmd->logout_cid); in iscsit_build_logout_rsp()
2804 cmd->logout_response = ISCSI_LOGOUT_CID_NOT_FOUND; in iscsit_build_logout_rsp()
2808 iscsit_discard_cr_cmds_by_expstatsn(cr, cmd->exp_stat_sn); in iscsit_build_logout_rsp()
2812 cmd->logout_cid, conn->cid); in iscsit_build_logout_rsp()
2813 cmd->logout_response = ISCSI_LOGOUT_SUCCESS; in iscsit_build_logout_rsp()
2817 cmd->logout_reason); in iscsit_build_logout_rsp()
2823 hdr->response = cmd->logout_response; in iscsit_build_logout_rsp()
2824 hdr->itt = cmd->init_task_tag; in iscsit_build_logout_rsp()
2825 cmd->stat_sn = conn->stat_sn++; in iscsit_build_logout_rsp()
2826 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_logout_rsp()
2828 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_logout_rsp()
2834 cmd->init_task_tag, cmd->stat_sn, hdr->response, in iscsit_build_logout_rsp()
2835 cmd->logout_cid, conn->cid); in iscsit_build_logout_rsp()
2842 iscsit_send_logout(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_logout() argument
2847 rc = iscsit_build_logout_rsp(cmd, conn, in iscsit_send_logout()
2848 (struct iscsi_logout_rsp *)&cmd->pdu[0]); in iscsit_send_logout()
2853 iov = &cmd->iov_misc[0]; in iscsit_send_logout()
2854 iov[niov].iov_base = cmd->pdu; in iscsit_send_logout()
2858 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_logout()
2860 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, &cmd->pdu[0], in iscsit_send_logout()
2868 cmd->iov_misc_count = niov; in iscsit_send_logout()
2869 cmd->tx_size = tx_size; in iscsit_send_logout()
2875 iscsit_build_nopin_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_nopin_rsp() argument
2880 hton24(hdr->dlength, cmd->buf_ptr_size); in iscsit_build_nopin_rsp()
2883 hdr->itt = cmd->init_task_tag; in iscsit_build_nopin_rsp()
2884 hdr->ttt = cpu_to_be32(cmd->targ_xfer_tag); in iscsit_build_nopin_rsp()
2885 cmd->stat_sn = (nopout_response) ? conn->stat_sn++ : in iscsit_build_nopin_rsp()
2887 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_nopin_rsp()
2890 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_nopin_rsp()
2897 "Solicitied" : "Unsolicitied", cmd->init_task_tag, in iscsit_build_nopin_rsp()
2898 cmd->targ_xfer_tag, cmd->stat_sn, cmd->buf_ptr_size); in iscsit_build_nopin_rsp()
2906 struct iscsi_cmd *cmd, in iscsit_send_unsolicited_nopin() argument
2910 struct iscsi_nopin *hdr = (struct iscsi_nopin *)&cmd->pdu[0]; in iscsit_send_unsolicited_nopin()
2913 iscsit_build_nopin_rsp(cmd, conn, hdr, false); in iscsit_send_unsolicited_nopin()
2916 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_unsolicited_nopin()
2926 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_unsolicited_nopin()
2927 cmd->iov_misc[0].iov_len = tx_size; in iscsit_send_unsolicited_nopin()
2928 cmd->iov_misc_count = 1; in iscsit_send_unsolicited_nopin()
2929 cmd->tx_size = tx_size; in iscsit_send_unsolicited_nopin()
2932 " 0x%08x CID: %hu\n", hdr->ttt, cmd->stat_sn, conn->cid); in iscsit_send_unsolicited_nopin()
2934 ret = iscsit_send_tx_data(cmd, conn, 1); in iscsit_send_unsolicited_nopin()
2940 spin_lock_bh(&cmd->istate_lock); in iscsit_send_unsolicited_nopin()
2941 cmd->i_state = want_response ? in iscsit_send_unsolicited_nopin()
2943 spin_unlock_bh(&cmd->istate_lock); in iscsit_send_unsolicited_nopin()
2949 iscsit_send_nopin(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_nopin() argument
2951 struct iscsi_nopin *hdr = (struct iscsi_nopin *)&cmd->pdu[0]; in iscsit_send_nopin()
2956 iscsit_build_nopin_rsp(cmd, conn, hdr, true); in iscsit_send_nopin()
2959 iov = &cmd->iov_misc[0]; in iscsit_send_nopin()
2960 iov[niov].iov_base = cmd->pdu; in iscsit_send_nopin()
2964 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_nopin()
2979 if (cmd->buf_ptr_size) { in iscsit_send_nopin()
2980 iov[niov].iov_base = cmd->buf_ptr; in iscsit_send_nopin()
2981 iov[niov++].iov_len = cmd->buf_ptr_size; in iscsit_send_nopin()
2982 tx_size += cmd->buf_ptr_size; in iscsit_send_nopin()
2985 " data.\n", cmd->buf_ptr_size); in iscsit_send_nopin()
2987 padding = ((-cmd->buf_ptr_size) & 3); in iscsit_send_nopin()
2989 iov[niov].iov_base = &cmd->pad_bytes; in iscsit_send_nopin()
2997 cmd->buf_ptr, cmd->buf_ptr_size, in iscsit_send_nopin()
2998 padding, (u8 *)&cmd->pad_bytes, in iscsit_send_nopin()
2999 (u8 *)&cmd->data_crc); in iscsit_send_nopin()
3001 iov[niov].iov_base = &cmd->data_crc; in iscsit_send_nopin()
3006 cmd->buf_ptr_size, cmd->data_crc); in iscsit_send_nopin()
3010 cmd->iov_misc_count = niov; in iscsit_send_nopin()
3011 cmd->tx_size = tx_size; in iscsit_send_nopin()
3017 struct iscsi_cmd *cmd, in iscsit_send_r2t() argument
3025 r2t = iscsit_get_r2t_from_list(cmd); in iscsit_send_r2t()
3029 hdr = (struct iscsi_r2t_rsp *) cmd->pdu; in iscsit_send_r2t()
3033 int_to_scsilun(cmd->se_cmd.orig_fe_lun, in iscsit_send_r2t()
3035 hdr->itt = cmd->init_task_tag; in iscsit_send_r2t()
3045 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_r2t()
3046 cmd->iov_misc[0].iov_len = ISCSI_HDR_LEN; in iscsit_send_r2t()
3050 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_r2t()
3055 cmd->iov_misc[0].iov_len += ISCSI_CRC_LEN; in iscsit_send_r2t()
3063 (!r2t->recovery_r2t) ? "" : "Recovery ", cmd->init_task_tag, in iscsit_send_r2t()
3067 cmd->iov_misc_count = 1; in iscsit_send_r2t()
3068 cmd->tx_size = tx_size; in iscsit_send_r2t()
3070 spin_lock_bh(&cmd->r2t_lock); in iscsit_send_r2t()
3072 spin_unlock_bh(&cmd->r2t_lock); in iscsit_send_r2t()
3074 ret = iscsit_send_tx_data(cmd, conn, 1); in iscsit_send_r2t()
3080 spin_lock_bh(&cmd->dataout_timeout_lock); in iscsit_send_r2t()
3081 iscsit_start_dataout_timer(cmd, conn); in iscsit_send_r2t()
3082 spin_unlock_bh(&cmd->dataout_timeout_lock); in iscsit_send_r2t()
3093 struct iscsi_cmd *cmd, in iscsit_build_r2ts_for_cmd() argument
3099 spin_lock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3100 if (cmd->cmd_flags & ICF_SENT_LAST_R2T) { in iscsit_build_r2ts_for_cmd()
3101 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3107 cmd->r2t_offset = max(cmd->r2t_offset, cmd->write_data_done); in iscsit_build_r2ts_for_cmd()
3109 while (cmd->outstanding_r2ts < conn->sess->sess_ops->MaxOutstandingR2T) { in iscsit_build_r2ts_for_cmd()
3111 offset = cmd->r2t_offset; in iscsit_build_r2ts_for_cmd()
3116 cmd->next_burst_len; in iscsit_build_r2ts_for_cmd()
3118 if (new_data_end > cmd->se_cmd.data_length) in iscsit_build_r2ts_for_cmd()
3119 xfer_len = cmd->se_cmd.data_length - offset; in iscsit_build_r2ts_for_cmd()
3123 cmd->next_burst_len; in iscsit_build_r2ts_for_cmd()
3128 if (new_data_end > cmd->se_cmd.data_length) in iscsit_build_r2ts_for_cmd()
3129 xfer_len = cmd->se_cmd.data_length - offset; in iscsit_build_r2ts_for_cmd()
3133 cmd->r2t_offset += xfer_len; in iscsit_build_r2ts_for_cmd()
3135 if (cmd->r2t_offset == cmd->se_cmd.data_length) in iscsit_build_r2ts_for_cmd()
3136 cmd->cmd_flags |= ICF_SENT_LAST_R2T; in iscsit_build_r2ts_for_cmd()
3140 seq = iscsit_get_seq_holder_for_r2t(cmd); in iscsit_build_r2ts_for_cmd()
3142 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3149 if (cmd->seq_send_order == cmd->seq_count) in iscsit_build_r2ts_for_cmd()
3150 cmd->cmd_flags |= ICF_SENT_LAST_R2T; in iscsit_build_r2ts_for_cmd()
3152 cmd->outstanding_r2ts++; in iscsit_build_r2ts_for_cmd()
3155 if (iscsit_add_r2t_to_list(cmd, offset, xfer_len, 0, 0) < 0) { in iscsit_build_r2ts_for_cmd()
3156 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3160 if (cmd->cmd_flags & ICF_SENT_LAST_R2T) in iscsit_build_r2ts_for_cmd()
3163 spin_unlock_bh(&cmd->r2t_lock); in iscsit_build_r2ts_for_cmd()
3168 void iscsit_build_rsp_pdu(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_rsp_pdu() argument
3172 cmd->stat_sn = conn->stat_sn++; in iscsit_build_rsp_pdu()
3179 if (cmd->se_cmd.se_cmd_flags & SCF_OVERFLOW_BIT) { in iscsit_build_rsp_pdu()
3181 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_rsp_pdu()
3182 } else if (cmd->se_cmd.se_cmd_flags & SCF_UNDERFLOW_BIT) { in iscsit_build_rsp_pdu()
3184 hdr->residual_count = cpu_to_be32(cmd->se_cmd.residual_count); in iscsit_build_rsp_pdu()
3186 hdr->response = cmd->iscsi_response; in iscsit_build_rsp_pdu()
3187 hdr->cmd_status = cmd->se_cmd.scsi_status; in iscsit_build_rsp_pdu()
3188 hdr->itt = cmd->init_task_tag; in iscsit_build_rsp_pdu()
3189 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_rsp_pdu()
3191 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_rsp_pdu()
3197 cmd->init_task_tag, cmd->stat_sn, cmd->se_cmd.scsi_status, in iscsit_build_rsp_pdu()
3198 cmd->se_cmd.scsi_status, conn->cid); in iscsit_build_rsp_pdu()
3202 static int iscsit_send_response(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_response() argument
3204 struct iscsi_scsi_rsp *hdr = (struct iscsi_scsi_rsp *)&cmd->pdu[0]; in iscsit_send_response()
3208 bool inc_stat_sn = (cmd->i_state == ISTATE_SEND_STATUS); in iscsit_send_response()
3210 iscsit_build_rsp_pdu(cmd, conn, inc_stat_sn, hdr); in iscsit_send_response()
3212 iov = &cmd->iov_misc[0]; in iscsit_send_response()
3213 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_response()
3220 if (cmd->se_cmd.sense_buffer && in iscsit_send_response()
3221 ((cmd->se_cmd.se_cmd_flags & SCF_TRANSPORT_TASK_SENSE) || in iscsit_send_response()
3222 (cmd->se_cmd.se_cmd_flags & SCF_EMULATED_TASK_SENSE))) { in iscsit_send_response()
3223 put_unaligned_be16(cmd->se_cmd.scsi_sense_length, cmd->sense_buffer); in iscsit_send_response()
3224 cmd->se_cmd.scsi_sense_length += sizeof (__be16); in iscsit_send_response()
3226 padding = -(cmd->se_cmd.scsi_sense_length) & 3; in iscsit_send_response()
3227 hton24(hdr->dlength, (u32)cmd->se_cmd.scsi_sense_length); in iscsit_send_response()
3228 iov[iov_count].iov_base = cmd->sense_buffer; in iscsit_send_response()
3230 (cmd->se_cmd.scsi_sense_length + padding); in iscsit_send_response()
3231 tx_size += cmd->se_cmd.scsi_sense_length; in iscsit_send_response()
3234 memset(cmd->sense_buffer + in iscsit_send_response()
3235 cmd->se_cmd.scsi_sense_length, 0, padding); in iscsit_send_response()
3243 cmd->sense_buffer, in iscsit_send_response()
3244 (cmd->se_cmd.scsi_sense_length + padding), in iscsit_send_response()
3245 0, NULL, (u8 *)&cmd->data_crc); in iscsit_send_response()
3247 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_response()
3253 (cmd->se_cmd.scsi_sense_length + padding), in iscsit_send_response()
3254 cmd->data_crc); in iscsit_send_response()
3259 cmd->se_cmd.scsi_sense_length); in iscsit_send_response()
3263 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_response()
3265 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, cmd->pdu, in iscsit_send_response()
3274 cmd->iov_misc_count = iov_count; in iscsit_send_response()
3275 cmd->tx_size = tx_size; in iscsit_send_response()
3298 iscsit_build_task_mgt_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_task_mgt_rsp() argument
3301 struct se_tmr_req *se_tmr = cmd->se_cmd.se_tmr_req; in iscsit_build_task_mgt_rsp()
3306 hdr->itt = cmd->init_task_tag; in iscsit_build_task_mgt_rsp()
3307 cmd->stat_sn = conn->stat_sn++; in iscsit_build_task_mgt_rsp()
3308 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_task_mgt_rsp()
3310 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_task_mgt_rsp()
3316 cmd->init_task_tag, cmd->stat_sn, hdr->response, conn->cid); in iscsit_build_task_mgt_rsp()
3321 iscsit_send_task_mgt_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn) in iscsit_send_task_mgt_rsp() argument
3323 struct iscsi_tm_rsp *hdr = (struct iscsi_tm_rsp *)&cmd->pdu[0]; in iscsit_send_task_mgt_rsp()
3326 iscsit_build_task_mgt_rsp(cmd, conn, hdr); in iscsit_send_task_mgt_rsp()
3328 cmd->iov_misc[0].iov_base = cmd->pdu; in iscsit_send_task_mgt_rsp()
3329 cmd->iov_misc[0].iov_len = ISCSI_HDR_LEN; in iscsit_send_task_mgt_rsp()
3333 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_task_mgt_rsp()
3338 cmd->iov_misc[0].iov_len += ISCSI_CRC_LEN; in iscsit_send_task_mgt_rsp()
3344 cmd->iov_misc_count = 1; in iscsit_send_task_mgt_rsp()
3345 cmd->tx_size = tx_size; in iscsit_send_task_mgt_rsp()
3377 iscsit_build_sendtargets_response(struct iscsi_cmd *cmd, in iscsit_build_sendtargets_response() argument
3382 struct iscsi_conn *conn = cmd->conn; in iscsit_build_sendtargets_response()
3389 unsigned char *text_in = cmd->text_in_ptr, *text_ptr = NULL; in iscsit_build_sendtargets_response()
3405 if (cmd->cmd_flags & ICF_SENDTARGETS_SINGLE) { in iscsit_build_sendtargets_response()
3421 if ((cmd->cmd_flags & ICF_SENDTARGETS_SINGLE) && in iscsit_build_sendtargets_response()
3439 cmd->conn->sess->sess_ops->InitiatorName))) { in iscsit_build_sendtargets_response()
3519 if (cmd->cmd_flags & ICF_SENDTARGETS_SINGLE) in iscsit_build_sendtargets_response()
3524 cmd->buf_ptr = payload; in iscsit_build_sendtargets_response()
3530 iscsit_build_text_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_text_rsp() argument
3537 text_length = iscsit_build_sendtargets_response(cmd, network_transport, in iscsit_build_text_rsp()
3538 cmd->read_data_done, in iscsit_build_text_rsp()
3547 cmd->read_data_done += text_length; in iscsit_build_text_rsp()
3548 if (cmd->targ_xfer_tag == 0xFFFFFFFF) in iscsit_build_text_rsp()
3549 cmd->targ_xfer_tag = session_get_next_ttt(conn->sess); in iscsit_build_text_rsp()
3554 hdr->itt = cmd->init_task_tag; in iscsit_build_text_rsp()
3555 hdr->ttt = cpu_to_be32(cmd->targ_xfer_tag); in iscsit_build_text_rsp()
3556 cmd->stat_sn = conn->stat_sn++; in iscsit_build_text_rsp()
3557 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_text_rsp()
3559 iscsit_increment_maxcmdsn(cmd, conn->sess); in iscsit_build_text_rsp()
3565 cmd->maxcmdsn_inc = 0; in iscsit_build_text_rsp()
3570 " Length: %u, CID: %hu F: %d C: %d\n", cmd->init_task_tag, in iscsit_build_text_rsp()
3571 cmd->targ_xfer_tag, cmd->stat_sn, text_length, conn->cid, in iscsit_build_text_rsp()
3580 struct iscsi_cmd *cmd, in iscsit_send_text_rsp() argument
3583 struct iscsi_text_rsp *hdr = (struct iscsi_text_rsp *)cmd->pdu; in iscsit_send_text_rsp()
3588 rc = iscsit_build_text_rsp(cmd, conn, hdr, ISCSI_TCP); in iscsit_send_text_rsp()
3593 iov = &cmd->iov_misc[0]; in iscsit_send_text_rsp()
3594 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_text_rsp()
3596 iov[iov_count].iov_base = cmd->buf_ptr; in iscsit_send_text_rsp()
3602 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_text_rsp()
3615 cmd->buf_ptr, text_length, in iscsit_send_text_rsp()
3616 0, NULL, (u8 *)&cmd->data_crc); in iscsit_send_text_rsp()
3618 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_text_rsp()
3624 cmd->data_crc); in iscsit_send_text_rsp()
3627 cmd->iov_misc_count = iov_count; in iscsit_send_text_rsp()
3628 cmd->tx_size = tx_size; in iscsit_send_text_rsp()
3634 iscsit_build_reject(struct iscsi_cmd *cmd, struct iscsi_conn *conn, in iscsit_build_reject() argument
3638 hdr->reason = cmd->reject_reason; in iscsit_build_reject()
3642 cmd->stat_sn = conn->stat_sn++; in iscsit_build_reject()
3643 hdr->statsn = cpu_to_be32(cmd->stat_sn); in iscsit_build_reject()
3651 struct iscsi_cmd *cmd, in iscsit_send_reject() argument
3654 struct iscsi_reject *hdr = (struct iscsi_reject *)&cmd->pdu[0]; in iscsit_send_reject()
3658 iscsit_build_reject(cmd, conn, hdr); in iscsit_send_reject()
3660 iov = &cmd->iov_misc[0]; in iscsit_send_reject()
3661 iov[iov_count].iov_base = cmd->pdu; in iscsit_send_reject()
3663 iov[iov_count].iov_base = cmd->buf_ptr; in iscsit_send_reject()
3669 u32 *header_digest = (u32 *)&cmd->pdu[ISCSI_HDR_LEN]; in iscsit_send_reject()
3681 iscsit_do_crypto_hash_buf(&conn->conn_tx_hash, cmd->buf_ptr, in iscsit_send_reject()
3682 ISCSI_HDR_LEN, 0, NULL, (u8 *)&cmd->data_crc); in iscsit_send_reject()
3684 iov[iov_count].iov_base = &cmd->data_crc; in iscsit_send_reject()
3688 " PDU 0x%08x\n", cmd->data_crc); in iscsit_send_reject()
3691 cmd->iov_misc_count = iov_count; in iscsit_send_reject()
3692 cmd->tx_size = tx_size; in iscsit_send_reject()
3752 iscsit_immediate_queue(struct iscsi_conn *conn, struct iscsi_cmd *cmd, int state) in iscsit_immediate_queue() argument
3758 ret = iscsit_send_r2t(cmd, conn); in iscsit_immediate_queue()
3764 list_del_init(&cmd->i_conn_node); in iscsit_immediate_queue()
3767 iscsit_free_cmd(cmd, false); in iscsit_immediate_queue()
3771 ret = iscsit_send_unsolicited_nopin(cmd, conn, 1); in iscsit_immediate_queue()
3776 ret = iscsit_send_unsolicited_nopin(cmd, conn, 0); in iscsit_immediate_queue()
3783 cmd->iscsi_opcode, cmd->init_task_tag, state, in iscsit_immediate_queue()
3799 struct iscsi_cmd *cmd; in iscsit_handle_immediate_queue() local
3805 cmd = qr->cmd; in iscsit_handle_immediate_queue()
3809 ret = t->iscsit_immediate_queue(conn, cmd, state); in iscsit_handle_immediate_queue()
3818 iscsit_response_queue(struct iscsi_conn *conn, struct iscsi_cmd *cmd, int state) in iscsit_response_queue() argument
3825 ret = iscsit_send_datain(cmd, conn); in iscsit_response_queue()
3833 spin_lock_bh(&cmd->istate_lock); in iscsit_response_queue()
3834 cmd->i_state = ISTATE_SENT_STATUS; in iscsit_response_queue()
3835 spin_unlock_bh(&cmd->istate_lock); in iscsit_response_queue()
3844 spin_lock_bh(&cmd->istate_lock); in iscsit_response_queue()
3845 cmd->i_state = ISTATE_SEND_STATUS; in iscsit_response_queue()
3846 spin_unlock_bh(&cmd->istate_lock); in iscsit_response_queue()
3854 ret = iscsit_send_response(cmd, conn); in iscsit_response_queue()
3857 ret = iscsit_send_logout(cmd, conn); in iscsit_response_queue()
3861 cmd, conn); in iscsit_response_queue()
3864 ret = iscsit_send_nopin(cmd, conn); in iscsit_response_queue()
3867 ret = iscsit_send_reject(cmd, conn); in iscsit_response_queue()
3870 ret = iscsit_send_task_mgt_rsp(cmd, conn); in iscsit_response_queue()
3873 ret = iscsit_tmr_post_handler(cmd, conn); in iscsit_response_queue()
3878 ret = iscsit_send_text_rsp(cmd, conn); in iscsit_response_queue()
3883 cmd->iscsi_opcode, cmd->init_task_tag, in iscsit_response_queue()
3890 if (iscsit_send_tx_data(cmd, conn, 1) < 0) { in iscsit_response_queue()
3892 iscsit_unmap_iovec(cmd); in iscsit_response_queue()
3895 iscsit_unmap_iovec(cmd); in iscsit_response_queue()
3899 if (!iscsit_logout_post_handler(cmd, conn)) in iscsit_response_queue()
3909 spin_lock_bh(&cmd->istate_lock); in iscsit_response_queue()
3910 cmd->i_state = ISTATE_SENT_STATUS; in iscsit_response_queue()
3911 spin_unlock_bh(&cmd->istate_lock); in iscsit_response_queue()
3916 cmd->iscsi_opcode, cmd->init_task_tag, in iscsit_response_queue()
3917 cmd->i_state, conn->cid); in iscsit_response_queue()
3934 struct iscsi_cmd *cmd; in iscsit_handle_response_queue() local
3939 cmd = qr->cmd; in iscsit_handle_response_queue()
3943 ret = t->iscsit_response_queue(conn, cmd, state); in iscsit_handle_response_queue()
4003 struct iscsi_cmd *cmd; in iscsi_target_rx_opcode() local
4008 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4009 if (!cmd) in iscsi_target_rx_opcode()
4012 ret = iscsit_handle_scsi_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4018 cmd = NULL; in iscsi_target_rx_opcode()
4020 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4021 if (!cmd) in iscsi_target_rx_opcode()
4024 ret = iscsit_handle_nop_out(conn, cmd, buf); in iscsi_target_rx_opcode()
4027 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4028 if (!cmd) in iscsi_target_rx_opcode()
4031 ret = iscsit_handle_task_mgt_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4035 cmd = iscsit_find_cmd_from_itt(conn, hdr->itt); in iscsi_target_rx_opcode()
4036 if (!cmd) in iscsi_target_rx_opcode()
4039 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4040 if (!cmd) in iscsi_target_rx_opcode()
4044 ret = iscsit_handle_text_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4047 cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); in iscsi_target_rx_opcode()
4048 if (!cmd) in iscsi_target_rx_opcode()
4051 ret = iscsit_handle_logout_cmd(conn, cmd, buf); in iscsi_target_rx_opcode()
4197 struct iscsi_cmd *cmd = NULL, *cmd_tmp = NULL; in iscsit_release_commands_from_conn() local
4205 list_for_each_entry_safe(cmd, cmd_tmp, &conn->conn_cmd_list, i_conn_node) { in iscsit_release_commands_from_conn()
4207 list_del_init(&cmd->i_conn_node); in iscsit_release_commands_from_conn()
4210 iscsit_increment_maxcmdsn(cmd, sess); in iscsit_release_commands_from_conn()
4212 iscsit_free_cmd(cmd, true); in iscsit_release_commands_from_conn()
4222 struct iscsi_cmd *cmd; in iscsit_stop_timers_for_cmds() local
4225 list_for_each_entry(cmd, &conn->conn_cmd_list, i_conn_node) { in iscsit_stop_timers_for_cmds()
4226 if (cmd->data_direction == DMA_TO_DEVICE) in iscsit_stop_timers_for_cmds()
4227 iscsit_stop_dataout_timer(cmd); in iscsit_stop_timers_for_cmds()
4623 struct iscsi_cmd *cmd, in iscsit_logout_post_handler() argument
4628 switch (cmd->logout_reason) { in iscsit_logout_post_handler()
4630 switch (cmd->logout_response) { in iscsit_logout_post_handler()
4640 if (conn->cid == cmd->logout_cid) { in iscsit_logout_post_handler()
4641 switch (cmd->logout_response) { in iscsit_logout_post_handler()
4650 switch (cmd->logout_response) { in iscsit_logout_post_handler()
4653 cmd->logout_cid); in iscsit_logout_post_handler()
4664 switch (cmd->logout_response) { in iscsit_logout_post_handler()