sunrpc: add rpc_count_iostats_idx
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>
This commit is contained in:
parent
16cecdf620
commit
840210fc48
@ -79,6 +79,8 @@ struct rpc_clnt;
|
|||||||
struct rpc_iostats * rpc_alloc_iostats(struct rpc_clnt *);
|
struct rpc_iostats * rpc_alloc_iostats(struct rpc_clnt *);
|
||||||
void rpc_count_iostats(const struct rpc_task *,
|
void rpc_count_iostats(const struct rpc_task *,
|
||||||
struct rpc_iostats *);
|
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_print_iostats(struct seq_file *, struct rpc_clnt *);
|
||||||
void rpc_free_iostats(struct rpc_iostats *);
|
void rpc_free_iostats(struct rpc_iostats *);
|
||||||
|
|
||||||
|
@ -140,22 +140,20 @@ void rpc_free_iostats(struct rpc_iostats *stats)
|
|||||||
EXPORT_SYMBOL_GPL(rpc_free_iostats);
|
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
|
* @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_rqst *req = task->tk_rqstp;
|
||||||
struct rpc_iostats *op_metrics;
|
|
||||||
ktime_t delta, now;
|
ktime_t delta, now;
|
||||||
|
|
||||||
if (!stats || !req)
|
if (!op_metrics || !req)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
now = ktime_get();
|
now = ktime_get();
|
||||||
op_metrics = &stats[task->tk_msg.rpc_proc->p_statidx];
|
|
||||||
|
|
||||||
spin_lock(&op_metrics->om_lock);
|
spin_lock(&op_metrics->om_lock);
|
||||||
|
|
||||||
op_metrics->om_ops++;
|
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);
|
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);
|
EXPORT_SYMBOL_GPL(rpc_count_iostats);
|
||||||
|
|
||||||
static void _print_name(struct seq_file *seq, unsigned int op,
|
static void _print_name(struct seq_file *seq, unsigned int op,
|
||||||
|
Loading…
Reference in New Issue
Block a user