Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Max Gurtovoy and committed by
Jason Gunthorpe
2e11a5e4 80303ee2

+11 -3
+11 -3
drivers/infiniband/ulp/iser/iser_initiator.c
··· 62 62 err = iser_reg_mem_fastreg(iser_task, ISER_DIR_IN, false); 63 63 if (err) { 64 64 iser_err("Failed to set up Data-IN RDMA\n"); 65 - return err; 65 + goto out_err; 66 66 } 67 67 mem_reg = &iser_task->rdma_reg[ISER_DIR_IN]; 68 68 ··· 75 75 (unsigned long long)mem_reg->sge.addr); 76 76 77 77 return 0; 78 + 79 + out_err: 80 + iser_dma_unmap_task_data(iser_task, ISER_DIR_IN, DMA_FROM_DEVICE); 81 + return err; 78 82 } 79 83 80 84 /* Register user buffer memory and initialize passive rdma ··· 104 100 105 101 err = iser_reg_mem_fastreg(iser_task, ISER_DIR_OUT, 106 102 buf_out->data_len == imm_sz); 107 - if (err != 0) { 103 + if (err) { 108 104 iser_err("Failed to register write cmd RDMA mem\n"); 109 - return err; 105 + goto out_err; 110 106 } 111 107 112 108 mem_reg = &iser_task->rdma_reg[ISER_DIR_OUT]; ··· 133 129 } 134 130 135 131 return 0; 132 + 133 + out_err: 134 + iser_dma_unmap_task_data(iser_task, ISER_DIR_OUT, DMA_TO_DEVICE); 135 + return err; 136 136 } 137 137 138 138 /* creates a new tx descriptor and adds header regd buffer */