Skip to contentSkip to conversation

patch: nfsstat signed counter bug

PATCH Gabriel Barazer 1 participant 1 message Jun 29, 2007

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hello,

This is not a critical bug as it is about an informational only tool, but I observed a counter bug in nfsstat :

# nfsstat -s
Server rpc stats:
calls      badcalls   badauth    badclnt    xdrcall
1647216427   0          0          0          0

Server nfs v3:

null         getattr      setattr      lookup       access       readlink
3668      0% 1642587440 27% 1636642   0% 160803697  2% -219165970 68% 54477     0%
read         write        create       mkdir        symlink      mknod

39195344 0% 8113663 0% 3336779 0% 36784 0% 0 0% 0 0%
remove rmdir rename link readdir readdirplus
3981274 0% 37602 0% 310174 0% 220157 0% 1180237 0% 1907416 0%
fsstat fsinfo pathconf commit
43 0% 1841 0% 0 0% 644317 0%

---------
It is very clear that counters are looping and displaying negative values after counting 2^31 calls even on x86_64 platform with 64-bit Linux. Looking at the code shows some printf's with incorrect format such as %-8d

Attached patch against nfs-utils 1.1.0 corrects this behavior to allow numbers with a length of 11, and reformats the display (align numbers and headers on the right, much easier to read). Now, up to 99 billions can be counted on 64-bit systems (2^32 on 32-bit), which is a very higher limit than ~2 billions on a moderate used NFS client/server.

Gabriel

utils/nfsstat/nfsstat.c +10 -10
@@ -335,7 +335,7 @@
 		if (opt_prt & PRNT_NET) {
 			print_numbers(
 			"Server packet stats:\n"
-			"packets    udp        tcp        tcpconn\n",
+			"    packets         udp         tcp     tcpconn\n",
 			svcnetinfo, 4
 			);
 			printf("\n");
@@ -343,7 +343,7 @@
 		if (opt_prt & PRNT_RPC) {
 			print_numbers(
 			"Server rpc stats:\n"
-			"calls      badcalls   badauth    badclnt    xdrcall\n",
+			"      calls    badcalls     badauth     badclnt     xdrcall\n",
 			svcrpcinfo, 5
 			);
 			printf("\n");
@@ -351,7 +351,7 @@
 		if (opt_prt & PRNT_RC) {
 			print_numbers(
 			"Server reply cache:\n"
-			"hits       misses     nocache\n",
+			"       hits      misses     nocache\n",
 			svcrcinfo, 3
 			);
 			printf("\n");
@@ -373,12 +373,12 @@
 				
 				print_numbers(
 					"Server file handle cache:\n"
-					"lookup     anon       ncachedir  ncachedir  stale\n",
+					"     lookup        anon   ncachedir   ncachedir       stale\n",
 					svcfhinfo + 1, 5);
 			} else					/* < 2.4 */
 				print_numbers(
 					"Server file handle cache:\n"
-					"lookup     anon       ncachedir  ncachedir  stale\n",
+					"     lookup        anon   ncachedir   ncachedir       stale\n",
 					svcrcinfo + 3, 5);
 			printf("\n");
 		}
@@ -410,7 +410,7 @@
 		if (opt_prt & PRNT_NET) {
 			print_numbers(
 			"Client packet stats:\n"
-			"packets    udp        tcp        tcpconn\n",
+			"    packets         udp         tcp     tcpconn\n",
 			cltnetinfo, 4
 			);
 			printf("\n");
@@ -418,7 +418,7 @@
 		if (opt_prt & PRNT_RPC) {
 			print_numbers(
 			"Client rpc stats:\n"
-			"calls      retrans    authrefrsh\n",
+			"      calls     retrans  authrefrsh\n",
 			cltrpcinfo, 3
 			);
 			printf("\n");
@@ -465,7 +465,7 @@
 
 	fputs(hdr, stdout);
 	for (i = 0; i < nr; i++)
-		printf("%s%-8d", i? "   " : "", info[i]);
+		printf("%s%11u", i ? " " : "", info[i]);
 	printf("\n");
 }
 
@@ -484,11 +484,11 @@
 		total = 1;
 	for (i = 0; i < nr; i += 6) {
 		for (j = 0; j < 6 && i + j < nr; j++)
-			printf("%-13s", names[i+j]);
+			printf("%s%11s", j ? "     " : "", names[i+j]);
 		printf("\n");
 		for (j = 0; j < 6 && i + j < nr; j++) {
 			pct = ((unsigned long long) info[i+j]*100)/total;
-			printf("%-8d%3llu%% ", info[i+j], pct);
+			printf("%s%11u%3llu%%", j ? " " : "", info[i+j], pct);
 		}
 		printf("\n");
 	}

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs