bin/103682: nfsstat(1) should use %u instead of %d to display NFS
stats
Hiroki Sato
hrs at FreeBSD.org
Tue Sep 26 08:50:57 PDT 2006
>Number: 103682
>Category: bin
>Synopsis: nfsstat(1) should use %u instead of %d to display NFS stats
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Tue Sep 26 15:50:16 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Hiroki Sato
>Release: FreeBSD 6.1-RELEASE i386
>Organization:
Tokyo University of Science
>Environment:
System: FreeBSD unknown.allbsd.org 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Tue May 16 23:08:51 JST 2006 hrs at unknown.allbsd.org:/usr/obj/usr/src/sys/UNKNOWN i386
>Description:
Although nfsstat(1) uses %d in printf() to display the NFS stats,
on a busy NFS server/client the stat numbers can become more than
2147483647 (2^31 - 1, 32-bit int case) and negative numbers are
printed. The numbers should be interpreted as unsigned int, and
displayed by using %u instead.
>How-To-Repeat:
Use nfsstat(1) on a busy NFS server/client.
>Fix:
A patch is attached. Also, I think it is better to change members
in struct nfsstats/nfsrvstats from int to uint64_t or so if possible.
Index: nfsstat.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/nfsstat/nfsstat.c,v
retrieving revision 1.21
diff -u -r1.21 nfsstat.c
--- nfsstat.c 11 Jul 2004 17:37:33 -0000 1.21
+++ nfsstat.c 26 Sep 2006 14:58:49 -0000
@@ -224,7 +224,7 @@
printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n",
"Getattr", "Setattr", "Lookup", "Readlink", "Read",
"Write", "Create", "Remove");
- printf("%9d %9d %9d %9d %9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u %9u %9u %9u %9u\n",
nfsstats.rpccnt[NFSPROC_GETATTR],
nfsstats.rpccnt[NFSPROC_SETATTR],
nfsstats.rpccnt[NFSPROC_LOOKUP],
@@ -236,7 +236,7 @@
printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n",
"Rename", "Link", "Symlink", "Mkdir", "Rmdir",
"Readdir", "RdirPlus", "Access");
- printf("%9d %9d %9d %9d %9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u %9u %9u %9u %9u\n",
nfsstats.rpccnt[NFSPROC_RENAME],
nfsstats.rpccnt[NFSPROC_LINK],
nfsstats.rpccnt[NFSPROC_SYMLINK],
@@ -247,7 +247,7 @@
nfsstats.rpccnt[NFSPROC_ACCESS]);
printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n",
"Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit");
- printf("%9d %9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u %9u\n",
nfsstats.rpccnt[NFSPROC_MKNOD],
nfsstats.rpccnt[NFSPROC_FSSTAT],
nfsstats.rpccnt[NFSPROC_FSINFO],
@@ -257,7 +257,7 @@
printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n",
"TimedOut", "Invalid", "X Replies", "Retries",
"Requests");
- printf("%9d %9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u %9u\n",
nfsstats.rpctimeouts,
nfsstats.rpcinvalid,
nfsstats.rpcunexpected,
@@ -268,10 +268,10 @@
"Attr Hits", "Misses", "Lkup Hits", "Misses");
printf(" %9.9s %9.9s %9.9s %9.9s\n",
"BioR Hits", "Misses", "BioW Hits", "Misses");
- printf("%9d %9d %9d %9d",
+ printf("%9u %9u %9u %9u",
nfsstats.attrcache_hits, nfsstats.attrcache_misses,
nfsstats.lookupcache_hits, nfsstats.lookupcache_misses);
- printf(" %9d %9d %9d %9d\n",
+ printf(" %9u %9u %9u %9u\n",
nfsstats.biocache_reads-nfsstats.read_bios,
nfsstats.read_bios,
nfsstats.biocache_writes-nfsstats.write_bios,
@@ -279,12 +279,12 @@
printf("%9.9s %9.9s %9.9s %9.9s",
"BioRLHits", "Misses", "BioD Hits", "Misses");
printf(" %9.9s %9.9s\n", "DirE Hits", "Misses");
- printf("%9d %9d %9d %9d",
+ printf("%9u %9u %9u %9u",
nfsstats.biocache_readlinks-nfsstats.readlink_bios,
nfsstats.readlink_bios,
nfsstats.biocache_readdirs-nfsstats.readdir_bios,
nfsstats.readdir_bios);
- printf(" %9d %9d\n",
+ printf(" %9u %9u\n",
nfsstats.direofcache_hits, nfsstats.direofcache_misses);
}
if (serverOnly && !nfsrvstatsp) {
@@ -296,7 +296,7 @@
printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n",
"Getattr", "Setattr", "Lookup", "Readlink", "Read",
"Write", "Create", "Remove");
- printf("%9d %9d %9d %9d %9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u %9u %9u %9u %9u\n",
nfsrvstats.srvrpccnt[NFSPROC_GETATTR],
nfsrvstats.srvrpccnt[NFSPROC_SETATTR],
nfsrvstats.srvrpccnt[NFSPROC_LOOKUP],
@@ -308,7 +308,7 @@
printf("%9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s %9.9s\n",
"Rename", "Link", "Symlink", "Mkdir", "Rmdir",
"Readdir", "RdirPlus", "Access");
- printf("%9d %9d %9d %9d %9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u %9u %9u %9u %9u\n",
nfsrvstats.srvrpccnt[NFSPROC_RENAME],
nfsrvstats.srvrpccnt[NFSPROC_LINK],
nfsrvstats.srvrpccnt[NFSPROC_SYMLINK],
@@ -319,7 +319,7 @@
nfsrvstats.srvrpccnt[NFSPROC_ACCESS]);
printf("%9.9s %9.9s %9.9s %9.9s %9.9s\n",
"Mknod", "Fsstat", "Fsinfo", "PathConf", "Commit");
- printf("%9d %9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u %9u\n",
nfsrvstats.srvrpccnt[NFSPROC_MKNOD],
nfsrvstats.srvrpccnt[NFSPROC_FSSTAT],
nfsrvstats.srvrpccnt[NFSPROC_FSINFO],
@@ -332,7 +332,7 @@
printf("Server Cache Stats:\n");
printf("%9.9s %9.9s %9.9s %9.9s\n",
"Inprog", "Idem", "Non-idem", "Misses");
- printf("%9d %9d %9d %9d\n",
+ printf("%9u %9u %9u %9u\n",
nfsrvstats.srvcache_inproghits,
nfsrvstats.srvcache_idemdonehits,
nfsrvstats.srvcache_nonidemdonehits,
@@ -340,7 +340,7 @@
printf("Server Write Gathering:\n");
printf("%9.9s %9.9s %9.9s\n",
"WriteOps", "WriteRPC", "Opsaved");
- printf("%9d %9d %9d\n",
+ printf("%9u %9u %9u\n",
nfsrvstats.srvvop_writes,
nfsrvstats.srvrpccnt[NFSPROC_WRITE],
nfsrvstats.srvrpccnt[NFSPROC_WRITE] -
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list