X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fnfsstat%2Fnfsstat.c;h=55c40967f4b9b606a48c05d21e435322e52d8355;hp=739dabac1683880df1df2d9eb379bedec6a0e73a;hb=078f5d46ad34f36cce257b3b8a970471a4b2b68b;hpb=84efbd57c04964b0f7b6b65d9f83943baa14f22d diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c index 739daba..55c4096 100644 --- a/utils/nfsstat/nfsstat.c +++ b/utils/nfsstat/nfsstat.c @@ -124,6 +124,8 @@ main(int argc, char **argv) int opt_all = 0, opt_srv = 0, opt_clt = 0, + srv_info = 0, + clt_info = 0, opt_prt = 0; int c; @@ -184,9 +186,25 @@ main(int argc, char **argv) "server.\n"); } - if ((opt_srv && !parse_statfile(NFSSVCSTAT, svcinfo)) - || (opt_clt && !parse_statfile(NFSCLTSTAT, cltinfo))) - return 2; + if (opt_srv) { + srv_info = parse_statfile(NFSSVCSTAT, svcinfo); + if (srv_info == 0 && opt_clt == 0) { + fprintf(stderr, "Warning: No Server Stats (%s: %m).\n", NFSSVCSTAT); + return 2; + } + if (srv_info == 0) + opt_srv = 0; + } + + if (opt_clt) { + clt_info = parse_statfile(NFSCLTSTAT, cltinfo); + if (opt_srv == 0 && clt_info == 0) { + fprintf(stderr, "Warning: No Client Stats (%s: %m).\n", NFSCLTSTAT); + return 2; + } + if (clt_info == 0) + opt_clt = 0; + } if (opt_srv) { if (opt_prt & PRNT_NET) { @@ -307,7 +325,8 @@ static void 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 +338,10 @@ print_callstats(const char *hdr, const char **names, 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 %2llu%% ", info[i+j], pct); + } printf("\n"); } printf("\n"); @@ -338,8 +358,8 @@ parse_statfile(const char *name, struct statinfo *statp) * be a fatal error -- it usually means the module isn't loaded. */ if ((fp = fopen(name, "r")) == NULL) { - fprintf(stderr, "Warning: %s: %m\n", name); - return 1; + // fprintf(stderr, "Warning: %s: %m\n", name); + return 0; } while (fgets(buffer, sizeof(buffer), fp) != NULL) {