]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
svcrdma: Clean up use of rdma->sc_pd->device in Receive paths
authorChuck Lever <chuck.lever@oracle.com>
Fri, 27 Feb 2026 14:03:29 +0000 (09:03 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 30 Mar 2026 01:25:09 +0000 (21:25 -0400)
I can't think of a reason why svcrdma is using the PD's device. Most
other consumers of the IB DMA API use the ib_device pointer from the
connection's rdma_cm_id.

I don't believe there's any functional difference between the two,
but it is a little confusing to see some uses of rdma_cm_id->device
and some of ib_pd->device.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c

index 3081a37a5896f7ada38ea52a70c9c52c52c477fb..f8a0638eb095d1acc2fe45bb4f3df67de314a479 100644 (file)
@@ -118,7 +118,8 @@ svc_rdma_next_recv_ctxt(struct list_head *list)
 static struct svc_rdma_recv_ctxt *
 svc_rdma_recv_ctxt_alloc(struct svcxprt_rdma *rdma)
 {
-       int node = ibdev_to_node(rdma->sc_cm_id->device);
+       struct ib_device *device = rdma->sc_cm_id->device;
+       int node = ibdev_to_node(device);
        struct svc_rdma_recv_ctxt *ctxt;
        unsigned long pages;
        dma_addr_t addr;
@@ -133,9 +134,9 @@ svc_rdma_recv_ctxt_alloc(struct svcxprt_rdma *rdma)
        buffer = kmalloc_node(rdma->sc_max_req_size, GFP_KERNEL, node);
        if (!buffer)
                goto fail1;
-       addr = ib_dma_map_single(rdma->sc_pd->device, buffer,
-                                rdma->sc_max_req_size, DMA_FROM_DEVICE);
-       if (ib_dma_mapping_error(rdma->sc_pd->device, addr))
+       addr = ib_dma_map_single(device, buffer, rdma->sc_max_req_size,
+                                DMA_FROM_DEVICE);
+       if (ib_dma_mapping_error(device, addr))
                goto fail2;
 
        svc_rdma_recv_cid_init(rdma, &ctxt->rc_cid);
@@ -167,7 +168,7 @@ fail0:
 static void svc_rdma_recv_ctxt_destroy(struct svcxprt_rdma *rdma,
                                       struct svc_rdma_recv_ctxt *ctxt)
 {
-       ib_dma_unmap_single(rdma->sc_pd->device, ctxt->rc_recv_sge.addr,
+       ib_dma_unmap_single(rdma->sc_cm_id->device, ctxt->rc_recv_sge.addr,
                            ctxt->rc_recv_sge.length, DMA_FROM_DEVICE);
        kfree(ctxt->rc_recv_buf);
        kfree(ctxt);
@@ -955,7 +956,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
                return 0;
 
        percpu_counter_inc(&svcrdma_stat_recv);
-       ib_dma_sync_single_for_cpu(rdma_xprt->sc_pd->device,
+       ib_dma_sync_single_for_cpu(rdma_xprt->sc_cm_id->device,
                                   ctxt->rc_recv_sge.addr, ctxt->rc_byte_len,
                                   DMA_FROM_DEVICE);
        svc_rdma_build_arg_xdr(rqstp, ctxt);