Commit 44fbac22 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust

[PATCH] RPC: Add helper for waking tasks pending on a transport

 Clean-up: remove only reference to xprt->pending from the socket transport
 implementation.  This makes a cleaner interface for other transport
 implementations as well.

 Test-plan:
 Compile kernel with CONFIG_NFS enabled.

 Version: Thu, 11 Aug 2005 16:06:52 -0400
Signed-off-by: default avatarChuck Lever <cel@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 86b9f57d
...@@ -232,6 +232,7 @@ void xprt_reserve(struct rpc_task *); ...@@ -232,6 +232,7 @@ void xprt_reserve(struct rpc_task *);
int xprt_prepare_transmit(struct rpc_task *); int xprt_prepare_transmit(struct rpc_task *);
void xprt_transmit(struct rpc_task *); void xprt_transmit(struct rpc_task *);
void xprt_receive(struct rpc_task *); void xprt_receive(struct rpc_task *);
void xprt_wake_pending_tasks(struct rpc_xprt *, int);
int xprt_adjust_timeout(struct rpc_rqst *req); int xprt_adjust_timeout(struct rpc_rqst *req);
void xprt_release(struct rpc_task *); void xprt_release(struct rpc_task *);
void xprt_connect(struct rpc_task *); void xprt_connect(struct rpc_task *);
......
...@@ -227,6 +227,20 @@ xprt_adjust_cwnd(struct rpc_xprt *xprt, int result) ...@@ -227,6 +227,20 @@ xprt_adjust_cwnd(struct rpc_xprt *xprt, int result)
xprt->cwnd = cwnd; xprt->cwnd = cwnd;
} }
/**
* xprt_wake_pending_tasks - wake all tasks on a transport's pending queue
* @xprt: transport with waiting tasks
* @status: result code to plant in each task before waking it
*
*/
void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status)
{
if (status < 0)
rpc_wake_up_status(&xprt->pending, status);
else
rpc_wake_up(&xprt->pending);
}
static void xprt_reset_majortimeo(struct rpc_rqst *req) static void xprt_reset_majortimeo(struct rpc_rqst *req)
{ {
struct rpc_timeout *to = &req->rq_xprt->timeout; struct rpc_timeout *to = &req->rq_xprt->timeout;
...@@ -300,7 +314,7 @@ void xprt_disconnect(struct rpc_xprt *xprt) ...@@ -300,7 +314,7 @@ void xprt_disconnect(struct rpc_xprt *xprt)
dprintk("RPC: disconnected transport %p\n", xprt); dprintk("RPC: disconnected transport %p\n", xprt);
spin_lock_bh(&xprt->transport_lock); spin_lock_bh(&xprt->transport_lock);
xprt_clear_connected(xprt); xprt_clear_connected(xprt);
rpc_wake_up_status(&xprt->pending, -ENOTCONN); xprt_wake_pending_tasks(xprt, -ENOTCONN);
spin_unlock_bh(&xprt->transport_lock); spin_unlock_bh(&xprt->transport_lock);
} }
...@@ -803,7 +817,7 @@ static void xprt_shutdown(struct rpc_xprt *xprt) ...@@ -803,7 +817,7 @@ static void xprt_shutdown(struct rpc_xprt *xprt)
xprt->shutdown = 1; xprt->shutdown = 1;
rpc_wake_up(&xprt->sending); rpc_wake_up(&xprt->sending);
rpc_wake_up(&xprt->resend); rpc_wake_up(&xprt->resend);
rpc_wake_up(&xprt->pending); xprt_wake_pending_tasks(xprt, -EIO);
rpc_wake_up(&xprt->backlog); rpc_wake_up(&xprt->backlog);
wake_up(&xprt->cong_wait); wake_up(&xprt->cong_wait);
del_timer_sync(&xprt->timer); del_timer_sync(&xprt->timer);
......
...@@ -703,7 +703,7 @@ static void xs_tcp_state_change(struct sock *sk) ...@@ -703,7 +703,7 @@ static void xs_tcp_state_change(struct sock *sk)
xprt->tcp_reclen = 0; xprt->tcp_reclen = 0;
xprt->tcp_copied = 0; xprt->tcp_copied = 0;
xprt->tcp_flags = XPRT_COPY_RECM | XPRT_COPY_XID; xprt->tcp_flags = XPRT_COPY_RECM | XPRT_COPY_XID;
rpc_wake_up(&xprt->pending); xprt_wake_pending_tasks(xprt, 0);
} }
spin_unlock_bh(&xprt->transport_lock); spin_unlock_bh(&xprt->transport_lock);
break; break;
...@@ -920,10 +920,7 @@ static void xs_connect_worker(void *args) ...@@ -920,10 +920,7 @@ static void xs_connect_worker(void *args)
} }
} }
out: out:
if (status < 0) xprt_wake_pending_tasks(xprt, status);
rpc_wake_up_status(&xprt->pending, status);
else
rpc_wake_up(&xprt->pending);
out_clear: out_clear:
xprt_clear_connecting(xprt); xprt_clear_connecting(xprt);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment