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 |
> 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?
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).
>>> 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 --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 */