diff options
Diffstat (limited to 'net/sunrpc/xprt.c')
-rw-r--r-- | net/sunrpc/xprt.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 57c5e77b155e..2f9cd468b953 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c | |||
@@ -227,6 +227,20 @@ xprt_adjust_cwnd(struct rpc_xprt *xprt, int result) | |||
227 | xprt->cwnd = cwnd; | 227 | xprt->cwnd = cwnd; |
228 | } | 228 | } |
229 | 229 | ||
230 | /** | ||
231 | * xprt_wake_pending_tasks - wake all tasks on a transport's pending queue | ||
232 | * @xprt: transport with waiting tasks | ||
233 | * @status: result code to plant in each task before waking it | ||
234 | * | ||
235 | */ | ||
236 | void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status) | ||
237 | { | ||
238 | if (status < 0) | ||
239 | rpc_wake_up_status(&xprt->pending, status); | ||
240 | else | ||
241 | rpc_wake_up(&xprt->pending); | ||
242 | } | ||
243 | |||
230 | static void xprt_reset_majortimeo(struct rpc_rqst *req) | 244 | static void xprt_reset_majortimeo(struct rpc_rqst *req) |
231 | { | 245 | { |
232 | struct rpc_timeout *to = &req->rq_xprt->timeout; | 246 | struct rpc_timeout *to = &req->rq_xprt->timeout; |
@@ -300,7 +314,7 @@ void xprt_disconnect(struct rpc_xprt *xprt) | |||
300 | dprintk("RPC: disconnected transport %p\n", xprt); | 314 | dprintk("RPC: disconnected transport %p\n", xprt); |
301 | spin_lock_bh(&xprt->transport_lock); | 315 | spin_lock_bh(&xprt->transport_lock); |
302 | xprt_clear_connected(xprt); | 316 | xprt_clear_connected(xprt); |
303 | rpc_wake_up_status(&xprt->pending, -ENOTCONN); | 317 | xprt_wake_pending_tasks(xprt, -ENOTCONN); |
304 | spin_unlock_bh(&xprt->transport_lock); | 318 | spin_unlock_bh(&xprt->transport_lock); |
305 | } | 319 | } |
306 | 320 | ||
@@ -803,7 +817,7 @@ static void xprt_shutdown(struct rpc_xprt *xprt) | |||
803 | xprt->shutdown = 1; | 817 | xprt->shutdown = 1; |
804 | rpc_wake_up(&xprt->sending); | 818 | rpc_wake_up(&xprt->sending); |
805 | rpc_wake_up(&xprt->resend); | 819 | rpc_wake_up(&xprt->resend); |
806 | rpc_wake_up(&xprt->pending); | 820 | xprt_wake_pending_tasks(xprt, -EIO); |
807 | rpc_wake_up(&xprt->backlog); | 821 | rpc_wake_up(&xprt->backlog); |
808 | wake_up(&xprt->cong_wait); | 822 | wake_up(&xprt->cong_wait); |
809 | del_timer_sync(&xprt->timer); | 823 | del_timer_sync(&xprt->timer); |