.. | .. |
---|
4 | 4 | * All Rights Reserved. |
---|
5 | 5 | */ |
---|
6 | 6 | #include "xfs.h" |
---|
7 | | -#include <linux/proc_fs.h> |
---|
8 | 7 | |
---|
9 | 8 | struct xstats xfsstats; |
---|
10 | 9 | |
---|
.. | .. |
---|
24 | 23 | uint64_t xs_xstrat_bytes = 0; |
---|
25 | 24 | uint64_t xs_write_bytes = 0; |
---|
26 | 25 | uint64_t xs_read_bytes = 0; |
---|
| 26 | + uint64_t defer_relog = 0; |
---|
27 | 27 | |
---|
28 | 28 | static const struct xstats_entry { |
---|
29 | 29 | char *desc; |
---|
30 | 30 | int endpoint; |
---|
31 | 31 | } xstats[] = { |
---|
32 | | - { "extent_alloc", XFSSTAT_END_EXTENT_ALLOC }, |
---|
33 | | - { "abt", XFSSTAT_END_ALLOC_BTREE }, |
---|
34 | | - { "blk_map", XFSSTAT_END_BLOCK_MAPPING }, |
---|
35 | | - { "bmbt", XFSSTAT_END_BLOCK_MAP_BTREE }, |
---|
36 | | - { "dir", XFSSTAT_END_DIRECTORY_OPS }, |
---|
37 | | - { "trans", XFSSTAT_END_TRANSACTIONS }, |
---|
38 | | - { "ig", XFSSTAT_END_INODE_OPS }, |
---|
39 | | - { "log", XFSSTAT_END_LOG_OPS }, |
---|
40 | | - { "push_ail", XFSSTAT_END_TAIL_PUSHING }, |
---|
41 | | - { "xstrat", XFSSTAT_END_WRITE_CONVERT }, |
---|
42 | | - { "rw", XFSSTAT_END_READ_WRITE_OPS }, |
---|
43 | | - { "attr", XFSSTAT_END_ATTRIBUTE_OPS }, |
---|
44 | | - { "icluster", XFSSTAT_END_INODE_CLUSTER }, |
---|
45 | | - { "vnodes", XFSSTAT_END_VNODE_OPS }, |
---|
46 | | - { "buf", XFSSTAT_END_BUF }, |
---|
47 | | - { "abtb2", XFSSTAT_END_ABTB_V2 }, |
---|
48 | | - { "abtc2", XFSSTAT_END_ABTC_V2 }, |
---|
49 | | - { "bmbt2", XFSSTAT_END_BMBT_V2 }, |
---|
50 | | - { "ibt2", XFSSTAT_END_IBT_V2 }, |
---|
51 | | - { "fibt2", XFSSTAT_END_FIBT_V2 }, |
---|
52 | | - { "rmapbt", XFSSTAT_END_RMAP_V2 }, |
---|
53 | | - { "refcntbt", XFSSTAT_END_REFCOUNT }, |
---|
| 32 | + { "extent_alloc", xfsstats_offset(xs_abt_lookup) }, |
---|
| 33 | + { "abt", xfsstats_offset(xs_blk_mapr) }, |
---|
| 34 | + { "blk_map", xfsstats_offset(xs_bmbt_lookup) }, |
---|
| 35 | + { "bmbt", xfsstats_offset(xs_dir_lookup) }, |
---|
| 36 | + { "dir", xfsstats_offset(xs_trans_sync) }, |
---|
| 37 | + { "trans", xfsstats_offset(xs_ig_attempts) }, |
---|
| 38 | + { "ig", xfsstats_offset(xs_log_writes) }, |
---|
| 39 | + { "log", xfsstats_offset(xs_try_logspace)}, |
---|
| 40 | + { "push_ail", xfsstats_offset(xs_xstrat_quick)}, |
---|
| 41 | + { "xstrat", xfsstats_offset(xs_write_calls) }, |
---|
| 42 | + { "rw", xfsstats_offset(xs_attr_get) }, |
---|
| 43 | + { "attr", xfsstats_offset(xs_iflush_count)}, |
---|
| 44 | + { "icluster", xfsstats_offset(vn_active) }, |
---|
| 45 | + { "vnodes", xfsstats_offset(xb_get) }, |
---|
| 46 | + { "buf", xfsstats_offset(xs_abtb_2) }, |
---|
| 47 | + { "abtb2", xfsstats_offset(xs_abtc_2) }, |
---|
| 48 | + { "abtc2", xfsstats_offset(xs_bmbt_2) }, |
---|
| 49 | + { "bmbt2", xfsstats_offset(xs_ibt_2) }, |
---|
| 50 | + { "ibt2", xfsstats_offset(xs_fibt_2) }, |
---|
| 51 | + { "fibt2", xfsstats_offset(xs_rmap_2) }, |
---|
| 52 | + { "rmapbt", xfsstats_offset(xs_refcbt_2) }, |
---|
| 53 | + { "refcntbt", xfsstats_offset(xs_qm_dqreclaims)}, |
---|
54 | 54 | /* we print both series of quota information together */ |
---|
55 | | - { "qm", XFSSTAT_END_QM }, |
---|
| 55 | + { "qm", xfsstats_offset(xs_xstrat_bytes)}, |
---|
56 | 56 | }; |
---|
57 | 57 | |
---|
58 | 58 | /* Loop over all stats groups */ |
---|
59 | 59 | |
---|
60 | 60 | for (i = j = 0; i < ARRAY_SIZE(xstats); i++) { |
---|
61 | | - len += snprintf(buf + len, PATH_MAX - len, "%s", |
---|
| 61 | + len += scnprintf(buf + len, PATH_MAX - len, "%s", |
---|
62 | 62 | xstats[i].desc); |
---|
63 | 63 | /* inner loop does each group */ |
---|
64 | 64 | for (; j < xstats[i].endpoint; j++) |
---|
65 | | - len += snprintf(buf + len, PATH_MAX - len, " %u", |
---|
| 65 | + len += scnprintf(buf + len, PATH_MAX - len, " %u", |
---|
66 | 66 | counter_val(stats, j)); |
---|
67 | | - len += snprintf(buf + len, PATH_MAX - len, "\n"); |
---|
| 67 | + len += scnprintf(buf + len, PATH_MAX - len, "\n"); |
---|
68 | 68 | } |
---|
69 | 69 | /* extra precision counters */ |
---|
70 | 70 | for_each_possible_cpu(i) { |
---|
71 | 71 | xs_xstrat_bytes += per_cpu_ptr(stats, i)->s.xs_xstrat_bytes; |
---|
72 | 72 | xs_write_bytes += per_cpu_ptr(stats, i)->s.xs_write_bytes; |
---|
73 | 73 | xs_read_bytes += per_cpu_ptr(stats, i)->s.xs_read_bytes; |
---|
| 74 | + defer_relog += per_cpu_ptr(stats, i)->s.defer_relog; |
---|
74 | 75 | } |
---|
75 | 76 | |
---|
76 | | - len += snprintf(buf + len, PATH_MAX-len, "xpc %Lu %Lu %Lu\n", |
---|
| 77 | + len += scnprintf(buf + len, PATH_MAX-len, "xpc %Lu %Lu %Lu\n", |
---|
77 | 78 | xs_xstrat_bytes, xs_write_bytes, xs_read_bytes); |
---|
78 | | - len += snprintf(buf + len, PATH_MAX-len, "debug %u\n", |
---|
| 79 | + len += scnprintf(buf + len, PATH_MAX-len, "defer_relog %llu\n", |
---|
| 80 | + defer_relog); |
---|
| 81 | + len += scnprintf(buf + len, PATH_MAX-len, "debug %u\n", |
---|
79 | 82 | #if defined(DEBUG) |
---|
80 | 83 | 1); |
---|
81 | 84 | #else |
---|
.. | .. |
---|
104 | 107 | #ifdef CONFIG_PROC_FS |
---|
105 | 108 | /* legacy quota interfaces */ |
---|
106 | 109 | #ifdef CONFIG_XFS_QUOTA |
---|
| 110 | + |
---|
| 111 | +#define XFSSTAT_START_XQMSTAT xfsstats_offset(xs_qm_dqreclaims) |
---|
| 112 | +#define XFSSTAT_END_XQMSTAT xfsstats_offset(xs_qm_dquot) |
---|
| 113 | + |
---|
107 | 114 | static int xqm_proc_show(struct seq_file *m, void *v) |
---|
108 | 115 | { |
---|
109 | 116 | /* maximum; incore; ratio free to inuse; freelist */ |
---|
.. | .. |
---|
119 | 126 | int j; |
---|
120 | 127 | |
---|
121 | 128 | seq_printf(m, "qm"); |
---|
122 | | - for (j = XFSSTAT_END_REFCOUNT; j < XFSSTAT_END_XQMSTAT; j++) |
---|
| 129 | + for (j = XFSSTAT_START_XQMSTAT; j < XFSSTAT_END_XQMSTAT; j++) |
---|
123 | 130 | seq_printf(m, " %u", counter_val(xfsstats.xs_stats, j)); |
---|
124 | 131 | seq_putc(m, '\n'); |
---|
125 | 132 | return 0; |
---|