diff options
| -rw-r--r-- | net/sunrpc/xprt.c | 5 | ||||
| -rw-r--r-- | net/sunrpc/xprtrdma/transport.c | 2 | 
2 files changed, 5 insertions, 2 deletions
| diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 9f0025e0742c..2d1f84aea516 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -1687,12 +1687,15 @@ out:  static struct rpc_rqst *xprt_dynamic_alloc_slot(struct rpc_xprt *xprt)  {  	struct rpc_rqst *req = ERR_PTR(-EAGAIN); +	gfp_t gfp_mask = GFP_KERNEL;  	if (xprt->num_reqs >= xprt->max_reqs)  		goto out;  	++xprt->num_reqs;  	spin_unlock(&xprt->reserve_lock); -	req = kzalloc(sizeof(struct rpc_rqst), GFP_KERNEL); +	if (current->flags & PF_WQ_WORKER) +		gfp_mask |= __GFP_NORETRY | __GFP_NOWARN; +	req = kzalloc(sizeof(*req), gfp_mask);  	spin_lock(&xprt->reserve_lock);  	if (req != NULL)  		goto out; diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c index 5714bf880e95..923e4b512ee9 100644 --- a/net/sunrpc/xprtrdma/transport.c +++ b/net/sunrpc/xprtrdma/transport.c @@ -517,7 +517,7 @@ xprt_rdma_alloc_slot(struct rpc_xprt *xprt, struct rpc_task *task)  	return;  out_sleep: -	task->tk_status = -EAGAIN; +	task->tk_status = -ENOMEM;  	xprt_add_backlog(xprt, task);  } | 
