aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprt.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/xprt.c')
-rw-r--r--net/sunrpc/xprt.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 86bea4520c4d..ce927002862a 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -826,8 +826,15 @@ void xprt_connect(struct rpc_task *task)
826 return; 826 return;
827 if (xprt_test_and_set_connecting(xprt)) 827 if (xprt_test_and_set_connecting(xprt))
828 return; 828 return;
829 xprt->stat.connect_start = jiffies; 829 /* Race breaker */
830 xprt->ops->connect(xprt, task); 830 if (!xprt_connected(xprt)) {
831 xprt->stat.connect_start = jiffies;
832 xprt->ops->connect(xprt, task);
833 } else {
834 xprt_clear_connecting(xprt);
835 task->tk_status = 0;
836 rpc_wake_up_queued_task(&xprt->pending, task);
837 }
831 } 838 }
832 xprt_release_write(xprt, task); 839 xprt_release_write(xprt, task);
833} 840}
@@ -1623,6 +1630,8 @@ xprt_request_init(struct rpc_task *task)
1623 req->rq_snd_buf.buflen = 0; 1630 req->rq_snd_buf.buflen = 0;
1624 req->rq_rcv_buf.len = 0; 1631 req->rq_rcv_buf.len = 0;
1625 req->rq_rcv_buf.buflen = 0; 1632 req->rq_rcv_buf.buflen = 0;
1633 req->rq_snd_buf.bvec = NULL;
1634 req->rq_rcv_buf.bvec = NULL;
1626 req->rq_release_snd_buf = NULL; 1635 req->rq_release_snd_buf = NULL;
1627 xprt_reset_majortimeo(req); 1636 xprt_reset_majortimeo(req);
1628 dprintk("RPC: %5u reserved req %p xid %08x\n", task->tk_pid, 1637 dprintk("RPC: %5u reserved req %p xid %08x\n", task->tk_pid,