lkml.org 
[lkml]   [2020]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 009/118] xprtrdma: Release in-flight MRs on disconnect
    Date
    From: Chuck Lever <chuck.lever@oracle.com>

    [ Upstream commit 5de55ce951a1466e31ff68a7bc6b0a7ce3cb5947 ]

    Dan Aloni reports that when a server disconnects abruptly, a few
    memory regions are left DMA mapped. Over time this leak could pin
    enough I/O resources to slow or even deadlock an NFS/RDMA client.

    I found that if a transport disconnects before pending Send and
    FastReg WRs can be posted, the to-be-registered MRs are stranded on
    the req's rl_registered list and never released -- since they
    weren't posted, there's no Send completion to DMA unmap them.

    Reported-by: Dan Aloni <dan@kernelim.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/sunrpc/xprtrdma/verbs.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
    index 75c646743df3e..ca89f24a1590b 100644
    --- a/net/sunrpc/xprtrdma/verbs.c
    +++ b/net/sunrpc/xprtrdma/verbs.c
    @@ -933,6 +933,8 @@ static void rpcrdma_req_reset(struct rpcrdma_req *req)

    rpcrdma_regbuf_dma_unmap(req->rl_sendbuf);
    rpcrdma_regbuf_dma_unmap(req->rl_recvbuf);
    +
    + frwr_reset(req);
    }

    /* ASSUMPTION: the rb_allreqs list is stable for the duration,
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-09-21 18:44    [W:4.515 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site