lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 174/178] xprtrdma: Fix handling of RDMA_ERROR replies
    Date
    From: Chuck Lever <chuck.lever@oracle.com>

    commit 7b2182ec381f8ea15c7eb1266d6b5d7da620ad93 upstream.

    The RPC client currently doesn't handle ERR_CHUNK replies correctly.
    rpcrdma_complete_rqst() incorrectly passes a negative number to
    xprt_complete_rqst() as the number of bytes copied. Instead, set
    task->tk_status to the error value, and return zero bytes copied.

    In these cases, return -EIO rather than -EREMOTEIO. The RPC client's
    finite state machine doesn't know what to do with -EREMOTEIO.

    Additional clean ups:
    - Don't double-count RDMA_ERROR replies
    - Remove a stale comment

    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Cc: <stable@kernel.vger.org>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/sunrpc/xprtrdma/rpc_rdma.c | 9 +++------
    1 file changed, 3 insertions(+), 6 deletions(-)

    diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
    index ef5102b605895..c56e6cfc4a623 100644
    --- a/net/sunrpc/xprtrdma/rpc_rdma.c
    +++ b/net/sunrpc/xprtrdma/rpc_rdma.c
    @@ -1246,8 +1246,7 @@ rpcrdma_decode_error(struct rpcrdma_xprt *r_xprt, struct rpcrdma_rep *rep,
    be32_to_cpup(p), be32_to_cpu(rep->rr_xid));
    }

    - r_xprt->rx_stats.bad_reply_count++;
    - return -EREMOTEIO;
    + return -EIO;
    }

    /* Perform XID lookup, reconstruction of the RPC reply, and
    @@ -1284,13 +1283,11 @@ void rpcrdma_complete_rqst(struct rpcrdma_rep *rep)
    spin_unlock(&xprt->queue_lock);
    return;

    -/* If the incoming reply terminated a pending RPC, the next
    - * RPC call will post a replacement receive buffer as it is
    - * being marshaled.
    - */
    out_badheader:
    trace_xprtrdma_reply_hdr(rep);
    r_xprt->rx_stats.bad_reply_count++;
    + rqst->rq_task->tk_status = status;
    + status = 0;
    goto out;
    }

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 21:55    [W:3.750 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site