The nfsstat program reads /proc/net/rpc/* files to gets info about calls. This info is output as unsigned numbers (at least on any relatively recent kernel). When nfsstat prints these numbers, they are printed as signed integers. When the call counters reach 2^31, things start being printed as negative numbers. This patch changes nfsstat to read and print all counters as unsigned integers. Tested by hacking up a kernel to initialize call counters to 2^31+1. Thanks to Takafumi Miki for the initial version of this patch. Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> --- utils/nfsstat/nfsstat.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c index aa6c961..36ad8ce 100644 --- a/utils/nfsstat/nfsstat.c +++ b/utils/nfsstat/nfsstat.c @@ -539,7 +539,7 @@ print_numbers(const char *hdr, unsigned int *info, unsigned int nr) fputs(hdr, stdout); for (i = 0; i < nr; i++) - printf("%s%-8d", i? " " : "", info[i]); + printf("%s%-8u", i? " " : "", info[i]); printf("\n"); } @@ -562,7 +562,7 @@ print_callstats(const char *hdr, const char **names, 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("%-8u%3llu%% ", info[i+j], pct); } printf("\n"); } @@ -604,7 +604,7 @@ parse_raw_statfile(const char *name, struct statinfo *statp) for (i = 0; i < cnt; i++) { if (!(sp = strtok(NULL, " \t"))) break; - ip->valptr[i] = atoi(sp); + ip->valptr[i] = (unsigned int) strtoul(sp, NULL, 0); total += ip->valptr[i]; } ip->valptr[cnt - 1] = total; -- 1.5.3.6 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html