diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-03 09:55:56 +0100 | 
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-01-06 14:58:58 -0500 | 
| commit | 0065db328533c390fbfb0fe0c46bcf9a278fb99e (patch) | |
| tree | 3ef282aa05653857007760ce15a4119f198f8320 | |
| parent | 632e3bdc5006334cea894d078660b691685e1075 (diff) | |
SUNRPC: Clean up xprt_destroy()
 We ought never to be calling xprt_destroy() if there are still active
 rpc_tasks. Optimise away the broken code that attempts to "fix" that case.
 Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
| -rw-r--r-- | net/sunrpc/xprt.c | 30 | 
1 files changed, 6 insertions, 24 deletions
| diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 8bc0d5acf0da..8ff2c8acb223 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -534,10 +534,6 @@ void xprt_connect(struct rpc_task *task)  	dprintk("RPC: %4d xprt_connect xprt %p %s connected\n", task->tk_pid,  			xprt, (xprt_connected(xprt) ? "is" : "is not")); -	if (xprt->shutdown) { -		task->tk_status = -EIO; -		return; -	}  	if (!xprt->addr.sin_port) {  		task->tk_status = -EIO;  		return; @@ -686,9 +682,6 @@ int xprt_prepare_transmit(struct rpc_task *task)  	dprintk("RPC: %4d xprt_prepare_transmit\n", task->tk_pid); -	if (xprt->shutdown) -		return -EIO; -  	spin_lock_bh(&xprt->transport_lock);  	if (req->rq_received && !req->rq_bytes_sent) {  		err = req->rq_received; @@ -813,11 +806,9 @@ void xprt_reserve(struct rpc_task *task)  	struct rpc_xprt	*xprt = task->tk_xprt;  	task->tk_status = -EIO; -	if (!xprt->shutdown) { -		spin_lock(&xprt->reserve_lock); -		do_xprt_reserve(task); -		spin_unlock(&xprt->reserve_lock); -	} +	spin_lock(&xprt->reserve_lock); +	do_xprt_reserve(task); +	spin_unlock(&xprt->reserve_lock);  }  static inline u32 xprt_alloc_xid(struct rpc_xprt *xprt) @@ -864,7 +855,7 @@ void xprt_release(struct rpc_task *task)  	if (!list_empty(&req->rq_list))  		list_del(&req->rq_list);  	xprt->last_used = jiffies; -	if (list_empty(&xprt->recv) && !xprt->shutdown) +	if (list_empty(&xprt->recv))  		mod_timer(&xprt->timer,  				xprt->last_used + xprt->idle_timeout);  	spin_unlock_bh(&xprt->transport_lock); @@ -976,16 +967,6 @@ struct rpc_xprt *xprt_create_proto(int proto, struct sockaddr_in *sap, struct rp  	return xprt;  } -static void xprt_shutdown(struct rpc_xprt *xprt) -{ -	xprt->shutdown = 1; -	rpc_wake_up(&xprt->sending); -	rpc_wake_up(&xprt->resend); -	xprt_wake_pending_tasks(xprt, -EIO); -	rpc_wake_up(&xprt->backlog); -	del_timer_sync(&xprt->timer); -} -  /**   * xprt_destroy - destroy an RPC transport, killing off all requests.   * @xprt: transport to destroy @@ -994,7 +975,8 @@ static void xprt_shutdown(struct rpc_xprt *xprt)  int xprt_destroy(struct rpc_xprt *xprt)  {  	dprintk("RPC:      destroying transport %p\n", xprt); -	xprt_shutdown(xprt); +	xprt->shutdown = 1; +	del_timer_sync(&xprt->timer);  	xprt->ops->destroy(xprt);  	kfree(xprt); | 
