From ba30acc1bbfb1c7c9d1ccb75a92fef2fd8311676 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 20 Mar 2006 13:44:17 -0500 Subject: [PATCH] --- yaml --- r: 23883 b: refs/heads/master c: ef759a2e54ed434b2f72b52a14edecd6d4eadf74 h: refs/heads/master i: 23881: b19178f9b8a627ecef898c29dfb850ea5c684bf5 23879: ce7218c1652d8ec6dc9f83feb282d4320b472d0c v: v3 --- [refs] | 2 +- trunk/include/linux/sunrpc/sched.h | 6 ++++++ trunk/net/sunrpc/clnt.c | 2 ++ trunk/net/sunrpc/sched.c | 3 +++ trunk/net/sunrpc/xprt.c | 2 ++ trunk/net/sunrpc/xprtsock.c | 1 + 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index bc5feb0a96c9..ecbbd6373028 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 262ca07de4d7f1bff20361c1353bb14b3607afb2 +refs/heads/master: ef759a2e54ed434b2f72b52a14edecd6d4eadf74 diff --git a/trunk/include/linux/sunrpc/sched.h b/trunk/include/linux/sunrpc/sched.h index 6c23f73a799a..45a64ae963ee 100644 --- a/trunk/include/linux/sunrpc/sched.h +++ b/trunk/include/linux/sunrpc/sched.h @@ -86,6 +86,12 @@ struct rpc_task { struct work_struct tk_work; /* Async task work queue */ struct rpc_wait tk_wait; /* RPC wait */ } u; + + unsigned short tk_timeouts; /* maj timeouts */ + size_t tk_bytes_sent; /* total bytes sent */ + unsigned long tk_start; /* RPC task init timestamp */ + long tk_rtt; /* round-trip time (jiffies) */ + #ifdef RPC_DEBUG unsigned short tk_pid; /* debugging aid */ #endif diff --git a/trunk/net/sunrpc/clnt.c b/trunk/net/sunrpc/clnt.c index cad7efe2cb22..84eb5b4565fc 100644 --- a/trunk/net/sunrpc/clnt.c +++ b/trunk/net/sunrpc/clnt.c @@ -996,6 +996,8 @@ call_timeout(struct rpc_task *task) } dprintk("RPC: %4d call_timeout (major)\n", task->tk_pid); + task->tk_timeouts++; + if (RPC_IS_SOFT(task)) { printk(KERN_NOTICE "%s: server %s not responding, timed out\n", clnt->cl_protname, clnt->cl_server); diff --git a/trunk/net/sunrpc/sched.c b/trunk/net/sunrpc/sched.c index aa0449dcd8e5..cd51b5468332 100644 --- a/trunk/net/sunrpc/sched.c +++ b/trunk/net/sunrpc/sched.c @@ -817,6 +817,9 @@ void rpc_init_task(struct rpc_task *task, struct rpc_clnt *clnt, int flags, cons BUG_ON(task->tk_ops == NULL); + /* starting timestamp */ + task->tk_start = jiffies; + dprintk("RPC: %4d new task procpid %d\n", task->tk_pid, current->pid); } diff --git a/trunk/net/sunrpc/xprt.c b/trunk/net/sunrpc/xprt.c index 93a0a3ca0d5f..c6241976a6ee 100644 --- a/trunk/net/sunrpc/xprt.c +++ b/trunk/net/sunrpc/xprt.c @@ -648,6 +648,8 @@ void xprt_complete_rqst(struct rpc_task *task, int copied) task->tk_pid, ntohl(req->rq_xid), copied); task->tk_xprt->stat.recvs++; + task->tk_rtt = (long)jiffies - req->rq_xtime; + list_del_init(&req->rq_list); req->rq_received = req->rq_private_buf.len = copied; rpc_wake_up_task(task); diff --git a/trunk/net/sunrpc/xprtsock.c b/trunk/net/sunrpc/xprtsock.c index 6766b7f1ecf9..4b4e7dfdff14 100644 --- a/trunk/net/sunrpc/xprtsock.c +++ b/trunk/net/sunrpc/xprtsock.c @@ -382,6 +382,7 @@ static int xs_tcp_send_request(struct rpc_task *task) /* If we've sent the entire packet, immediately * reset the count of bytes sent. */ req->rq_bytes_sent += status; + task->tk_bytes_sent += status; if (likely(req->rq_bytes_sent >= req->rq_slen)) { req->rq_bytes_sent = 0; return 0;