hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/xfs/xfs_stats.c
....@@ -4,7 +4,6 @@
44 * All Rights Reserved.
55 */
66 #include "xfs.h"
7
-#include <linux/proc_fs.h>
87
98 struct xstats xfsstats;
109
....@@ -24,58 +23,62 @@
2423 uint64_t xs_xstrat_bytes = 0;
2524 uint64_t xs_write_bytes = 0;
2625 uint64_t xs_read_bytes = 0;
26
+ uint64_t defer_relog = 0;
2727
2828 static const struct xstats_entry {
2929 char *desc;
3030 int endpoint;
3131 } 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)},
5454 /* we print both series of quota information together */
55
- { "qm", XFSSTAT_END_QM },
55
+ { "qm", xfsstats_offset(xs_xstrat_bytes)},
5656 };
5757
5858 /* Loop over all stats groups */
5959
6060 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",
6262 xstats[i].desc);
6363 /* inner loop does each group */
6464 for (; j < xstats[i].endpoint; j++)
65
- len += snprintf(buf + len, PATH_MAX - len, " %u",
65
+ len += scnprintf(buf + len, PATH_MAX - len, " %u",
6666 counter_val(stats, j));
67
- len += snprintf(buf + len, PATH_MAX - len, "\n");
67
+ len += scnprintf(buf + len, PATH_MAX - len, "\n");
6868 }
6969 /* extra precision counters */
7070 for_each_possible_cpu(i) {
7171 xs_xstrat_bytes += per_cpu_ptr(stats, i)->s.xs_xstrat_bytes;
7272 xs_write_bytes += per_cpu_ptr(stats, i)->s.xs_write_bytes;
7373 xs_read_bytes += per_cpu_ptr(stats, i)->s.xs_read_bytes;
74
+ defer_relog += per_cpu_ptr(stats, i)->s.defer_relog;
7475 }
7576
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",
7778 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",
7982 #if defined(DEBUG)
8083 1);
8184 #else
....@@ -104,6 +107,10 @@
104107 #ifdef CONFIG_PROC_FS
105108 /* legacy quota interfaces */
106109 #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
+
107114 static int xqm_proc_show(struct seq_file *m, void *v)
108115 {
109116 /* maximum; incore; ratio free to inuse; freelist */
....@@ -119,7 +126,7 @@
119126 int j;
120127
121128 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++)
123130 seq_printf(m, " %u", counter_val(xfsstats.xs_stats, j));
124131 seq_putc(m, '\n');
125132 return 0;