aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/sunrpc/sched.h6
-rw-r--r--net/sunrpc/clnt.c2
-rw-r--r--net/sunrpc/sched.c3
-rw-r--r--net/sunrpc/xprt.c2
-rw-r--r--net/sunrpc/xprtsock.c1
5 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h
index 6c23f73a799a..45a64ae963ee 100644
--- a/include/linux/sunrpc/sched.h
+++ b/include/linux/sunrpc/sched.h
@@ -86,6 +86,12 @@ struct rpc_task {
86 struct work_struct tk_work; /* Async task work queue */ 86 struct work_struct tk_work; /* Async task work queue */
87 struct rpc_wait tk_wait; /* RPC wait */ 87 struct rpc_wait tk_wait; /* RPC wait */
88 } u; 88 } u;
89
90 unsigned short tk_timeouts; /* maj timeouts */
91 size_t tk_bytes_sent; /* total bytes sent */
92 unsigned long tk_start; /* RPC task init timestamp */
93 long tk_rtt; /* round-trip time (jiffies) */
94
89#ifdef RPC_DEBUG 95#ifdef RPC_DEBUG
90 unsigned short tk_pid; /* debugging aid */ 96 unsigned short tk_pid; /* debugging aid */
91#endif 97#endif
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index cad7efe2cb22..84eb5b4565fc 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -996,6 +996,8 @@ call_timeout(struct rpc_task *task)
996 } 996 }
997 997
998 dprintk("RPC: %4d call_timeout (major)\n", task->tk_pid); 998 dprintk("RPC: %4d call_timeout (major)\n", task->tk_pid);
999 task->tk_timeouts++;
1000
999 if (RPC_IS_SOFT(task)) { 1001 if (RPC_IS_SOFT(task)) {
1000 printk(KERN_NOTICE "%s: server %s not responding, timed out\n", 1002 printk(KERN_NOTICE "%s: server %s not responding, timed out\n",
1001 clnt->cl_protname, clnt->cl_server); 1003 clnt->cl_protname, clnt->cl_server);
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
index aa0449dcd8e5..cd51b5468332 100644
--- a/net/sunrpc/sched.c
+++ b/net/sunrpc/sched.c
@@ -817,6 +817,9 @@ void rpc_init_task(struct rpc_task *task, struct rpc_clnt *clnt, int flags, cons
817 817
818 BUG_ON(task->tk_ops == NULL); 818 BUG_ON(task->tk_ops == NULL);
819 819
820 /* starting timestamp */
821 task->tk_start = jiffies;
822
820 dprintk("RPC: %4d new task procpid %d\n", task->tk_pid, 823 dprintk("RPC: %4d new task procpid %d\n", task->tk_pid,
821 current->pid); 824 current->pid);
822} 825}
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 93a0a3ca0d5f..c6241976a6ee 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -648,6 +648,8 @@ void xprt_complete_rqst(struct rpc_task *task, int copied)
648 task->tk_pid, ntohl(req->rq_xid), copied); 648 task->tk_pid, ntohl(req->rq_xid), copied);
649 649
650 task->tk_xprt->stat.recvs++; 650 task->tk_xprt->stat.recvs++;
651 task->tk_rtt = (long)jiffies - req->rq_xtime;
652
651 list_del_init(&req->rq_list); 653 list_del_init(&req->rq_list);
652 req->rq_received = req->rq_private_buf.len = copied; 654 req->rq_received = req->rq_private_buf.len = copied;
653 rpc_wake_up_task(task); 655 rpc_wake_up_task(task);
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 6766b7f1ecf9..4b4e7dfdff14 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -382,6 +382,7 @@ static int xs_tcp_send_request(struct rpc_task *task)
382 /* If we've sent the entire packet, immediately 382 /* If we've sent the entire packet, immediately
383 * reset the count of bytes sent. */ 383 * reset the count of bytes sent. */
384 req->rq_bytes_sent += status; 384 req->rq_bytes_sent += status;
385 task->tk_bytes_sent += status;
385 if (likely(req->rq_bytes_sent >= req->rq_slen)) { 386 if (likely(req->rq_bytes_sent >= req->rq_slen)) {
386 req->rq_bytes_sent = 0; 387 req->rq_bytes_sent = 0;
387 return 0; 388 return 0;