Commit 4b8dbdfb authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Fix an RPC/RDMA performance regression



Use the standard gfp mask instead of using GFP_NOWAIT. The latter causes
issues when under memory pressure.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 32346491
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -1340,14 +1340,11 @@ gss_hash_cred(struct auth_cred *acred, unsigned int hashbits)
/*
 * Lookup RPCSEC_GSS cred for the current process
 */
static struct rpc_cred *
gss_lookup_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
static struct rpc_cred *gss_lookup_cred(struct rpc_auth *auth,
					struct auth_cred *acred, int flags)
{
	gfp_t gfp = GFP_KERNEL;

	if (flags & RPCAUTH_LOOKUP_ASYNC)
		gfp = GFP_NOWAIT | __GFP_NOWARN;
	return rpcauth_lookup_credcache(auth, acred, flags, gfp);
	return rpcauth_lookup_credcache(auth, acred, flags,
					rpc_task_gfp_mask());
}

static struct rpc_cred *
+1 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ gfp_t rpc_task_gfp_mask(void)
		return GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN;
	return GFP_KERNEL;
}
EXPORT_SYMBOL_GPL(rpc_task_gfp_mask);

unsigned long
rpc_task_timeout(const struct rpc_task *task)
+1 −5
Original line number Diff line number Diff line
@@ -571,11 +571,7 @@ xprt_rdma_allocate(struct rpc_task *task)
	struct rpc_rqst *rqst = task->tk_rqstp;
	struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(rqst->rq_xprt);
	struct rpcrdma_req *req = rpcr_to_rdmar(rqst);
	gfp_t flags;

	flags = RPCRDMA_DEF_GFP;
	if (RPC_IS_ASYNC(task))
		flags = GFP_NOWAIT | __GFP_NOWARN;
	gfp_t flags = rpc_task_gfp_mask();

	if (!rpcrdma_check_regbuf(r_xprt, req->rl_sendbuf, rqst->rq_callsize,
				  flags))