]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
xprtrdma: Toggle XPRT_CONGESTED in xprtrdma's slot methods
authorChuck Lever <chuck.lever@oracle.com>
Mon, 19 Aug 2019 22:43:17 +0000 (18:43 -0400)
committerKhalid Elmously <khalid.elmously@canonical.com>
Fri, 18 Oct 2019 08:26:37 +0000 (04:26 -0400)
BugLink: https://bugs.launchpad.net/bugs/1848039
[ Upstream commit 395790566eec37706dedeb94779045adc3a7581e ]

Commit 48be539dd44a ("xprtrdma: Introduce ->alloc_slot call-out for
xprtrdma") added a separate alloc_slot and free_slot to the RPC/RDMA
transport. Later, commit 75891f502f5f ("SUNRPC: Support for
congestion control when queuing is enabled") modified the generic
alloc/free_slot methods, but neglected the methods in xprtrdma.

Found via code review.

Fixes: 75891f502f5f ("SUNRPC: Support for congestion control ... ")
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>
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
net/sunrpc/xprtrdma/transport.c

index 2ec349ed47702e1ad9f75638a23779662407ef9e..f4763e8a67617fbd5ad700b00550e39bdc74eeb4 100644 (file)
@@ -571,6 +571,7 @@ xprt_rdma_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task)
        return;
 
 out_sleep:
+       set_bit(XPRT_CONGESTED, &xprt->state);
        rpc_sleep_on(&xprt->backlog, task, NULL);
        task->tk_status = -EAGAIN;
 }
@@ -589,7 +590,8 @@ xprt_rdma_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *rqst)
 
        memset(rqst, 0, sizeof(*rqst));
        rpcrdma_buffer_put(&r_xprt->rx_buf, rpcr_to_rdmar(rqst));
-       rpc_wake_up_next(&xprt->backlog);
+       if (unlikely(!rpc_wake_up_next(&xprt->backlog)))
+               clear_bit(XPRT_CONGESTED, &xprt->state);
 }
 
 static bool rpcrdma_check_regbuf(struct rpcrdma_xprt *r_xprt,