• Chuck Lever's avatar
    svcrdma: Make RDMA_ERROR messages work · a6081b82
    Chuck Lever authored
    Fix several issues with svc_rdma_send_error():
    
     - Post a receive buffer to replace the one that was consumed by
       the incoming request
     - Posting a send should use DMA_TO_DEVICE, not DMA_FROM_DEVICE
     - No need to put_page _and_ free pages in svc_rdma_put_context
     - Make sure the sge is set up completely in case the error
       path goes through svc_rdma_unmap_dma()
     - Replace the use of ENOSYS, which has a reserved meaning
    
    Related fixes in svc_rdma_recvfrom():
    
     - Don't leak the ctxt associated with the incoming request
     - Don't close the connection after sending an error reply
     - Let svc_rdma_send_error() figure out the right header error code
    
    As a last clean up, move svc_rdma_send_error() to svc_rdma_sendto.c
    with other similar functions. There is some common logic in these
    functions that could someday be combined to reduce code duplication.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Reviewed-by: default avatarDevesh Sharma <devesh.sharma@broadcom.com>
    Tested-by: default avatarDevesh Sharma <devesh.sharma@broadcom.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    a6081b82
svc_rdma_recvfrom.c 19.8 KB