aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sunrpc
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2014-11-08 20:15:09 -0500
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2014-11-25 16:22:15 -0500
commitedef1297f33a4546559d905457b435a5ea160bab (patch)
treec14a3b6d62e72cb8b46a3a8cc09679b343831b49 /include/linux/sunrpc
parentLinux 3.18-rc6 (diff)
downloadlinux-dev-edef1297f33a4546559d905457b435a5ea160bab.tar.xz
linux-dev-edef1297f33a4546559d905457b435a5ea160bab.zip
SUNRPC: serialize iostats updates
Occasionally mountstats reports a negative retransmission rate. Ensure that two RPCs completing concurrently don't confuse the sums in the transport's op_metrics array. Since pNFS filelayout can invoke rpc_count_iostats() on another transport from xprt_release(), we can't rely on simply holding the transport_lock in xprt_release(). There's nothing for it but hard serialization. One spin lock per RPC operation should make this as painless as it can be. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'include/linux/sunrpc')
-rw-r--r--include/linux/sunrpc/metrics.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/sunrpc/metrics.h b/include/linux/sunrpc/metrics.h
index 1565bbe86d51..eecb5a71e6c0 100644
--- a/include/linux/sunrpc/metrics.h
+++ b/include/linux/sunrpc/metrics.h
@@ -27,10 +27,13 @@
#include <linux/seq_file.h>
#include <linux/ktime.h>
+#include <linux/spinlock.h>
#define RPC_IOSTATS_VERS "1.0"
struct rpc_iostats {
+ spinlock_t om_lock;
+
/*
* These counters give an idea about how many request
* transmissions are required, on average, to complete that