diff options
author | Bart Van Assche <bart.vanassche@sandisk.com> | 2015-04-14 07:26:44 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2015-05-31 01:42:31 -0400 |
commit | 649ee05499d1257a3af0e10d961a1c52d9ef95b7 (patch) | |
tree | 2c4ce7d541140925f8ebaaf76a30e0cbdb574dd2 /drivers/scsi/qla2xxx/qla_target.c | |
parent | 2650d71e244fb3637b5f58a0080682a8bf9c7091 (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.c | 52 |
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 | ||