Skip to content

Commit 2e11a5e

Browse files
mgurtovoyjgunthorpe
authored andcommitted
IB/iser: Fix error flow in case of registration failure
During READ/WRITE preparation, in case of failure in memory registration using iser_reg_mem_fastreg we must unmap previously mapped iser task. Link: https://lore.kernel.org/r/20220308145546.8372-5-mgurtovoy@nvidia.com Reviewed-by: Sergey Gorenko <sergeygo@nvidia.com> Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com> Acked-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
1 parent 80303ee commit 2e11a5e

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

drivers/infiniband/ulp/iser/iser_initiator.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ static int iser_prepare_read_cmd(struct iscsi_task *task)
6262
err = iser_reg_mem_fastreg(iser_task, ISER_DIR_IN, false);
6363
if (err) {
6464
iser_err("Failed to set up Data-IN RDMA\n");
65-
return err;
65+
goto out_err;
6666
}
6767
mem_reg = &iser_task->rdma_reg[ISER_DIR_IN];
6868

@@ -75,6 +75,10 @@ static int iser_prepare_read_cmd(struct iscsi_task *task)
7575
(unsigned long long)mem_reg->sge.addr);
7676

7777
return 0;
78+
79+
out_err:
80+
iser_dma_unmap_task_data(iser_task, ISER_DIR_IN, DMA_FROM_DEVICE);
81+
return err;
7882
}
7983

8084
/* 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,
100104

101105
err = iser_reg_mem_fastreg(iser_task, ISER_DIR_OUT,
102106
buf_out->data_len == imm_sz);
103-
if (err != 0) {
107+
if (err) {
104108
iser_err("Failed to register write cmd RDMA mem\n");
105-
return err;
109+
goto out_err;
106110
}
107111

108112
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,
129133
}
130134

131135
return 0;
136+
137+
out_err:
138+
iser_dma_unmap_task_data(iser_task, ISER_DIR_OUT, DMA_TO_DEVICE);
139+
return err;
132140
}
133141

134142
/* creates a new tx descriptor and adds header regd buffer */

0 commit comments

Comments
 (0)