Merge tag 'v5.16' into rdma.git for-next
[sfrench/cifs-2.6.git] / drivers / infiniband / sw / rxe / rxe_mr.c
index 25c78aade8228157bee43ad25fbf62796b0a9ffd..453ef3c9d535986c0edbd03563fcd2b8b2546c33 100644 (file)
@@ -135,19 +135,19 @@ static int rxe_mr_alloc(struct rxe_mr *mr, int num_buf, int both)
 
        ret = rxe_mr_alloc_map_set(num_map, &mr->cur_map_set);
        if (ret)
-               goto err_out;
+               return -ENOMEM;
 
        if (both) {
                ret = rxe_mr_alloc_map_set(num_map, &mr->next_map_set);
-               if (ret) {
-                       rxe_mr_free_map_set(mr->num_map, mr->cur_map_set);
-                       goto err_out;
-               }
+               if (ret)
+                       goto err_free;
        }
 
        return 0;
 
-err_out:
+err_free:
+       rxe_mr_free_map_set(mr->num_map, mr->cur_map_set);
+       mr->cur_map_set = NULL;
        return -ENOMEM;
 }
 
@@ -214,7 +214,7 @@ int rxe_mr_init_user(struct rxe_pd *pd, u64 start, u64 length, u64 iova,
                                pr_warn("%s: Unable to get virtual address\n",
                                                __func__);
                                err = -ENOMEM;
-                               goto err_cleanup_map;
+                               goto err_release_umem;
                        }
 
                        buf->addr = (uintptr_t)vaddr;
@@ -237,8 +237,6 @@ int rxe_mr_init_user(struct rxe_pd *pd, u64 start, u64 length, u64 iova,
 
        return 0;
 
-err_cleanup_map:
-       rxe_mr_free_map_set(mr->num_map, mr->cur_map_set);
 err_release_umem:
        ib_umem_release(umem);
 err_out: