fix ITER_PIPE interaction with direct_IO
[cascardo/linux.git] / fs / xfs / xfs_stats.h
1 /*
2  * Copyright (c) 2000,2005 Silicon Graphics, Inc.
3  * All Rights Reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it would be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write the Free Software Foundation,
16  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18 #ifndef __XFS_STATS_H__
19 #define __XFS_STATS_H__
20
21
22 #include <linux/percpu.h>
23
24 /*
25  * XFS global statistics
26  */
27 struct xfsstats {
28 # define XFSSTAT_END_EXTENT_ALLOC       4
29         __uint32_t              xs_allocx;
30         __uint32_t              xs_allocb;
31         __uint32_t              xs_freex;
32         __uint32_t              xs_freeb;
33 # define XFSSTAT_END_ALLOC_BTREE        (XFSSTAT_END_EXTENT_ALLOC+4)
34         __uint32_t              xs_abt_lookup;
35         __uint32_t              xs_abt_compare;
36         __uint32_t              xs_abt_insrec;
37         __uint32_t              xs_abt_delrec;
38 # define XFSSTAT_END_BLOCK_MAPPING      (XFSSTAT_END_ALLOC_BTREE+7)
39         __uint32_t              xs_blk_mapr;
40         __uint32_t              xs_blk_mapw;
41         __uint32_t              xs_blk_unmap;
42         __uint32_t              xs_add_exlist;
43         __uint32_t              xs_del_exlist;
44         __uint32_t              xs_look_exlist;
45         __uint32_t              xs_cmp_exlist;
46 # define XFSSTAT_END_BLOCK_MAP_BTREE    (XFSSTAT_END_BLOCK_MAPPING+4)
47         __uint32_t              xs_bmbt_lookup;
48         __uint32_t              xs_bmbt_compare;
49         __uint32_t              xs_bmbt_insrec;
50         __uint32_t              xs_bmbt_delrec;
51 # define XFSSTAT_END_DIRECTORY_OPS      (XFSSTAT_END_BLOCK_MAP_BTREE+4)
52         __uint32_t              xs_dir_lookup;
53         __uint32_t              xs_dir_create;
54         __uint32_t              xs_dir_remove;
55         __uint32_t              xs_dir_getdents;
56 # define XFSSTAT_END_TRANSACTIONS       (XFSSTAT_END_DIRECTORY_OPS+3)
57         __uint32_t              xs_trans_sync;
58         __uint32_t              xs_trans_async;
59         __uint32_t              xs_trans_empty;
60 # define XFSSTAT_END_INODE_OPS          (XFSSTAT_END_TRANSACTIONS+7)
61         __uint32_t              xs_ig_attempts;
62         __uint32_t              xs_ig_found;
63         __uint32_t              xs_ig_frecycle;
64         __uint32_t              xs_ig_missed;
65         __uint32_t              xs_ig_dup;
66         __uint32_t              xs_ig_reclaims;
67         __uint32_t              xs_ig_attrchg;
68 # define XFSSTAT_END_LOG_OPS            (XFSSTAT_END_INODE_OPS+5)
69         __uint32_t              xs_log_writes;
70         __uint32_t              xs_log_blocks;
71         __uint32_t              xs_log_noiclogs;
72         __uint32_t              xs_log_force;
73         __uint32_t              xs_log_force_sleep;
74 # define XFSSTAT_END_TAIL_PUSHING       (XFSSTAT_END_LOG_OPS+10)
75         __uint32_t              xs_try_logspace;
76         __uint32_t              xs_sleep_logspace;
77         __uint32_t              xs_push_ail;
78         __uint32_t              xs_push_ail_success;
79         __uint32_t              xs_push_ail_pushbuf;
80         __uint32_t              xs_push_ail_pinned;
81         __uint32_t              xs_push_ail_locked;
82         __uint32_t              xs_push_ail_flushing;
83         __uint32_t              xs_push_ail_restarts;
84         __uint32_t              xs_push_ail_flush;
85 # define XFSSTAT_END_WRITE_CONVERT      (XFSSTAT_END_TAIL_PUSHING+2)
86         __uint32_t              xs_xstrat_quick;
87         __uint32_t              xs_xstrat_split;
88 # define XFSSTAT_END_READ_WRITE_OPS     (XFSSTAT_END_WRITE_CONVERT+2)
89         __uint32_t              xs_write_calls;
90         __uint32_t              xs_read_calls;
91 # define XFSSTAT_END_ATTRIBUTE_OPS      (XFSSTAT_END_READ_WRITE_OPS+4)
92         __uint32_t              xs_attr_get;
93         __uint32_t              xs_attr_set;
94         __uint32_t              xs_attr_remove;
95         __uint32_t              xs_attr_list;
96 # define XFSSTAT_END_INODE_CLUSTER      (XFSSTAT_END_ATTRIBUTE_OPS+3)
97         __uint32_t              xs_iflush_count;
98         __uint32_t              xs_icluster_flushcnt;
99         __uint32_t              xs_icluster_flushinode;
100 # define XFSSTAT_END_VNODE_OPS          (XFSSTAT_END_INODE_CLUSTER+8)
101         __uint32_t              vn_active;      /* # vnodes not on free lists */
102         __uint32_t              vn_alloc;       /* # times vn_alloc called */
103         __uint32_t              vn_get;         /* # times vn_get called */
104         __uint32_t              vn_hold;        /* # times vn_hold called */
105         __uint32_t              vn_rele;        /* # times vn_rele called */
106         __uint32_t              vn_reclaim;     /* # times vn_reclaim called */
107         __uint32_t              vn_remove;      /* # times vn_remove called */
108         __uint32_t              vn_free;        /* # times vn_free called */
109 #define XFSSTAT_END_BUF                 (XFSSTAT_END_VNODE_OPS+9)
110         __uint32_t              xb_get;
111         __uint32_t              xb_create;
112         __uint32_t              xb_get_locked;
113         __uint32_t              xb_get_locked_waited;
114         __uint32_t              xb_busy_locked;
115         __uint32_t              xb_miss_locked;
116         __uint32_t              xb_page_retries;
117         __uint32_t              xb_page_found;
118         __uint32_t              xb_get_read;
119 /* Version 2 btree counters */
120 #define XFSSTAT_END_ABTB_V2             (XFSSTAT_END_BUF+15)
121         __uint32_t              xs_abtb_2_lookup;
122         __uint32_t              xs_abtb_2_compare;
123         __uint32_t              xs_abtb_2_insrec;
124         __uint32_t              xs_abtb_2_delrec;
125         __uint32_t              xs_abtb_2_newroot;
126         __uint32_t              xs_abtb_2_killroot;
127         __uint32_t              xs_abtb_2_increment;
128         __uint32_t              xs_abtb_2_decrement;
129         __uint32_t              xs_abtb_2_lshift;
130         __uint32_t              xs_abtb_2_rshift;
131         __uint32_t              xs_abtb_2_split;
132         __uint32_t              xs_abtb_2_join;
133         __uint32_t              xs_abtb_2_alloc;
134         __uint32_t              xs_abtb_2_free;
135         __uint32_t              xs_abtb_2_moves;
136 #define XFSSTAT_END_ABTC_V2             (XFSSTAT_END_ABTB_V2+15)
137         __uint32_t              xs_abtc_2_lookup;
138         __uint32_t              xs_abtc_2_compare;
139         __uint32_t              xs_abtc_2_insrec;
140         __uint32_t              xs_abtc_2_delrec;
141         __uint32_t              xs_abtc_2_newroot;
142         __uint32_t              xs_abtc_2_killroot;
143         __uint32_t              xs_abtc_2_increment;
144         __uint32_t              xs_abtc_2_decrement;
145         __uint32_t              xs_abtc_2_lshift;
146         __uint32_t              xs_abtc_2_rshift;
147         __uint32_t              xs_abtc_2_split;
148         __uint32_t              xs_abtc_2_join;
149         __uint32_t              xs_abtc_2_alloc;
150         __uint32_t              xs_abtc_2_free;
151         __uint32_t              xs_abtc_2_moves;
152 #define XFSSTAT_END_BMBT_V2             (XFSSTAT_END_ABTC_V2+15)
153         __uint32_t              xs_bmbt_2_lookup;
154         __uint32_t              xs_bmbt_2_compare;
155         __uint32_t              xs_bmbt_2_insrec;
156         __uint32_t              xs_bmbt_2_delrec;
157         __uint32_t              xs_bmbt_2_newroot;
158         __uint32_t              xs_bmbt_2_killroot;
159         __uint32_t              xs_bmbt_2_increment;
160         __uint32_t              xs_bmbt_2_decrement;
161         __uint32_t              xs_bmbt_2_lshift;
162         __uint32_t              xs_bmbt_2_rshift;
163         __uint32_t              xs_bmbt_2_split;
164         __uint32_t              xs_bmbt_2_join;
165         __uint32_t              xs_bmbt_2_alloc;
166         __uint32_t              xs_bmbt_2_free;
167         __uint32_t              xs_bmbt_2_moves;
168 #define XFSSTAT_END_IBT_V2              (XFSSTAT_END_BMBT_V2+15)
169         __uint32_t              xs_ibt_2_lookup;
170         __uint32_t              xs_ibt_2_compare;
171         __uint32_t              xs_ibt_2_insrec;
172         __uint32_t              xs_ibt_2_delrec;
173         __uint32_t              xs_ibt_2_newroot;
174         __uint32_t              xs_ibt_2_killroot;
175         __uint32_t              xs_ibt_2_increment;
176         __uint32_t              xs_ibt_2_decrement;
177         __uint32_t              xs_ibt_2_lshift;
178         __uint32_t              xs_ibt_2_rshift;
179         __uint32_t              xs_ibt_2_split;
180         __uint32_t              xs_ibt_2_join;
181         __uint32_t              xs_ibt_2_alloc;
182         __uint32_t              xs_ibt_2_free;
183         __uint32_t              xs_ibt_2_moves;
184 #define XFSSTAT_END_FIBT_V2             (XFSSTAT_END_IBT_V2+15)
185         __uint32_t              xs_fibt_2_lookup;
186         __uint32_t              xs_fibt_2_compare;
187         __uint32_t              xs_fibt_2_insrec;
188         __uint32_t              xs_fibt_2_delrec;
189         __uint32_t              xs_fibt_2_newroot;
190         __uint32_t              xs_fibt_2_killroot;
191         __uint32_t              xs_fibt_2_increment;
192         __uint32_t              xs_fibt_2_decrement;
193         __uint32_t              xs_fibt_2_lshift;
194         __uint32_t              xs_fibt_2_rshift;
195         __uint32_t              xs_fibt_2_split;
196         __uint32_t              xs_fibt_2_join;
197         __uint32_t              xs_fibt_2_alloc;
198         __uint32_t              xs_fibt_2_free;
199         __uint32_t              xs_fibt_2_moves;
200 #define XFSSTAT_END_RMAP_V2             (XFSSTAT_END_FIBT_V2+15)
201         __uint32_t              xs_rmap_2_lookup;
202         __uint32_t              xs_rmap_2_compare;
203         __uint32_t              xs_rmap_2_insrec;
204         __uint32_t              xs_rmap_2_delrec;
205         __uint32_t              xs_rmap_2_newroot;
206         __uint32_t              xs_rmap_2_killroot;
207         __uint32_t              xs_rmap_2_increment;
208         __uint32_t              xs_rmap_2_decrement;
209         __uint32_t              xs_rmap_2_lshift;
210         __uint32_t              xs_rmap_2_rshift;
211         __uint32_t              xs_rmap_2_split;
212         __uint32_t              xs_rmap_2_join;
213         __uint32_t              xs_rmap_2_alloc;
214         __uint32_t              xs_rmap_2_free;
215         __uint32_t              xs_rmap_2_moves;
216 #define XFSSTAT_END_XQMSTAT             (XFSSTAT_END_RMAP_V2+6)
217         __uint32_t              xs_qm_dqreclaims;
218         __uint32_t              xs_qm_dqreclaim_misses;
219         __uint32_t              xs_qm_dquot_dups;
220         __uint32_t              xs_qm_dqcachemisses;
221         __uint32_t              xs_qm_dqcachehits;
222         __uint32_t              xs_qm_dqwants;
223 #define XFSSTAT_END_QM                  (XFSSTAT_END_XQMSTAT+2)
224         __uint32_t              xs_qm_dquot;
225         __uint32_t              xs_qm_dquot_unused;
226 /* Extra precision counters */
227         __uint64_t              xs_xstrat_bytes;
228         __uint64_t              xs_write_bytes;
229         __uint64_t              xs_read_bytes;
230 };
231
232 int xfs_stats_format(struct xfsstats __percpu *stats, char *buf);
233 void xfs_stats_clearall(struct xfsstats __percpu *stats);
234 extern struct xstats xfsstats;
235
236 #define XFS_STATS_INC(mp, v)                                    \
237 do {                                                            \
238         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->v++;     \
239         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->v++;  \
240 } while (0)
241
242 #define XFS_STATS_DEC(mp, v)                                    \
243 do {                                                            \
244         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->v--;     \
245         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->v--;  \
246 } while (0)
247
248 #define XFS_STATS_ADD(mp, v, inc)                                       \
249 do {                                                                    \
250         per_cpu_ptr(xfsstats.xs_stats, current_cpu())->v += (inc);      \
251         per_cpu_ptr(mp->m_stats.xs_stats, current_cpu())->v += (inc);   \
252 } while (0)
253
254 #if defined(CONFIG_PROC_FS)
255
256 extern int xfs_init_procfs(void);
257 extern void xfs_cleanup_procfs(void);
258
259
260 #else   /* !CONFIG_PROC_FS */
261
262 static inline int xfs_init_procfs(void)
263 {
264         return 0;
265 }
266
267 static inline void xfs_cleanup_procfs(void)
268 {
269 }
270
271 #endif  /* !CONFIG_PROC_FS */
272
273 #endif /* __XFS_STATS_H__ */