diff options
Diffstat (limited to 'net/sunrpc/svc_xprt.c')
| -rw-r--r-- | net/sunrpc/svc_xprt.c | 10 | 
1 files changed, 4 insertions, 6 deletions
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index 88f2bf67196..bac973a3136 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c @@ -316,7 +316,6 @@ static bool svc_xprt_has_something_to_do(struct svc_xprt *xprt)   */  void svc_xprt_enqueue(struct svc_xprt *xprt)  { -	struct svc_serv	*serv = xprt->xpt_server;  	struct svc_pool *pool;  	struct svc_rqst	*rqstp;  	int cpu; @@ -362,8 +361,6 @@ void svc_xprt_enqueue(struct svc_xprt *xprt)  				rqstp, rqstp->rq_xprt);  		rqstp->rq_xprt = xprt;  		svc_xprt_get(xprt); -		rqstp->rq_reserved = serv->sv_max_mesg; -		atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);  		pool->sp_stats.threads_woken++;  		wake_up(&rqstp->rq_wait);  	} else { @@ -640,8 +637,6 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)  	if (xprt) {  		rqstp->rq_xprt = xprt;  		svc_xprt_get(xprt); -		rqstp->rq_reserved = serv->sv_max_mesg; -		atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);  		/* As there is a shortage of threads and this request  		 * had to be queued, don't allow the thread to wait so @@ -738,6 +733,8 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)  		else  			len = xprt->xpt_ops->xpo_recvfrom(rqstp);  		dprintk("svc: got len=%d\n", len); +		rqstp->rq_reserved = serv->sv_max_mesg; +		atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved);  	}  	svc_xprt_received(xprt); @@ -794,7 +791,8 @@ int svc_send(struct svc_rqst *rqstp)  	/* Grab mutex to serialize outgoing data. */  	mutex_lock(&xprt->xpt_mutex); -	if (test_bit(XPT_DEAD, &xprt->xpt_flags)) +	if (test_bit(XPT_DEAD, &xprt->xpt_flags) +			|| test_bit(XPT_CLOSE, &xprt->xpt_flags))  		len = -ENOTCONN;  	else  		len = xprt->xpt_ops->xpo_sendto(rqstp);  |