* 0 stale
* 1 FH lookups
* 2 'anon' FHs
- * 3 noncached non-directories
- * 4 noncached directories
+ * 3 noncached directories
+ * 4 noncached non-directories
* leave hole to relocate stale for order
* compatability.
*/
int opt_all = 0,
opt_srv = 0,
opt_clt = 0,
+ srv_info = 0,
+ clt_info = 0,
opt_prt = 0;
int c;
"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) {
/*
* 2.2 puts all fh-related info after the 'rc' header
* 2.4 puts all fh-related info after the 'fh' header, but relocates
- * 'stale' to the start :-( We keep it at the end.
+ * 'stale' to the start and swaps dir and nondir :-(
+ * We preseve the 2.2 order
*/
if (opt_prt & PRNT_FH) {
if (get_stat_info("fh", svcinfo)) { /* >= 2.4 */
+ int t = svcfhinfo[3];
+ svcfhinfo[3]=svcfhinfo[4];
+ svcfhinfo[4]=t;
+
svcfhinfo[5]=svcfhinfo[0]; /* relocate 'stale' */
+
print_numbers(
"Server file handle cache:\n"
"lookup anon ncachedir ncachedir stale\n",
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);
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");
* 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) {