X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fsunrpc%2Fstats.c;h=4979f226e285f57117cc8daa71667f64549b0b7a;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=15c2db26767bc5e5b6848d904078c9b0975dcfa4;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/net/sunrpc/stats.c b/net/sunrpc/stats.c index 15c2db267..4979f226e 100644 --- a/net/sunrpc/stats.c +++ b/net/sunrpc/stats.c @@ -21,7 +21,6 @@ #include #include #include -#include #define RPCDBG_FACILITY RPCDBG_MISC @@ -107,126 +106,11 @@ void svc_seq_show(struct seq_file *seq, const struct svc_stat *statp) { } } -/** - * rpc_alloc_iostats - allocate an rpc_iostats structure - * @clnt: RPC program, version, and xprt - * - */ -struct rpc_iostats *rpc_alloc_iostats(struct rpc_clnt *clnt) -{ - unsigned int ops = clnt->cl_maxproc; - size_t size = ops * sizeof(struct rpc_iostats); - struct rpc_iostats *new; - - new = kmalloc(size, GFP_KERNEL); - if (new) - memset(new, 0 , size); - return new; -} -EXPORT_SYMBOL(rpc_alloc_iostats); - -/** - * rpc_free_iostats - release an rpc_iostats structure - * @stats: doomed rpc_iostats structure - * - */ -void rpc_free_iostats(struct rpc_iostats *stats) -{ - kfree(stats); -} -EXPORT_SYMBOL(rpc_free_iostats); - -/** - * rpc_count_iostats - tally up per-task stats - * @task: completed rpc_task - * - * Relies on the caller for serialization. - */ -void rpc_count_iostats(struct rpc_task *task) -{ - struct rpc_rqst *req = task->tk_rqstp; - struct rpc_iostats *stats = task->tk_client->cl_metrics; - struct rpc_iostats *op_metrics; - long rtt, execute, queue; - - if (!stats || !req) - return; - op_metrics = &stats[task->tk_msg.rpc_proc->p_statidx]; - - op_metrics->om_ops++; - op_metrics->om_ntrans += req->rq_ntrans; - op_metrics->om_timeouts += task->tk_timeouts; - - op_metrics->om_bytes_sent += task->tk_bytes_sent; - op_metrics->om_bytes_recv += req->rq_received; - - queue = (long)req->rq_xtime - task->tk_start; - if (queue < 0) - queue = -queue; - op_metrics->om_queue += queue; - - rtt = task->tk_rtt; - if (rtt < 0) - rtt = -rtt; - op_metrics->om_rtt += rtt; - - execute = (long)jiffies - task->tk_start; - if (execute < 0) - execute = -execute; - op_metrics->om_execute += execute; -} - -static void _print_name(struct seq_file *seq, unsigned int op, - struct rpc_procinfo *procs) -{ - if (procs[op].p_name) - seq_printf(seq, "\t%12s: ", procs[op].p_name); - else if (op == 0) - seq_printf(seq, "\t NULL: "); - else - seq_printf(seq, "\t%12u: ", op); -} - -#define MILLISECS_PER_JIFFY (1000 / HZ) - -void rpc_print_iostats(struct seq_file *seq, struct rpc_clnt *clnt) -{ - struct rpc_iostats *stats = clnt->cl_metrics; - struct rpc_xprt *xprt = clnt->cl_xprt; - unsigned int op, maxproc = clnt->cl_maxproc; - - if (!stats) - return; - - seq_printf(seq, "\tRPC iostats version: %s ", RPC_IOSTATS_VERS); - seq_printf(seq, "p/v: %u/%u (%s)\n", - clnt->cl_prog, clnt->cl_vers, clnt->cl_protname); - - if (xprt) - xprt->ops->print_stats(xprt, seq); - - seq_printf(seq, "\tper-op statistics\n"); - for (op = 0; op < maxproc; op++) { - struct rpc_iostats *metrics = &stats[op]; - _print_name(seq, op, clnt->cl_procinfo); - seq_printf(seq, "%lu %lu %lu %Lu %Lu %Lu %Lu %Lu\n", - metrics->om_ops, - metrics->om_ntrans, - metrics->om_timeouts, - metrics->om_bytes_sent, - metrics->om_bytes_recv, - metrics->om_queue * MILLISECS_PER_JIFFY, - metrics->om_rtt * MILLISECS_PER_JIFFY, - metrics->om_execute * MILLISECS_PER_JIFFY); - } -} -EXPORT_SYMBOL(rpc_print_iostats); - /* * Register/unregister RPC proc files */ static inline struct proc_dir_entry * -do_register(const char *name, void *data, const struct file_operations *fops) +do_register(const char *name, void *data, struct file_operations *fops) { struct proc_dir_entry *ent; @@ -254,7 +138,7 @@ rpc_proc_unregister(const char *name) } struct proc_dir_entry * -svc_proc_register(struct svc_stat *statp, const struct file_operations *fops) +svc_proc_register(struct svc_stat *statp, struct file_operations *fops) { return do_register(statp->program->pg_name, statp, fops); }