• Chuck Lever's avatar
    xprtrdma: Use same device when mapping or syncing DMA buffers · 91a10c52
    Chuck Lever authored
    When the underlying device driver is reloaded, ia->ri_device will be
    replaced. All cached copies of that device pointer have to be
    updated as well.
    
    Commit 54cbd6b0 ("xprtrdma: Delay DMA mapping Send and Receive
    buffers") added the rg_device field to each regbuf. As part of
    handling a device removal, rpcrdma_dma_unmap_regbuf is invoked on
    all regbufs for a transport.
    
    Simply calling rpcrdma_dma_map_regbuf for each Receive buffer after
    the driver has been reloaded should reinitialize rg_device correctly
    for every case except rpcrdma_wc_receive, which still uses
    rpcrdma_rep::rr_device.
    
    Ensure the same device that was used to map a Receive buffer is also
    used to sync it in rpcrdma_wc_receive by using rg_device there
    instead of rr_device.
    
    This is the only use of rr_device, so it can be removed.
    
    The use of regbufs in the send path is also updated, for
    completeness.
    
    Fixes: 54cbd6b0 ("xprtrdma: Delay DMA mapping Send and ... ")
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    91a10c52
rpc_rdma.c 33.8 KB