Annotation of src/usr.bin/systat/nfs.c, Revision 1.7
1.7 ! deraadt 1: /* $OpenBSD: nfs.c,v 1.6 2011/03/02 06:48:17 jasper Exp $ */
1.1 jasper 2:
3: /*
4: * Copyright (c) 2009 Jasper Lievisse Adriaanse <jasper@openbsd.org>
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: *
18: */
19:
1.7 ! deraadt 20: #include <sys/types.h>
1.1 jasper 21: #include <sys/mount.h>
1.7 ! deraadt 22: #include <sys/signal.h>
1.1 jasper 23: #include <sys/sysctl.h>
24: #include <sys/types.h>
25: #include <nfs/rpcv2.h>
26: #include <nfs/nfsproto.h>
27: #include <nfs/nfs.h>
28:
29: #include <err.h>
30: #include <errno.h>
31: #include <stdio.h>
32: #include <stdlib.h>
33: #include <string.h>
34:
35: #include "systat.h"
36:
37: int check_nfs(void);
38: int select_client(void);
39: int select_server(void);
40: int read_nfs(void);
41: void print_client(void);
42: void print_server(void);
43:
44: struct nfsstats nfsstats;
45: int num_client = 0;
46: int num_server = 0;
47:
48: field_def fields_nfs[] = {
49: /* Client */
1.2 jasper 50: {"RPC COUNTS", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5 jasper 51: {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2 jasper 52: {"RPC INFO", 14, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5 jasper 53: {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2 jasper 54: {"CACHE INFO", 10, 12, 1, FLD_ALIGN_LEFT, -1, 0, 0, 0},
1.5 jasper 55: {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.1 jasper 56:
57: /* Server */
1.2 jasper 58: {"RPC COUNTS", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5 jasper 59: {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2 jasper 60: {"CACHE STATS", 14, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5 jasper 61: {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2 jasper 62: {"WRITES", 10, 12, 1, FLD_ALIGN_LEFT, -1, 0, 0, 0},
1.5 jasper 63: {"", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.1 jasper 64: };
65:
66: /* _V suffixed fields indicate a value column. */
67: /* Client */
1.6 jasper 68: #define FLD_NFS_C_RPC_COUNTS FIELD_ADDR(fields_nfs,0)
69: #define FLD_NFS_C_RPC_COUNTS_V FIELD_ADDR(fields_nfs,1)
70: #define FLD_NFS_C_RPC_INFO FIELD_ADDR(fields_nfs,2)
71: #define FLD_NFS_C_RPC_INFO_V FIELD_ADDR(fields_nfs,3)
72: #define FLD_NFS_C_CACHE_INFO FIELD_ADDR(fields_nfs,4)
73: #define FLD_NFS_C_CACHE_V FIELD_ADDR(fields_nfs,5)
1.1 jasper 74:
75: /* Server */
1.6 jasper 76: #define FLD_NFS_S_RPC_COUNTS FIELD_ADDR(fields_nfs,6)
77: #define FLD_NFS_S_RPC_COUNTS_V FIELD_ADDR(fields_nfs,7)
78: #define FLD_NFS_S_CACHE_STATS FIELD_ADDR(fields_nfs,8)
79: #define FLD_NFS_S_CACHE_STATS_V FIELD_ADDR(fields_nfs,9)
80: #define FLD_NFS_S_WRITES FIELD_ADDR(fields_nfs,10)
81: #define FLD_NFS_S_WRITES_V FIELD_ADDR(fields_nfs,11)
1.1 jasper 82:
83: /* Define views */
84: field_def *view_nfs_0[] = {
85: FLD_NFS_C_RPC_COUNTS, FLD_NFS_C_RPC_COUNTS_V, FLD_NFS_C_RPC_INFO,
86: FLD_NFS_C_RPC_INFO_V, FLD_NFS_C_CACHE_INFO, FLD_NFS_C_CACHE_V ,NULL
87: };
88:
89: field_def *view_nfs_1[] = {
90: FLD_NFS_S_RPC_COUNTS, FLD_NFS_S_RPC_COUNTS_V, FLD_NFS_S_CACHE_STATS,
91: FLD_NFS_S_CACHE_STATS_V, FLD_NFS_S_WRITES, FLD_NFS_S_WRITES_V, NULL
92: };
93:
94: /* Define view managers */
95: struct view_manager nfs_client_mgr = {
96: "Client", select_client, read_nfs, NULL, print_header,
97: print_client, keyboard_callback, NULL, NULL
98: };
99:
100: struct view_manager nfs_server_mgr = {
101: "Server", select_server, read_nfs, NULL, print_header,
102: print_server, keyboard_callback, NULL, NULL
103: };
104:
105: field_view views_nfs[] = {
106: {view_nfs_0, "nfsclient", '8', &nfs_client_mgr},
107: {view_nfs_1, "nfsserver", '9', &nfs_server_mgr},
108: {NULL, NULL, 0, NULL}
109: };
110:
111: int
112: select_client(void)
113: {
114: num_disp = num_client;
115: return(0);
116: }
117:
118: int
119: select_server(void)
120: {
121: num_disp = num_server;
122: return(0);
123: }
124:
125: int
126: initnfs(void)
127: {
128: field_view *v;
129:
130: for (v = views_nfs; v->name != NULL; v++)
131: add_view(v);
132:
133: read_nfs();
134:
135: return(0);
136: }
137:
138: /*
139: * We get all the information in one go and don't care about
1.3 jasper 140: * server or client fields (those will be '0' if not applicable).
1.1 jasper 141: */
142: int
143: read_nfs(void)
144: {
145: struct nfsstats *p = &nfsstats;
146: int mib[3];
147: size_t len = sizeof(*p);
148:
149: mib[0] = CTL_VFS;
150: mib[1] = 2; /* NETDEV */
151: mib[2] = NFS_NFSSTATS;
152:
153: if (sysctl(mib, 3, p, &len, NULL, 0) < 0)
154: return(-1);
155: else
156: return(0);
157: }
158:
159:
160: /*
161: * As we want a view with multiple columns, mixed with labels and values,
162: * we can't use the regular dance and have to use our own (looong) dance
163: * to build the layout.
164: */
165: void
166: print_client(void)
167: {
168: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Getattr");
169: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
170: nfsstats.rpccnt[NFSPROC_GETATTR]);
171: print_fld_str(FLD_NFS_C_RPC_INFO, "TimedOut");
172: print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpctimeouts);
173: print_fld_str(FLD_NFS_C_CACHE_INFO, "Attr Hits ");
174: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.attrcache_hits);
175: end_line();
176:
177: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Setattr");
178: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
179: nfsstats.rpccnt[NFSPROC_SETATTR]);
180: print_fld_str(FLD_NFS_C_RPC_INFO, "Invalid");
181: print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcinvalid);
182: print_fld_str(FLD_NFS_C_CACHE_INFO, "Attr Misses");
183: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.attrcache_misses);
184: end_line();
185:
186: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Lookup");
187: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
188: nfsstats.rpccnt[NFSPROC_LOOKUP]);
189: print_fld_str(FLD_NFS_C_RPC_INFO, "X Replies");
190: print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcunexpected);
191: print_fld_str(FLD_NFS_C_CACHE_INFO, "Lkup Hits ");
192: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.lookupcache_hits);
193: end_line();
194:
195: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Readlink");
196: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
197: nfsstats.rpccnt[NFSPROC_READLINK]);
198: print_fld_str(FLD_NFS_C_RPC_INFO, "Retries");
199: print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcretries);
200: print_fld_str(FLD_NFS_C_CACHE_INFO, "Lkup Misses ");
201: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.lookupcache_misses);
202: end_line();
203:
204: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Read");
205: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
206: nfsstats.rpccnt[NFSPROC_READ]);
207: print_fld_str(FLD_NFS_C_RPC_INFO, "Requests");
208: print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcrequests);
209: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioR Hits ");
210: print_fld_ssize(FLD_NFS_C_CACHE_V,
211: nfsstats.biocache_reads-nfsstats.read_bios);
212: end_line();
213:
214: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Write");
215: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_WRITE]);
216: print_fld_str(FLD_NFS_C_RPC_INFO, "FrcSync");
217: print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.forcedsync);
218: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioR Misses");
219: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.read_bios);
220: end_line();
221:
222: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Create");
223: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
224: nfsstats.rpccnt[NFSPROC_CREATE]);
225: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioW Hits ");
226: print_fld_ssize(FLD_NFS_C_CACHE_V,
227: nfsstats.biocache_writes-nfsstats.write_bios);
228: end_line();
229:
230: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Remove");
231: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
232: nfsstats.rpccnt[NFSPROC_REMOVE]);
233: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioW Misses");
234: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.write_bios);
235: end_line();
236:
237: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Rename");
238: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
239: nfsstats.rpccnt[NFSPROC_RENAME]);
240: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioRL Hits ");
241: print_fld_ssize(FLD_NFS_C_CACHE_V,
242: nfsstats.biocache_readlinks-nfsstats.readlink_bios);
243: end_line();
244:
245: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Link");
246: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_LINK]);
247: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioRL Misses");
248: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.readlink_bios);
249: end_line();
250:
251: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Symlink");
252: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
253: nfsstats.rpccnt[NFSPROC_SYMLINK]);
254: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioD Hits ");
255: print_fld_ssize(FLD_NFS_C_CACHE_V,
256: nfsstats.biocache_readdirs-nfsstats.readdir_bios);
257: end_line();
258:
259: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Mkdir");
260: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_MKDIR]);
261: print_fld_str(FLD_NFS_C_CACHE_INFO, "BioD Misses");
262: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.readdir_bios);
263: end_line();
264:
265: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Rmdir");
266: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_RMDIR]);
267: print_fld_str(FLD_NFS_C_CACHE_INFO, "DirE Hits ");
268: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.direofcache_hits);
269: end_line();
270:
271: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Readdir");
272: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
273: nfsstats.rpccnt[NFSPROC_READDIR]);
274: print_fld_str(FLD_NFS_C_CACHE_INFO, "DirE Misses");
275: print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.direofcache_misses);
276: end_line();
277:
278: print_fld_str(FLD_NFS_C_RPC_COUNTS, "RdirPlus");
279: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
280: nfsstats.rpccnt[NFSPROC_READDIRPLUS]);
281: end_line();
282:
283: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Access");
284: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
285: nfsstats.rpccnt[NFSPROC_ACCESS]);
286: end_line();
287:
288: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Mknod");
289: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_MKNOD]);
290: end_line();
291:
292: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Fsstat");
293: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
294: nfsstats.rpccnt[NFSPROC_FSSTAT]);
295: end_line();
296:
297: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Fsinfo");
298: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
299: nfsstats.rpccnt[NFSPROC_FSINFO]);
300: end_line();
301:
302: print_fld_str(FLD_NFS_C_RPC_COUNTS, "PathConf");
303: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
304: nfsstats.rpccnt[NFSPROC_PATHCONF]);
305: end_line();
306:
307: print_fld_str(FLD_NFS_C_RPC_COUNTS, "Commit");
308: print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
309: nfsstats.rpccnt[NFSPROC_COMMIT]);
310: end_line();
311: }
312:
313: void
314: print_server(void)
315: {
316: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Getattr");
317: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
318: nfsstats.srvrpccnt[NFSPROC_GETATTR]);
319: print_fld_str(FLD_NFS_S_CACHE_STATS, "Inprog");
320: print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srvcache_inproghits);
321: print_fld_str(FLD_NFS_S_WRITES, "WriteOps");
322: print_fld_ssize(FLD_NFS_S_WRITES_V, nfsstats.srvvop_writes);
323: end_line();
324:
325: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Setattr");
326: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
327: nfsstats.srvrpccnt[NFSPROC_SETATTR]);
328: print_fld_str(FLD_NFS_S_CACHE_STATS, "Idem");
329: print_fld_ssize(FLD_NFS_S_CACHE_STATS_V,
330: nfsstats.srvcache_idemdonehits);
331: print_fld_str(FLD_NFS_S_WRITES, "WriteRPC");
332: print_fld_ssize(FLD_NFS_S_WRITES_V, nfsstats.srvrpccnt[NFSPROC_WRITE]);
333: end_line();
334:
335: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Lookup");
336: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
337: nfsstats.srvrpccnt[NFSPROC_LOOKUP]);
338: print_fld_str(FLD_NFS_S_CACHE_STATS, "Non-idem");
339: print_fld_ssize(FLD_NFS_S_CACHE_STATS_V,
340: nfsstats.srvcache_nonidemdonehits);
341: print_fld_str(FLD_NFS_S_WRITES, "Opsaved");
342: print_fld_ssize(FLD_NFS_S_WRITES_V,
343: nfsstats.srvrpccnt[NFSPROC_WRITE] - nfsstats.srvvop_writes);
344: end_line();
345:
346: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Readlink");
347: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
348: nfsstats.srvrpccnt[NFSPROC_READLINK]);
349: print_fld_str(FLD_NFS_S_CACHE_STATS, "Misses");
350: print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srvcache_misses);
351: end_line();
352:
353: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Read");
354: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
355: nfsstats.srvrpccnt[NFSPROC_READ]);
356: end_line();
357:
358: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Write");
359: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
360: nfsstats.srvrpccnt[NFSPROC_WRITE]);
361: end_line();
362:
363: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Create");
364: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
365: nfsstats.srvrpccnt[NFSPROC_CREATE]);
366: end_line();
367:
368: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Remove");
369: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
370: nfsstats.srvrpccnt[NFSPROC_REMOVE]);
371: end_line();
372:
373: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Rename");
374: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
375: nfsstats.srvrpccnt[NFSPROC_RENAME]);
376: end_line();
377:
378: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Link");
379: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
380: nfsstats.srvrpccnt[NFSPROC_LINK]);
381: end_line();
382:
383: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Symlink");
384: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
385: nfsstats.srvrpccnt[NFSPROC_SYMLINK]);
386: end_line();
387:
388: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Mkdir");
389: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
390: nfsstats.srvrpccnt[NFSPROC_MKDIR]);
391: end_line();
392:
393: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Rmdir");
394: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
395: nfsstats.srvrpccnt[NFSPROC_RMDIR]);
396: end_line();
397:
398: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Readdir");
399: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
400: nfsstats.srvrpccnt[NFSPROC_READDIR]);
401: end_line();
402:
403: print_fld_str(FLD_NFS_S_RPC_COUNTS, "RdirPlus");
404: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
405: nfsstats.srvrpccnt[NFSPROC_READDIRPLUS]);
406: end_line();
407:
408: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Access");
409: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
410: nfsstats.srvrpccnt[NFSPROC_ACCESS]);
411: end_line();
412:
413: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Mknod");
414: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
415: nfsstats.srvrpccnt[NFSPROC_MKNOD]);
416: end_line();
417:
418: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Fsstat");
419: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
420: nfsstats.srvrpccnt[NFSPROC_FSSTAT]);
421: end_line();
422:
423: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Fsinfo");
424: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
425: nfsstats.srvrpccnt[NFSPROC_FSINFO]);
426: end_line();
427:
428: print_fld_str(FLD_NFS_S_RPC_COUNTS, "PathConf");
429: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
430: nfsstats.srvrpccnt[NFSPROC_PATHCONF]);
431: end_line();
432:
433: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Commit");
434: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
435: nfsstats.srvrpccnt[NFSPROC_COMMIT]);
436: end_line();
437:
1.4 canacar 438: /* This creates an empty space on screen to separate the two blocks */
439: print_fld_str(FLD_NFS_S_RPC_COUNTS, "");
1.1 jasper 440: end_line();
441:
442: print_fld_str(FLD_NFS_S_RPC_COUNTS, "Ret-Failed");
443: print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V, nfsstats.srvrpc_errs);
444: print_fld_str(FLD_NFS_S_CACHE_STATS, "Faults");
445: print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srv_errs);
446: end_line();
447: }