Without this patch, nfsstat reports the wrong percentage for any RPC which has more than 2^32/100 calls. For example my machine running 1.0.1 reports: l-sim-208-11:diag/testgen/batch_0/nv40_curie_ogtest/000001> nfsstat at -c Client rpc stats: calls retrans authrefrsh 61096094 181 0 Client nfs v2: null getattr setattr root lookup readlink 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% read wrcache write create remove rename 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% link symlink mkdir rmdir readdir fsstat 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% Client nfs v3: null getattr setattr lookup access readlink 0 0% 2661431 4% 76995 0% 4938464 8% 3254610 5% 131 0% read write create mkdir symlink mknod 138409 0% 259382 0% 185867 0% 3570 0% 49 0% 0 0% remove rmdir rename link readdir readdirplus 4035088 6% 318094 0% 157 0% 0 0% 1626490 2% 43597144 1% fsstat fsinfo pathconf commit 18 0% 195 0% 0 0% 0 0% Note that readdir plus should be 71%, not 1%. --- 1.0.1/nfsstat.c Sun May 5 16:33:30 2002 +++ nfsstat.c Thu May 29 16:10:21 2003 @@ -307,7 +307,8 @@ print_callstats(const char *hdr, const char **names, unsigned int *info, unsigned int nr) { - unsigned int total; + unsigned long long total; + unsigned long long pct; int i, j; fputs(hdr, stdout); @@ -319,9 +320,10 @@ for (j = 0; j < 6 && i + j < nr; j++) printf("%-11s", names[i+j]); printf("\n"); - for (j = 0; j < 6 && i + j < nr; j++) - printf("%-6d %2d%% ", - info[i+j], 100 * info[i+j] / total); + for (j = 0; j < 6 && i + j < nr; j++) { + pct = ((unsigned long long) info[i+j]*100)/total; + printf("%-6d %2d%% ", info[i+j], pct); + } printf("\n"); } printf("\n");