aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_target.c
diff options
context:
space:
mode:
authorBart Van Assche <bart.vanassche@sandisk.com>2015-04-14 07:26:44 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2015-05-31 01:42:31 -0400
commit649ee05499d1257a3af0e10d961a1c52d9ef95b7 (patch)
tree2c4ce7d541140925f8ebaaf76a30e0cbdb574dd2 /drivers/scsi/qla2xxx/qla_target.c
parent2650d71e244fb3637b5f58a0080682a8bf9c7091 (diff)
target: Move task tag into struct se_cmd + support 64-bit tags
Simplify target core and target drivers by storing the task tag a.k.a. command identifier inside struct se_cmd. For several transports (e.g. SRP) tags are 64 bits wide. Hence add support for 64-bit tags. (Fix core_tmr_abort_task conversion spec warnings - nab) (Fix up usb-gadget to use 16-bit tags - HCH + bart) Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: Sagi Grimberg <sagig@mellanox.com> Cc: <qla2xxx-upstream@qlogic.com> Cc: Felipe Balbi <balbi@ti.com> Cc: Michael S. Tsirkin <mst@redhat.com> Cc: Juergen Gross <jgross@suse.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_target.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_target.c52
1 files changed, 23 insertions, 29 deletions
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index fe8a8d157e22..e7515069e1ce 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -1191,7 +1191,7 @@ static int __qlt_24xx_handle_abts(struct scsi_qla_host *vha,
1191 list_for_each_entry(se_cmd, &se_sess->sess_cmd_list, se_cmd_list) { 1191 list_for_each_entry(se_cmd, &se_sess->sess_cmd_list, se_cmd_list) {
1192 struct qla_tgt_cmd *cmd = 1192 struct qla_tgt_cmd *cmd =
1193 container_of(se_cmd, struct qla_tgt_cmd, se_cmd); 1193 container_of(se_cmd, struct qla_tgt_cmd, se_cmd);
1194 if (cmd->tag == abts->exchange_addr_to_abort) { 1194 if (se_cmd->tag == abts->exchange_addr_to_abort) {
1195 lun = cmd->unpacked_lun; 1195 lun = cmd->unpacked_lun;
1196 found_lun = true; 1196 found_lun = true;
1197 break; 1197 break;
@@ -1728,9 +1728,8 @@ static int qlt_pre_xmit_response(struct qla_tgt_cmd *cmd,
1728 1728
1729 if (unlikely(cmd->aborted)) { 1729 if (unlikely(cmd->aborted)) {
1730 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf014, 1730 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf014,
1731 "qla_target(%d): terminating exchange " 1731 "qla_target(%d): terminating exchange for aborted cmd=%p (se_cmd=%p, tag=%lld)",
1732 "for aborted cmd=%p (se_cmd=%p, tag=%d)", vha->vp_idx, cmd, 1732 vha->vp_idx, cmd, se_cmd, se_cmd->tag);
1733 se_cmd, cmd->tag);
1734 1733
1735 cmd->state = QLA_TGT_STATE_ABORTED; 1734 cmd->state = QLA_TGT_STATE_ABORTED;
1736 cmd->cmd_flags |= BIT_6; 1735 cmd->cmd_flags |= BIT_6;
@@ -1765,18 +1764,17 @@ static int qlt_pre_xmit_response(struct qla_tgt_cmd *cmd,
1765 if (se_cmd->se_cmd_flags & SCF_UNDERFLOW_BIT) { 1764 if (se_cmd->se_cmd_flags & SCF_UNDERFLOW_BIT) {
1766 prm->residual = se_cmd->residual_count; 1765 prm->residual = se_cmd->residual_count;
1767 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x305c, 1766 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x305c,
1768 "Residual underflow: %d (tag %d, " 1767 "Residual underflow: %d (tag %lld, op %x, bufflen %d, rq_result %x)\n",
1769 "op %x, bufflen %d, rq_result %x)\n", prm->residual, 1768 prm->residual, se_cmd->tag,
1770 cmd->tag, se_cmd->t_task_cdb ? se_cmd->t_task_cdb[0] : 0, 1769 se_cmd->t_task_cdb ? se_cmd->t_task_cdb[0] : 0,
1771 cmd->bufflen, prm->rq_result); 1770 cmd->bufflen, prm->rq_result);
1772 prm->rq_result |= SS_RESIDUAL_UNDER; 1771 prm->rq_result |= SS_RESIDUAL_UNDER;
1773 } else if (se_cmd->se_cmd_flags & SCF_OVERFLOW_BIT) { 1772 } else if (se_cmd->se_cmd_flags & SCF_OVERFLOW_BIT) {
1774 prm->residual = se_cmd->residual_count; 1773 prm->residual = se_cmd->residual_count;
1775 ql_dbg(ql_dbg_io, vha, 0x305d, 1774 ql_dbg(ql_dbg_io, vha, 0x305d,
1776 "Residual overflow: %d (tag %d, " 1775 "Residual overflow: %d (tag %lld, op %x, bufflen %d, rq_result %x)\n",
1777 "op %x, bufflen %d, rq_result %x)\n", prm->residual, 1776 prm->residual, se_cmd->tag, se_cmd->t_task_cdb ?
1778 cmd->tag, se_cmd->t_task_cdb ? se_cmd->t_task_cdb[0] : 0, 1777 se_cmd->t_task_cdb[0] : 0, cmd->bufflen, prm->rq_result);
1779 cmd->bufflen, prm->rq_result);
1780 prm->rq_result |= SS_RESIDUAL_OVER; 1778 prm->rq_result |= SS_RESIDUAL_OVER;
1781 } 1779 }
1782 1780
@@ -1849,7 +1847,7 @@ static void qlt_check_srr_debug(struct qla_tgt_cmd *cmd, int *xmit_type)
1849 == 50) { 1847 == 50) {
1850 *xmit_type &= ~QLA_TGT_XMIT_STATUS; 1848 *xmit_type &= ~QLA_TGT_XMIT_STATUS;
1851 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf015, 1849 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf015,
1852 "Dropping cmd %p (tag %d) status", cmd, cmd->tag); 1850 "Dropping cmd %p (tag %d) status", cmd, se_cmd->tag);
1853 } 1851 }
1854#endif 1852#endif
1855 /* 1853 /*
@@ -1873,7 +1871,7 @@ static void qlt_check_srr_debug(struct qla_tgt_cmd *cmd, int *xmit_type)
1873 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf016, 1871 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf016,
1874 "Cutting cmd %p (tag %d) buffer" 1872 "Cutting cmd %p (tag %d) buffer"
1875 " tail to len %d, sg_cnt %d (cmd->bufflen %d," 1873 " tail to len %d, sg_cnt %d (cmd->bufflen %d,"
1876 " cmd->sg_cnt %d)", cmd, cmd->tag, tot_len, leave, 1874 " cmd->sg_cnt %d)", cmd, se_cmd->tag, tot_len, leave,
1877 cmd->bufflen, cmd->sg_cnt); 1875 cmd->bufflen, cmd->sg_cnt);
1878 1876
1879 cmd->bufflen = tot_len; 1877 cmd->bufflen = tot_len;
@@ -1885,13 +1883,13 @@ static void qlt_check_srr_debug(struct qla_tgt_cmd *cmd, int *xmit_type)
1885 1883
1886 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf017, 1884 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf017,
1887 "Cutting cmd %p (tag %d) buffer head " 1885 "Cutting cmd %p (tag %d) buffer head "
1888 "to offset %d (cmd->bufflen %d)", cmd, cmd->tag, offset, 1886 "to offset %d (cmd->bufflen %d)", cmd, se_cmd->tag, offset,
1889 cmd->bufflen); 1887 cmd->bufflen);
1890 if (offset == 0) 1888 if (offset == 0)
1891 *xmit_type &= ~QLA_TGT_XMIT_DATA; 1889 *xmit_type &= ~QLA_TGT_XMIT_DATA;
1892 else if (qlt_set_data_offset(cmd, offset)) { 1890 else if (qlt_set_data_offset(cmd, offset)) {
1893 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf018, 1891 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf018,
1894 "qlt_set_data_offset() failed (tag %d)", cmd->tag); 1892 "qlt_set_data_offset() failed (tag %d)", se_cmd->tag);
1895 } 1893 }
1896 } 1894 }
1897} 1895}
@@ -3194,7 +3192,7 @@ skip_term:
3194 return; 3192 return;
3195 } else if (cmd->state == QLA_TGT_STATE_ABORTED) { 3193 } else if (cmd->state == QLA_TGT_STATE_ABORTED) {
3196 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01e, 3194 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01e,
3197 "Aborted command %p (tag %d) finished\n", cmd, cmd->tag); 3195 "Aborted command %p (tag %lld) finished\n", cmd, se_cmd->tag);
3198 } else { 3196 } else {
3199 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05c, 3197 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05c,
3200 "qla_target(%d): A command in state (%d) should " 3198 "qla_target(%d): A command in state (%d) should "
@@ -3266,7 +3264,7 @@ static void __qlt_do_work(struct qla_tgt_cmd *cmd)
3266 goto out_term; 3264 goto out_term;
3267 3265
3268 cdb = &atio->u.isp24.fcp_cmnd.cdb[0]; 3266 cdb = &atio->u.isp24.fcp_cmnd.cdb[0];
3269 cmd->tag = atio->u.isp24.exchange_addr; 3267 cmd->se_cmd.tag = atio->u.isp24.exchange_addr;
3270 cmd->unpacked_lun = scsilun_to_int( 3268 cmd->unpacked_lun = scsilun_to_int(
3271 (struct scsi_lun *)&atio->u.isp24.fcp_cmnd.lun); 3269 (struct scsi_lun *)&atio->u.isp24.fcp_cmnd.lun);
3272 3270
@@ -3891,9 +3889,8 @@ static void qlt_handle_srr(struct scsi_qla_host *vha,
3891 resp = 1; 3889 resp = 1;
3892 } else { 3890 } else {
3893 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf064, 3891 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf064,
3894 "qla_target(%d): SRR for in data for cmd " 3892 "qla_target(%d): SRR for in data for cmd without them (tag %lld, SCSI status %d), reject",
3895 "without them (tag %d, SCSI status %d), " 3893 vha->vp_idx, se_cmd->tag,
3896 "reject", vha->vp_idx, cmd->tag,
3897 cmd->se_cmd.scsi_status); 3894 cmd->se_cmd.scsi_status);
3898 goto out_reject; 3895 goto out_reject;
3899 } 3896 }
@@ -3927,10 +3924,8 @@ static void qlt_handle_srr(struct scsi_qla_host *vha,
3927 } 3924 }
3928 } else { 3925 } else {
3929 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf066, 3926 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf066,
3930 "qla_target(%d): SRR for out data for cmd " 3927 "qla_target(%d): SRR for out data for cmd without them (tag %lld, SCSI status %d), reject",
3931 "without them (tag %d, SCSI status %d), " 3928 vha->vp_idx, se_cmd->tag, cmd->se_cmd.scsi_status);
3932 "reject", vha->vp_idx, cmd->tag,
3933 cmd->se_cmd.scsi_status);
3934 goto out_reject; 3929 goto out_reject;
3935 } 3930 }
3936 break; 3931 break;
@@ -4051,10 +4046,9 @@ restart:
4051 cmd->sg = se_cmd->t_data_sg; 4046 cmd->sg = se_cmd->t_data_sg;
4052 4047
4053 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf02c, 4048 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf02c,
4054 "SRR cmd %p (se_cmd %p, tag %d, op %x), " 4049 "SRR cmd %p (se_cmd %p, tag %lld, op %x), sg_cnt=%d, offset=%d",
4055 "sg_cnt=%d, offset=%d", cmd, &cmd->se_cmd, cmd->tag, 4050 cmd, &cmd->se_cmd, se_cmd->tag, se_cmd->t_task_cdb ?
4056 se_cmd->t_task_cdb ? se_cmd->t_task_cdb[0] : 0, 4051 se_cmd->t_task_cdb[0] : 0, cmd->sg_cnt, cmd->offset);
4057 cmd->sg_cnt, cmd->offset);
4058 4052
4059 qlt_handle_srr(vha, sctio, imm); 4053 qlt_handle_srr(vha, sctio, imm);
4060 4054