^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2000,2005 Silicon Graphics, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * All Rights Reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifndef __XFS_STATS_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define __XFS_STATS_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/percpu.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * The btree stats arrays have fixed offsets for the different stats. We
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * store the base index in the btree cursor via XFS_STATS_CALC_INDEX() and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * that allows us to use fixed offsets into the stats array for each btree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * stat. These index offsets are defined in the order they will be emitted
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * in the stats files, so it is possible to add new btree stat types by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * appending to the enum list below.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) __XBTS_lookup = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) __XBTS_compare = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) __XBTS_insrec = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) __XBTS_delrec = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) __XBTS_newroot = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) __XBTS_killroot = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) __XBTS_increment = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) __XBTS_decrement = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) __XBTS_lshift = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __XBTS_rshift = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __XBTS_split = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) __XBTS_join = 11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) __XBTS_alloc = 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) __XBTS_free = 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) __XBTS_moves = 14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __XBTS_MAX = 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * XFS global statistics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct __xfsstats {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) uint32_t xs_allocx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) uint32_t xs_allocb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) uint32_t xs_freex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) uint32_t xs_freeb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) uint32_t xs_abt_lookup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) uint32_t xs_abt_compare;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) uint32_t xs_abt_insrec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) uint32_t xs_abt_delrec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) uint32_t xs_blk_mapr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) uint32_t xs_blk_mapw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) uint32_t xs_blk_unmap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) uint32_t xs_add_exlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) uint32_t xs_del_exlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) uint32_t xs_look_exlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) uint32_t xs_cmp_exlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) uint32_t xs_bmbt_lookup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) uint32_t xs_bmbt_compare;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) uint32_t xs_bmbt_insrec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) uint32_t xs_bmbt_delrec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) uint32_t xs_dir_lookup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) uint32_t xs_dir_create;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) uint32_t xs_dir_remove;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) uint32_t xs_dir_getdents;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) uint32_t xs_trans_sync;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) uint32_t xs_trans_async;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) uint32_t xs_trans_empty;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) uint32_t xs_ig_attempts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) uint32_t xs_ig_found;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) uint32_t xs_ig_frecycle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) uint32_t xs_ig_missed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) uint32_t xs_ig_dup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) uint32_t xs_ig_reclaims;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) uint32_t xs_ig_attrchg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) uint32_t xs_log_writes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) uint32_t xs_log_blocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) uint32_t xs_log_noiclogs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) uint32_t xs_log_force;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) uint32_t xs_log_force_sleep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) uint32_t xs_try_logspace;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) uint32_t xs_sleep_logspace;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) uint32_t xs_push_ail;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) uint32_t xs_push_ail_success;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) uint32_t xs_push_ail_pushbuf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) uint32_t xs_push_ail_pinned;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) uint32_t xs_push_ail_locked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) uint32_t xs_push_ail_flushing;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) uint32_t xs_push_ail_restarts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) uint32_t xs_push_ail_flush;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) uint32_t xs_xstrat_quick;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) uint32_t xs_xstrat_split;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) uint32_t xs_write_calls;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) uint32_t xs_read_calls;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) uint32_t xs_attr_get;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) uint32_t xs_attr_set;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) uint32_t xs_attr_remove;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) uint32_t xs_attr_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) uint32_t xs_iflush_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) uint32_t xs_icluster_flushcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) uint32_t xs_icluster_flushinode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) uint32_t vn_active; /* # vnodes not on free lists */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) uint32_t vn_alloc; /* # times vn_alloc called */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) uint32_t vn_get; /* # times vn_get called */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) uint32_t vn_hold; /* # times vn_hold called */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) uint32_t vn_rele; /* # times vn_rele called */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) uint32_t vn_reclaim; /* # times vn_reclaim called */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) uint32_t vn_remove; /* # times vn_remove called */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) uint32_t vn_free; /* # times vn_free called */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) uint32_t xb_get;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) uint32_t xb_create;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) uint32_t xb_get_locked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) uint32_t xb_get_locked_waited;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) uint32_t xb_busy_locked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) uint32_t xb_miss_locked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) uint32_t xb_page_retries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) uint32_t xb_page_found;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) uint32_t xb_get_read;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) /* Version 2 btree counters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) uint32_t xs_abtb_2[__XBTS_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) uint32_t xs_abtc_2[__XBTS_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) uint32_t xs_bmbt_2[__XBTS_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) uint32_t xs_ibt_2[__XBTS_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) uint32_t xs_fibt_2[__XBTS_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) uint32_t xs_rmap_2[__XBTS_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) uint32_t xs_refcbt_2[__XBTS_MAX];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) uint32_t xs_qm_dqreclaims;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) uint32_t xs_qm_dqreclaim_misses;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) uint32_t xs_qm_dquot_dups;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) uint32_t xs_qm_dqcachemisses;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) uint32_t xs_qm_dqcachehits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) uint32_t xs_qm_dqwants;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) uint32_t xs_qm_dquot;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) uint32_t xs_qm_dquot_unused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) /* Extra precision counters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) uint64_t xs_xstrat_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) uint64_t xs_write_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) uint64_t xs_read_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) uint64_t defer_relog;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define xfsstats_offset(f) (offsetof(struct __xfsstats, f)/sizeof(uint32_t))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) struct xfsstats {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct __xfsstats s;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) uint32_t a[xfsstats_offset(xs_qm_dquot)];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) * simple wrapper for getting the array index of s struct member offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define XFS_STATS_CALC_INDEX(member) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) (offsetof(struct __xfsstats, member) / (int)sizeof(uint32_t))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) int xfs_stats_format(struct xfsstats __percpu *stats, char *buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) void xfs_stats_clearall(struct xfsstats __percpu *stats);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) extern struct xstats xfsstats;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define XFS_STATS_INC(mp, v) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v++; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v++; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) #define XFS_STATS_DEC(mp, v) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v--; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v--; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #define XFS_STATS_ADD(mp, v, inc) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) per_cpu_ptr(xfsstats.xs_stats, current_cpu())->s.v += (inc); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->s.v += (inc); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define XFS_STATS_INC_OFF(mp, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off]++; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off]++; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define XFS_STATS_DEC_OFF(mp, off) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define XFS_STATS_ADD_OFF(mp, off, inc) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) do { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) per_cpu_ptr(xfsstats.xs_stats, current_cpu())->a[off] += (inc); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->a[off] += (inc); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #if defined(CONFIG_PROC_FS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) extern int xfs_init_procfs(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) extern void xfs_cleanup_procfs(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #else /* !CONFIG_PROC_FS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) static inline int xfs_init_procfs(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) static inline void xfs_cleanup_procfs(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #endif /* !CONFIG_PROC_FS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #endif /* __XFS_STATS_H__ */