diff mbox series

[v2,4/4] IB/iser: fix error flow in case of registration failure

Message ID 20220308145546.8372-5-mgurtovoy@nvidia.com (mailing list archive)
State Accepted
Delegated to: Jason Gunthorpe
Headers show
Series iSER cleanups and fixes for 5.18 | expand

Commit Message

Max Gurtovoy March 8, 2022, 2:55 p.m. UTC
During READ/WRITE preparation, in case of failure in memory registration
using iser_reg_mem_fastreg we must unmap previously mapped iser task.

Reviewed-by: Sergey Gorenko <sergeygo@nvidia.com>
Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
---
 drivers/infiniband/ulp/iser/iser_initiator.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

Comments

Sagi Grimberg March 16, 2022, 3:14 p.m. UTC | #1
> During READ/WRITE preparation, in case of failure in memory registration
> using iser_reg_mem_fastreg we must unmap previously mapped iser task.
> 
> Reviewed-by: Sergey Gorenko <sergeygo@nvidia.com>
> Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>

Looks good,
Acked-by: Sagi Grimberg <sagi@grimberg.me>

Doesn't this need a fixes tag?
Max Gurtovoy March 16, 2022, 4:02 p.m. UTC | #2
On 3/16/2022 5:14 PM, Sagi Grimberg wrote:
>
>> During READ/WRITE preparation, in case of failure in memory registration
>> using iser_reg_mem_fastreg we must unmap previously mapped iser task.
>>
>> Reviewed-by: Sergey Gorenko <sergeygo@nvidia.com>
>> Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
>
> Looks good,
> Acked-by: Sagi Grimberg <sagi@grimberg.me>
>
> Doesn't this need a fixes tag?

I'm not sure.

I see this issue from iSER in 2006 (commit e85b24b5e7de9 - IB/iser: iSER 
initiator iSCSI PDU and TX/RX).
Sagi Grimberg March 17, 2022, 7:31 a.m. UTC | #3
>>> During READ/WRITE preparation, in case of failure in memory registration
>>> using iser_reg_mem_fastreg we must unmap previously mapped iser task.
>>>
>>> Reviewed-by: Sergey Gorenko <sergeygo@nvidia.com>
>>> Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
>>
>> Looks good,
>> Acked-by: Sagi Grimberg <sagi@grimberg.me>
>>
>> Doesn't this need a fixes tag?
> 
> I'm not sure.
> 
> I see this issue from iSER in 2006 (commit e85b24b5e7de9 - IB/iser: iSER 
> initiator iSCSI PDU and TX/RX).

Hmm... ok
diff mbox series

Patch

diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c
index dbc2c268bc0e..bd5f3b5e1727 100644
--- a/drivers/infiniband/ulp/iser/iser_initiator.c
+++ b/drivers/infiniband/ulp/iser/iser_initiator.c
@@ -62,7 +62,7 @@  static int iser_prepare_read_cmd(struct iscsi_task *task)
 	err = iser_reg_mem_fastreg(iser_task, ISER_DIR_IN, false);
 	if (err) {
 		iser_err("Failed to set up Data-IN RDMA\n");
-		return err;
+		goto out_err;
 	}
 	mem_reg = &iser_task->rdma_reg[ISER_DIR_IN];
 
@@ -75,6 +75,10 @@  static int iser_prepare_read_cmd(struct iscsi_task *task)
 		 (unsigned long long)mem_reg->sge.addr);
 
 	return 0;
+
+out_err:
+	iser_dma_unmap_task_data(iser_task, ISER_DIR_IN, DMA_FROM_DEVICE);
+	return err;
 }
 
 /* Register user buffer memory and initialize passive rdma
@@ -100,9 +104,9 @@  static int iser_prepare_write_cmd(struct iscsi_task *task, unsigned int imm_sz,
 
 	err = iser_reg_mem_fastreg(iser_task, ISER_DIR_OUT,
 				   buf_out->data_len == imm_sz);
-	if (err != 0) {
+	if (err) {
 		iser_err("Failed to register write cmd RDMA mem\n");
-		return err;
+		goto out_err;
 	}
 
 	mem_reg = &iser_task->rdma_reg[ISER_DIR_OUT];
@@ -129,6 +133,10 @@  static int iser_prepare_write_cmd(struct iscsi_task *task, unsigned int imm_sz,
 	}
 
 	return 0;
+
+out_err:
+	iser_dma_unmap_task_data(iser_task, ISER_DIR_OUT, DMA_TO_DEVICE);
+	return err;
 }
 
 /* creates a new tx descriptor and adds header regd buffer */