Repository: prometheus/procfs
Pull request #562 (2023-08-28 08:21:54)

fix code comment error (#561)


Patch:
diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
index 433f71b..a619a73 100644
--- a/.github/workflows/golangci-lint.yml
+++ b/.github/workflows/golangci-lint.yml
@@ -29,4 +29,4 @@ jobs:
       - name: Lint
         uses: golangci/golangci-lint-action@v3.4.0
         with:
-          version: v1.53.3
+          version: v1.54.2
diff --git a/Makefile.common b/Makefile.common
index 0ce7ea4..062a281 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -61,7 +61,7 @@ PROMU_URL     := https://github.com/prometheus/promu/releases/download/v$(PROMU_
 SKIP_GOLANGCI_LINT :=
 GOLANGCI_LINT :=
 GOLANGCI_LINT_OPTS ?=
-GOLANGCI_LINT_VERSION ?= v1.53.3
+GOLANGCI_LINT_VERSION ?= v1.54.2
 # golangci-lint only supports linux, darwin and windows platforms on i386/amd64.
 # windows isn't included here because of the path separator being different.
 ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
diff --git a/go.mod b/go.mod
index 8d937ab..95cd65f 100644
--- a/go.mod
+++ b/go.mod
@@ -5,5 +5,5 @@ go 1.19
 require (
 	github.com/google/go-cmp v0.5.9
 	golang.org/x/sync v0.3.0
-	golang.org/x/sys v0.10.0
+	golang.org/x/sys v0.11.0
 )
diff --git a/go.sum b/go.sum
index f484097..4d2f8b9 100644
--- a/go.sum
+++ b/go.sum
@@ -2,5 +2,5 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
 golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
-golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
+golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
diff --git a/nfs/nfs.go b/nfs/nfs.go
index 7292102..c0d3a11 100644
--- a/nfs/nfs.go
+++ b/nfs/nfs.go
@@ -201,51 +201,56 @@ type ServerV4Stats struct {
 // V4Ops models the "proc4ops" line: NFSv4 operations
 // Variable list.
 // See:
-// - v4.0 https://tools.ietf.org/html/rfc3010 (38 operations)
+// - v4.0 https://tools.ietf.org/html/rfc3010 (38/39 operations)
+//   - nfs == v2.5.x 38 field : https://elixir.bootlin.com/linux/v2.5.75/source/include/linux/nfs4.h#L52
+//   - nfs >= v2.6.x 39 field : https://elixir.bootlin.com/linux/v2.6.39.4/source/include/linux/nfs4.h#L233
+//
 // - v4.1 https://tools.ietf.org/html/rfc5661 (58 operations)
 // - v4.2 https://tools.ietf.org/html/draft-ietf-nfsv4-minorversion2-41 (71 operations)
 //
 //nolint:godot
 type V4Ops struct {
 	//Values       uint64 // Variable depending on v4.x sub-version. TODO: Will this always at least include the fields in this struct?
-	Op0Unused    uint64
-	Op1Unused    uint64
-	Op2Future    uint64
-	Access       uint64
-	Close        uint64
-	Commit       uint64
-	Create       uint64
-	DelegPurge   uint64
-	DelegReturn  uint64
-	GetAttr      uint64
-	GetFH        uint64
-	Link         uint64
-	Lock         uint64
-	Lockt        uint64
-	Locku        uint64
-	Lookup       uint64
-	LookupRoot   uint64
-	Nverify      uint64
-	Open         uint64
-	OpenAttr     uint64
-	OpenConfirm  uint64
-	OpenDgrd     uint64
-	PutFH        uint64
-	PutPubFH     uint64
-	PutRootFH    uint64
-	Read         uint64
-	ReadDir      uint64
-	ReadLink     uint64
-	Remove       uint64
-	Rename       uint64
-	Renew        uint64
-	RestoreFH    uint64
-	SaveFH       uint64
-	SecInfo      uint64
-	SetAttr      uint64
-	Verify       uint64
-	Write        uint64
-	RelLockOwner uint64
+	Op0Unused          uint64
+	Op1Unused          uint64
+	Op2Future          uint64
+	Access             uint64
+	Close              uint64
+	Commit             uint64
+	Create             uint64
+	DelegPurge         uint64
+	DelegReturn        uint64
+	GetAttr            uint64
+	GetFH              uint64
+	Link               uint64
+	Lock               uint64
+	Lockt              uint64
+	Locku              uint64
+	Lookup             uint64
+	LookupRoot         uint64
+	Nverify            uint64
+	Open               uint64
+	OpenAttr           uint64
+	OpenConfirm        uint64
+	OpenDgrd           uint64
+	PutFH              uint64
+	PutPubFH           uint64
+	PutRootFH          uint64
+	Read               uint64
+	ReadDir            uint64
+	ReadLink           uint64
+	Remove             uint64
+	Rename             uint64
+	Renew              uint64
+	RestoreFH          uint64
+	SaveFH             uint64
+	SecInfo            uint64
+	SetAttr            uint64
+	SetClientId        uint64
+	SetClientIdConfirm uint64
+	Verify             uint64
+	Write              uint64
+	RelLockOwner       uint64
 }
 
 // ClientRPCStats models all stats from /proc/net/rpc/nfs.
diff --git a/nfs/parse.go b/nfs/parse.go
index 5e78c54..15f8c35 100644
--- a/nfs/parse.go
+++ b/nfs/parse.go
@@ -272,45 +272,53 @@ func parseV4Ops(v []uint64) (V4Ops, error) {
 		return V4Ops{}, fmt.Errorf("invalid V4Ops line %q", v)
 	}
 
+	// nfs v2.5.x 39field and >=v2.6.x 40 field;
+	v40 := uint64(0)
+	if values > 39 {
+		v40 = v[40]
+	}
+
 	stats := V4Ops{
-		Op0Unused:    v[1],
-		Op1Unused:    v[2],
-		Op2Future:    v[3],
-		Access:       v[4],
-		Close:        v[5],
-		Commit:       v[6],
-		Create:       v[7],
-		DelegPurge:   v[8],
-		DelegReturn:  v[9],
-		GetAttr:      v[10],
-		GetFH:        v[11],
-		Link:         v[12],
-		Lock:         v[13],
-		Lockt:        v[14],
-		Locku:        v[15],
-		Lookup:       v[16],
-		LookupRoot:   v[17],
-		Nverify:      v[18],
-		Open:         v[19],
-		OpenAttr:     v[20],
-		OpenConfirm:  v[21],
-		OpenDgrd:     v[22],
-		PutFH:        v[23],
-		PutPubFH:     v[24],
-		PutRootFH:    v[25],
-		Read:         v[26],
-		ReadDir:      v[27],
-		ReadLink:     v[28],
-		Remove:       v[29],
-		Rename:       v[30],
-		Renew:        v[31],
-		RestoreFH:    v[32],
-		SaveFH:       v[33],
-		SecInfo:      v[34],
-		SetAttr:      v[35],
-		Verify:       v[36],
-		Write:        v[37],
-		RelLockOwner: v[38],
+		Op0Unused:          v[1],
+		Op1Unused:          v[2],
+		Op2Future:          v[3],
+		Access:             v[4],
+		Close:              v[5],
+		Commit:             v[6],
+		Create:             v[7],
+		DelegPurge:         v[8],
+		DelegReturn:        v[9],
+		GetAttr:            v[10],
+		GetFH:              v[11],
+		Link:               v[12],
+		Lock:               v[13],
+		Lockt:              v[14],
+		Locku:              v[15],
+		Lookup:             v[16],
+		LookupRoot:         v[17],
+		Nverify:            v[18],
+		Open:               v[19],
+		OpenAttr:           v[20],
+		OpenConfirm:        v[21],
+		OpenDgrd:           v[22],
+		PutFH:              v[23],
+		PutPubFH:           v[24],
+		PutRootFH:          v[25],
+		Read:               v[26],
+		ReadDir:            v[27],
+		ReadLink:           v[28],
+		Remove:             v[29],
+		Rename:             v[30],
+		Renew:              v[31],
+		RestoreFH:          v[32],
+		SaveFH:             v[33],
+		SecInfo:            v[34],
+		SetAttr:            v[35],
+		SetClientId:        v[36],
+		SetClientIdConfirm: v[37],
+		Verify:             v[38],
+		Write:              v[39],
+		RelLockOwner:       v40,
 	}
 
 	return stats, nil
diff --git a/proc_status.go b/proc_status.go
index c055d07..3b8b3e5 100644
--- a/proc_status.go
+++ b/proc_status.go
@@ -23,7 +23,7 @@ import (
 )
 
 // ProcStatus provides status information about the process,
-// read from /proc/[pid]/stat.
+// read from /proc/[pid]/status.
 type ProcStatus struct {
 	// The process ID.
 	PID int


Test patch:
diff --git a/nfs/parse_nfsd_test.go b/nfs/parse_nfsd_test.go
index b09b3b5..449eba2 100644
--- a/nfs/parse_nfsd_test.go
+++ b/nfs/parse_nfsd_test.go
@@ -33,7 +33,7 @@ func TestNewNFSdServerRPCStats(t *testing.T) {
 			content: "invalid",
 			invalid: true,
 		}, {
-			name: "good file",
+			name: "good file, proc4ops 72",
 			content: `rc 0 6 18622
 fh 0 0 0 0 0
 io 157286400 0
@@ -134,44 +134,476 @@ proc4ops 72 0 0 0 1098 2 0 0 0 0 8179 5896 0 0 0 0 5900 0 0 2 0 2 0 9609 0 2 150
 					Compound: 10853,
 				},
 				V4Ops: nfs.V4Ops{
-					Op0Unused:    0,
-					Op1Unused:    0,
-					Op2Future:    0,
-					Access:       1098,
-					Close:        2,
-					Commit:       0,
-					Create:       0,
-					DelegPurge:   0,
-					DelegReturn:  0,
-					GetAttr:      8179,
-					GetFH:        5896,
-					Link:         0,
-					Lock:         0,
-					Lockt:        0,
-					Locku:        0,
-					Lookup:       5900,
-					LookupRoot:   0,
-					Nverify:      0,
-					Open:         2,
-					OpenAttr:     0,
-					OpenConfirm:  2,
-					OpenDgrd:     0,
-					PutFH:        9609,
-					PutPubFH:     0,
-					PutRootFH:    2,
-					Read:         150,
-					ReadDir:      1272,
-					ReadLink:     0,
-					Remove:       0,
-					Rename:       0,
-					Renew:        1236,
-					RestoreFH:    0,
-					SaveFH:       0,
-					SecInfo:      0,
-					SetAttr:      0,
-					Verify:       3,
-					Write:        3,
-					RelLockOwner: 0,
+					Op0Unused:          0,
+					Op1Unused:          0,
+					Op2Future:          0,
+					Access:             1098,
+					Close:              2,
+					Commit:             0,
+					Create:             0,
+					DelegPurge:         0,
+					DelegReturn:        0,
+					GetAttr:            8179,
+					GetFH:              5896,
+					Link:               0,
+					Lock:               0,
+					Lockt:              0,
+					Locku:              0,
+					Lookup:             5900,
+					LookupRoot:         0,
+					Nverify:            0,
+					Open:               2,
+					OpenAttr:           0,
+					OpenConfirm:        2,
+					OpenDgrd:           0,
+					PutFH:              9609,
+					PutPubFH:           0,
+					PutRootFH:          2,
+					Read:               150,
+					ReadDir:            1272,
+					ReadLink:           0,
+					Remove:             0,
+					Rename:             0,
+					Renew:              1236,
+					RestoreFH:          0,
+					SaveFH:             0,
+					SecInfo:            0,
+					SetAttr:            0,
+					SetClientId:        3,
+					SetClientIdConfirm: 3,
+					Verify:             0,
+					Write:              0,
+					RelLockOwner:       0,
+				},
+			},
+		}, {
+			name: "good file, proc4ops 40",
+			content: `rc 0 25020854 19157796
+fh 276 0 0 0 0
+io 899844043 2470085989
+th 1024 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ra 2048 4250593 118232 55926 31504 20253 13815 9875 7028 5546 3991 171551
+net 44179842 1 44179026 3092
+rpc 44177753 0 0 0 0
+proc2 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+proc3 22 747 7259760 1383711 1570520 3464939 8436 4688207 21668847 1173194 6457 2127 172 213538 1253 556401 14950 1101 56245 90790 742 367 1989658
+proc4 2 0 0
+proc4ops 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0`,
+			stats: &nfs.ServerRPCStats{
+				ReplyCache: nfs.ReplyCache{
+					Hits:    0,
+					Misses:  25020854,
+					NoCache: 19157796,
+				},
+				FileHandles: nfs.FileHandles{
+					Stale:        276,
+					TotalLookups: 0,
+					AnonLookups:  0,
+					DirNoCache:   0,
+					NoDirNoCache: 0,
+				},
+				InputOutput: nfs.InputOutput{
+					Read:  899844043,
+					Write: 2470085989,
+				},
+				Threads: nfs.Threads{
+					Threads: 1024,
+					FullCnt: 0,
+				},
+				ReadAheadCache: nfs.ReadAheadCache{
+					CacheSize:      2048,
+					CacheHistogram: []uint64{4250593, 118232, 55926, 31504, 20253, 13815, 9875, 7028, 5546, 3991},
+					NotFound:       171551,
+				},
+				Network: nfs.Network{
+					NetCount:   44179842,
+					UDPCount:   1,
+					TCPCount:   44179026,
+					TCPConnect: 3092,
+				},
+				ServerRPC: nfs.ServerRPC{
+					RPCCount: 44177753,
+					BadCnt:   0,
+					BadFmt:   0,
+					BadAuth:  0,
+					BadcInt:  0,
+				},
+				V2Stats: nfs.V2Stats{
+					Null:     0,
+					GetAttr:  0,
+					SetAttr:  0,
+					Root:     0,
+					Lookup:   0,
+					ReadLink: 0,
+					Read:     0,
+					WrCache:  0,
+					Write:    0,
+					Create:   0,
+					Remove:   0,
+					Rename:   0,
+					Link:     0,
+					SymLink:  0,
+					MkDir:    0,
+					RmDir:    0,
+					ReadDir:  0,
+					FsStat:   0,
+				},
+				V3Stats: nfs.V3Stats{
+					Null:        747,
+					GetAttr:     7259760,
+					SetAttr:     1383711,
+					Lookup:      1570520,
+					Access:      3464939,
+					ReadLink:    8436,
+					Read:        4688207,
+					Write:       21668847,
+					Create:      1173194,
+					MkDir:       6457,
+					SymLink:     2127,
+					MkNod:       172,
+					Remove:      213538,
+					RmDir:       1253,
+					Rename:      556401,
+					Link:        14950,
+					ReadDir:     1101,
+					ReadDirPlus: 56245,
+					FsStat:      90790,
+					FsInfo:      742,
+					PathConf:    367,
+					Commit:      1989658,
+				},
+				ServerV4Stats: nfs.ServerV4Stats{
+					Null:     0,
+					Compound: 0,
+				},
+				V4Ops: nfs.V4Ops{
+					Op0Unused:          0,
+					Op1Unused:          0,
+					Op2Future:          0,
+					Access:             0,
+					Close:              0,
+					Commit:             0,
+					Create:             0,
+					DelegPurge:         0,
+					DelegReturn:        0,
+					GetAttr:            0,
+					GetFH:              0,
+					Link:               0,
+					Lock:               0,
+					Lockt:              0,
+					Locku:              0,
+					Lookup:             0,
+					LookupRoot:         0,
+					Nverify:            0,
+					Open:               0,
+					OpenAttr:           0,
+					OpenConfirm:        0,
+					OpenDgrd:           0,
+					PutFH:              0,
+					PutPubFH:           0,
+					PutRootFH:          0,
+					Read:               0,
+					ReadDir:            0,
+					ReadLink:           0,
+					Remove:             0,
+					Rename:             0,
+					Renew:              0,
+					RestoreFH:          0,
+					SaveFH:             0,
+					SecInfo:            0,
+					SetAttr:            0,
+					SetClientId:        0,
+					SetClientIdConfirm: 0,
+					Verify:             0,
+					Write:              0,
+					RelLockOwner:       0,
+				},
+			},
+		},
+		{
+			name: "good file, proc4ops 59",
+			content: `rc 0 268 742119
+fh 0 0 0 0 0
+io 2476981939 0
+th 8 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ra 32 30104 0 0 0 0 0 0 0 0 0 71174
+net 742701 314 742393 10103960
+rpc 742406 310 310 0 0
+proc2 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+proc3 22 105 71158 0 175642 184711 17103 101277 0 0 0 0 0 0 0 0 0 0 8916 102 202 0 0
+proc4 2 101 182991
+proc4ops 59 0 0 0 18112 8341 0 0 0 3239 71595 11834 0 0 0 0 107097 0 0 8344 0 5100 0 181968 0 235 5735 4406 0 0 0 652 8342 8344 0 0 134 134 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0`,
+			stats: &nfs.ServerRPCStats{
+				ReplyCache: nfs.ReplyCache{
+					Hits:    0,
+					Misses:  268,
+					NoCache: 742119,
+				},
+				FileHandles: nfs.FileHandles{
+					Stale:        0,
+					TotalLookups: 0,
+					AnonLookups:  0,
+					DirNoCache:   0,
+					NoDirNoCache: 0,
+				},
+				InputOutput: nfs.InputOutput{
+					Read:  2476981939,
+					Write: 0,
+				},
+				Threads: nfs.Threads{
+					Threads: 8,
+					FullCnt: 0,
+				},
+				ReadAheadCache: nfs.ReadAheadCache{
+					CacheSize:      32,
+					CacheHistogram: []uint64{30104, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+					NotFound:       71174,
+				},
+				Network: nfs.Network{
+					NetCount:   742701,
+					UDPCount:   314,
+					TCPCount:   742393,
+					TCPConnect: 10103960,
+				},
+				ServerRPC: nfs.ServerRPC{
+					RPCCount: 742406,
+					BadCnt:   310,
+					BadFmt:   310,
+					BadAuth:  0,
+					BadcInt:  0,
+				},
+				V2Stats: nfs.V2Stats{
+					Null:     0,
+					GetAttr:  0,
+					SetAttr:  0,
+					Root:     0,
+					Lookup:   0,
+					ReadLink: 0,
+					Read:     0,
+					WrCache:  0,
+					Write:    0,
+					Create:   0,
+					Remove:   0,
+					Rename:   0,
+					Link:     0,
+					SymLink:  0,
+					MkDir:    0,
+					RmDir:    0,
+					ReadDir:  0,
+					FsStat:   0,
+				},
+				V3Stats: nfs.V3Stats{
+					Null:        105,
+					GetAttr:     71158,
+					SetAttr:     0,
+					Lookup:      175642,
+					Access:      184711,
+					ReadLink:    17103,
+					Read:        101277,
+					Write:       0,
+					Create:      0,
+					MkDir:       0,
+					SymLink:     0,
+					MkNod:       0,
+					Remove:      0,
+					RmDir:       0,
+					Rename:      0,
+					Link:        0,
+					ReadDir:     0,
+					ReadDirPlus: 8916,
+					FsStat:      102,
+					FsInfo:      202,
+					PathConf:    0,
+					Commit:      0,
+				},
+				ServerV4Stats: nfs.ServerV4Stats{
+					Null:     101,
+					Compound: 182991,
+				},
+				V4Ops: nfs.V4Ops{
+					Op0Unused:          0,
+					Op1Unused:          0,
+					Op2Future:          0,
+					Access:             18112,
+					Close:              8341,
+					Commit:             0,
+					Create:             0,
+					DelegPurge:         0,
+					DelegReturn:        3239,
+					GetAttr:            71595,
+					GetFH:              11834,
+					Link:               0,
+					Lock:               0,
+					Lockt:              0,
+					Locku:              0,
+					Lookup:             107097,
+					LookupRoot:         0,
+					Nverify:            0,
+					Open:               8344,
+					OpenAttr:           0,
+					OpenConfirm:        5100,
+					OpenDgrd:           0,
+					PutFH:              181968,
+					PutPubFH:           0,
+					PutRootFH:          235,
+					Read:               5735,
+					ReadDir:            4406,
+					ReadLink:           0,
+					Remove:             0,
+					Rename:             0,
+					Renew:              652,
+					RestoreFH:          8342,
+					SaveFH:             8344,
+					SecInfo:            0,
+					SetAttr:            0,
+					SetClientId:        134,
+					SetClientIdConfirm: 134,
+					Verify:             0,
+					Write:              0,
+					RelLockOwner:       0,
+				},
+			},
+		}, {
+			name: "good file, proc4ops 39",
+			content: `rc 0 25020854 19157796
+fh 276 0 0 0 0
+io 899844043 2470085989
+th 1024 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
+ra 2048 4250593 118232 55926 31504 20253 13815 9875 7028 5546 3991 171551
+net 44179842 1 44179026 3092
+rpc 44177753 0 0 0 0
+proc2 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+proc3 22 747 7259760 1383711 1570520 3464939 8436 4688207 21668847 1173194 6457 2127 172 213538 1253 556401 14950 1101 56245 90790 742 367 1989658
+proc4 2 0 0
+proc4ops 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39`,
+			stats: &nfs.ServerRPCStats{
+				ReplyCache: nfs.ReplyCache{
+					Hits:    0,
+					Misses:  25020854,
+					NoCache: 19157796,
+				},
+				FileHandles: nfs.FileHandles{
+					Stale:        276,
+					TotalLookups: 0,
+					AnonLookups:  0,
+					DirNoCache:   0,
+					NoDirNoCache: 0,
+				},
+				InputOutput: nfs.InputOutput{
+					Read:  899844043,
+					Write: 2470085989,
+				},
+				Threads: nfs.Threads{
+					Threads: 1024,
+					FullCnt: 0,
+				},
+				ReadAheadCache: nfs.ReadAheadCache{
+					CacheSize:      2048,
+					CacheHistogram: []uint64{4250593, 118232, 55926, 31504, 20253, 13815, 9875, 7028, 5546, 3991},
+					NotFound:       171551,
+				},
+				Network: nfs.Network{
+					NetCount:   44179842,
+					UDPCount:   1,
+					TCPCount:   44179026,
+					TCPConnect: 3092,
+				},
+				ServerRPC: nfs.ServerRPC{
+					RPCCount: 44177753,
+					BadCnt:   0,
+					BadFmt:   0,
+					BadAuth:  0,
+					BadcInt:  0,
+				},
+				V2Stats: nfs.V2Stats{
+					Null:     0,
+					GetAttr:  0,
+					SetAttr:  0,
+					Root:     0,
+					Lookup:   0,
+					ReadLink: 0,
+					Read:     0,
+					WrCache:  0,
+					Write:    0,
+					Create:   0,
+					Remove:   0,
+					Rename:   0,
+					Link:     0,
+					SymLink:  0,
+					MkDir:    0,
+					RmDir:    0,
+					ReadDir:  0,
+					FsStat:   0,
+				},
+				V3Stats: nfs.V3Stats{
+					Null:        747,
+					GetAttr:     7259760,
+					SetAttr:     1383711,
+					Lookup:      1570520,
+					Access:      3464939,
+					ReadLink:    8436,
+					Read:        4688207,
+					Write:       21668847,
+					Create:      1173194,
+					MkDir:       6457,
+					SymLink:     2127,
+					MkNod:       172,
+					Remove:      213538,
+					RmDir:       1253,
+					Rename:      556401,
+					Link:        14950,
+					ReadDir:     1101,
+					ReadDirPlus: 56245,
+					FsStat:      90790,
+					FsInfo:      742,
+					PathConf:    367,
+					Commit:      1989658,
+				},
+				ServerV4Stats: nfs.ServerV4Stats{
+					Null:     0,
+					Compound: 0,
+				},
+				V4Ops: nfs.V4Ops{
+					Op0Unused:          0,
+					Op1Unused:          0,
+					Op2Future:          0,
+					Access:             0,
+					Close:              0,
+					Commit:             0,
+					Create:             0,
+					DelegPurge:         0,
+					DelegReturn:        0,
+					GetAttr:            0,
+					GetFH:              0,
+					Link:               0,
+					Lock:               0,
+					Lockt:              0,
+					Locku:              0,
+					Lookup:             0,
+					LookupRoot:         0,
+					Nverify:            0,
+					Open:               0,
+					OpenAttr:           0,
+					OpenConfirm:        0,
+					OpenDgrd:           0,
+					PutFH:              0,
+					PutPubFH:           0,
+					PutRootFH:          0,
+					Read:               0,
+					ReadDir:            0,
+					ReadLink:           0,
+					Remove:             0,
+					Rename:             0,
+					Renew:              0,
+					RestoreFH:          0,
+					SaveFH:             0,
+					SecInfo:            0,
+					SetAttr:            0,
+					SetClientId:        0,
+					SetClientIdConfirm: 0,
+					Verify:             0,
+					Write:              39,
+					RelLockOwner:       0,
 				},
 			},
 		},