Update to 4.01.
[profile/ivi/quota.git] / xqmstats.c
1 /*
2  *      Display XFS quota manager statistics from /proc.
3  *      Copyright (c) 2001-2003 Silicon Graphics, Inc.
4  */
5
6 #include "config.h"
7
8 #include <stdio.h>
9 #include <unistd.h>
10 #include <string.h>
11 #include "common.h"
12 #include "pot.h"
13
14 #define XQMFILE         "/proc/fs/xfs/xqm"
15 #define STATFILE        "/proc/fs/xfs/stat"
16 #define XQMSTATS        "/proc/fs/xfs/xqmstat"
17
18 char *progname;
19
20 int main(int argc, char **argv)
21 {
22         FILE *stats, *xqm;
23         char buffer[256];
24         unsigned values[8];
25
26         gettexton();
27         progname = basename(argv[0]);
28
29         memset(values, 0, sizeof(unsigned) * 8);
30
31         if ((xqm = fopen(XQMFILE, "r")) == NULL) {
32                 errstr(_("The running kernel does not support XFS\n"));
33                 return 1;
34         }
35         if ((stats = fopen(XQMSTATS, "r")) == NULL) {
36                 if ((stats = fopen(STATFILE, "r")) == NULL) {
37                         errstr(_("The running kernel does not support XFS\n"));
38                         return 1;
39                 }
40         }
41         while (!feof(stats)) {
42                 fgets(buffer, 256, stats);
43                 if (sscanf(buffer, "qm %u %u %u %u %u %u %u %u\n",
44                            &values[0], &values[1], &values[2], &values[3],
45                            &values[4], &values[5], &values[6], &values[7]) == 8)
46                         break;
47         }
48         if (!feof(stats)) {
49                 printf(_("XFS Quota Manager dquot statistics\n"));
50                 printf(_("  reclaims:        %u\n"), values[0]);
51                 printf(_("  missed reclaims: %u\n"), values[1]);
52                 printf(_("  dquot dups:      %u\n"), values[2]);
53                 printf(_("  cache misses:    %u\n"), values[3]);
54                 printf(_("  cache hits:      %u\n"), values[4]);
55                 printf(_("  dquot wants:     %u\n"), values[5]);
56                 printf(_("  shake reclaims:  %u\n"), values[6]);
57                 printf(_("  inact reclaims:  %u\n"), values[7]);
58         }
59         if (fscanf(xqm, "%u %u %u %u\n",
60                         &values[0], &values[1], &values[2], &values[3]) == 4)
61                 printf(
62                 _("Maximum %u dquots (currently %u incore, %u on freelist)\n"),
63                         values[0], values[1], values[3]);
64         fclose(stats);
65         fclose(xqm);
66         return 0;
67 }