diff options
| -rw-r--r-- | drivers/infiniband/ulp/srpt/ib_srpt.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index 77b6368fec3d..c09d41b1a2ff 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c | |||
| @@ -1825,9 +1825,11 @@ static void srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch, | |||
| 1825 | { | 1825 | { |
| 1826 | struct srp_tsk_mgmt *srp_tsk; | 1826 | struct srp_tsk_mgmt *srp_tsk; |
| 1827 | struct se_cmd *cmd; | 1827 | struct se_cmd *cmd; |
| 1828 | struct se_session *sess = ch->sess; | ||
| 1828 | uint64_t unpacked_lun; | 1829 | uint64_t unpacked_lun; |
| 1830 | uint32_t tag = 0; | ||
| 1829 | int tcm_tmr; | 1831 | int tcm_tmr; |
| 1830 | int res; | 1832 | int rc; |
| 1831 | 1833 | ||
| 1832 | BUG_ON(!send_ioctx); | 1834 | BUG_ON(!send_ioctx); |
| 1833 | 1835 | ||
| @@ -1846,28 +1848,25 @@ static void srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch, | |||
| 1846 | TMR_TASK_MGMT_FUNCTION_NOT_SUPPORTED; | 1848 | TMR_TASK_MGMT_FUNCTION_NOT_SUPPORTED; |
| 1847 | goto fail; | 1849 | goto fail; |
| 1848 | } | 1850 | } |
| 1849 | transport_init_se_cmd(&send_ioctx->cmd, &srpt_target->tf_ops, ch->sess, | ||
| 1850 | 0, DMA_NONE, MSG_SIMPLE_TAG, send_ioctx->sense_data); | ||
| 1851 | |||
| 1852 | res = core_tmr_alloc_req(cmd, NULL, tcm_tmr, GFP_KERNEL); | ||
| 1853 | if (res < 0) { | ||
| 1854 | send_ioctx->cmd.se_tmr_req->response = TMR_FUNCTION_REJECTED; | ||
| 1855 | goto fail; | ||
| 1856 | } | ||
| 1857 | |||
| 1858 | unpacked_lun = srpt_unpack_lun((uint8_t *)&srp_tsk->lun, | 1851 | unpacked_lun = srpt_unpack_lun((uint8_t *)&srp_tsk->lun, |
| 1859 | sizeof(srp_tsk->lun)); | 1852 | sizeof(srp_tsk->lun)); |
| 1860 | res = transport_lookup_tmr_lun(&send_ioctx->cmd, unpacked_lun); | 1853 | |
| 1861 | if (res) { | 1854 | if (srp_tsk->tsk_mgmt_func == SRP_TSK_ABORT_TASK) { |
| 1862 | pr_debug("rejecting TMR for LUN %lld\n", unpacked_lun); | 1855 | rc = srpt_rx_mgmt_fn_tag(send_ioctx, srp_tsk->task_tag); |
| 1863 | send_ioctx->cmd.se_tmr_req->response = TMR_LUN_DOES_NOT_EXIST; | 1856 | if (rc < 0) { |
| 1857 | send_ioctx->cmd.se_tmr_req->response = | ||
| 1858 | TMR_TASK_DOES_NOT_EXIST; | ||
| 1859 | goto fail; | ||
| 1860 | } | ||
| 1861 | tag = srp_tsk->task_tag; | ||
| 1862 | } | ||
| 1863 | rc = target_submit_tmr(&send_ioctx->cmd, sess, NULL, unpacked_lun, | ||
| 1864 | srp_tsk, tcm_tmr, GFP_KERNEL, tag, | ||
| 1865 | TARGET_SCF_ACK_KREF); | ||
| 1866 | if (rc != 0) { | ||
| 1867 | send_ioctx->cmd.se_tmr_req->response = TMR_FUNCTION_REJECTED; | ||
| 1864 | goto fail; | 1868 | goto fail; |
| 1865 | } | 1869 | } |
| 1866 | |||
| 1867 | if (srp_tsk->tsk_mgmt_func == SRP_TSK_ABORT_TASK) | ||
| 1868 | srpt_rx_mgmt_fn_tag(send_ioctx, srp_tsk->task_tag); | ||
| 1869 | |||
| 1870 | transport_generic_handle_tmr(&send_ioctx->cmd); | ||
| 1871 | return; | 1870 | return; |
| 1872 | fail: | 1871 | fail: |
| 1873 | transport_send_check_condition_and_sense(cmd, 0, 0); // XXX: | 1872 | transport_send_check_condition_and_sense(cmd, 0, 0); // XXX: |
