lkml.org 
[lkml]   [2017]   [Dec]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 162/178] xprtrdma: Dont defer fencing an async RPCs chunks
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Chuck Lever <chuck.lever@oracle.com>


    [ Upstream commit 8f66b1a529047a972cb9602a919c53a95f3d7a2b ]

    In current kernels, waiting in xprt_release appears to be safe to
    do. I had erroneously believed that for ASYNC RPCs, waiting of any
    kind in xprt_release->xprt_rdma_free would result in deadlock. I've
    done injection testing and consulted with Trond to confirm that
    waiting in the RPC release path is safe.

    For the very few times where RPC resources haven't yet been released
    earlier by the reply handler, it is safe to wait synchronously in
    xprt_rdma_free for invalidation rather than defering it to MR
    recovery.

    Note: When the QP is error state, posting a LocalInvalidate should
    flush and mark the MR as bad. There is no way the remote HCA can
    access that MR via a QP in error state, so it is effectively already
    inaccessible and thus safe for the Upper Layer to access. The next
    time the MR is used it should be recognized and cleaned up properly
    by frwr_op_map.

    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/sunrpc/xprtrdma/transport.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/net/sunrpc/xprtrdma/transport.c
    +++ b/net/sunrpc/xprtrdma/transport.c
    @@ -686,7 +686,7 @@ xprt_rdma_free(struct rpc_task *task)
    dprintk("RPC: %s: called on 0x%p\n", __func__, req->rl_reply);

    if (!list_empty(&req->rl_registered))
    - ia->ri_ops->ro_unmap_safe(r_xprt, req, !RPC_IS_ASYNC(task));
    + ia->ri_ops->ro_unmap_sync(r_xprt, &req->rl_registered);
    rpcrdma_unmap_sges(ia, req);
    rpcrdma_buffer_put(req);
    }

    \
     
     \ /
      Last update: 2017-12-18 17:21    [W:2.152 / U:0.696 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site