sunrpc: add rpc_count_iostats_idx
authorWeston Andros Adamson <dros@primarydata.com>
Tue, 24 Jun 2014 14:59:52 +0000 (10:59 -0400)
committerTom Haynes <loghyr@primarydata.com>
Tue, 3 Feb 2015 19:06:38 +0000 (11:06 -0800)
Add a call to tally stats for a task under a different statsidx than
what's contained in the task structure.

This is needed to properly account for pnfs reads/writes when the
DS nfs version != the MDS version.

Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Tom Haynes <Thomas.Haynes@primarydata.com>
include/linux/sunrpc/metrics.h
net/sunrpc/stats.c

index eecb5a71e6c0e4362a502a608ebfa179c975f808..89f2ca178873483b79944eb43e0dfb55628ff8a5 100644 (file)
@@ -79,6 +79,8 @@ struct rpc_clnt;
 struct rpc_iostats *   rpc_alloc_iostats(struct rpc_clnt *);
 void                   rpc_count_iostats(const struct rpc_task *,
                                          struct rpc_iostats *);
+void                   rpc_count_iostats_metrics(const struct rpc_task *,
+                                         struct rpc_iostats *);
 void                   rpc_print_iostats(struct seq_file *, struct rpc_clnt *);
 void                   rpc_free_iostats(struct rpc_iostats *);
 
index 9711a155bc50071995402518d1ddd56a78b24a2a..2ecb994314c11b9807a9b20df8d47e7836ec3801 100644 (file)
@@ -140,22 +140,20 @@ void rpc_free_iostats(struct rpc_iostats *stats)
 EXPORT_SYMBOL_GPL(rpc_free_iostats);
 
 /**
- * rpc_count_iostats - tally up per-task stats
+ * rpc_count_iostats_metrics - tally up per-task stats
  * @task: completed rpc_task
- * @stats: array of stat structures
+ * @op_metrics: stat structure for OP that will accumulate stats from @task
  */
-void rpc_count_iostats(const struct rpc_task *task, struct rpc_iostats *stats)
+void rpc_count_iostats_metrics(const struct rpc_task *task,
+                              struct rpc_iostats *op_metrics)
 {
        struct rpc_rqst *req = task->tk_rqstp;
-       struct rpc_iostats *op_metrics;
        ktime_t delta, now;
 
-       if (!stats || !req)
+       if (!op_metrics || !req)
                return;
 
        now = ktime_get();
-       op_metrics = &stats[task->tk_msg.rpc_proc->p_statidx];
-
        spin_lock(&op_metrics->om_lock);
 
        op_metrics->om_ops++;
@@ -175,6 +173,20 @@ void rpc_count_iostats(const struct rpc_task *task, struct rpc_iostats *stats)
 
        spin_unlock(&op_metrics->om_lock);
 }
+EXPORT_SYMBOL_GPL(rpc_count_iostats_metrics);
+
+/**
+ * rpc_count_iostats - tally up per-task stats
+ * @task: completed rpc_task
+ * @stats: array of stat structures
+ *
+ * Uses the statidx from @task
+ */
+void rpc_count_iostats(const struct rpc_task *task, struct rpc_iostats *stats)
+{
+       rpc_count_iostats_metrics(task,
+                                 &stats[task->tk_msg.rpc_proc->p_statidx]);
+}
 EXPORT_SYMBOL_GPL(rpc_count_iostats);
 
 static void _print_name(struct seq_file *seq, unsigned int op,