diff options
author | Christoph Hellwig <hch@infradead.org> | 2008-10-30 01:58:50 -0400 |
---|---|---|
committer | Lachlan McIlroy <lachlan@sgi.com> | 2008-10-30 01:58:50 -0400 |
commit | 7f7c39ccb6045cf1fd5e7684a484c445291b44d4 (patch) | |
tree | c244475e0ef732d35893ba949468a95f409db7b4 /fs/xfs/xfs_btree_trace.c | |
parent | 3cc7524c8445e6244b055f3fa338529188c7c260 (diff) |
[XFS] make btree tracing generic
Make the existing bmap btree tracing generic so that it applies to all
btree types.
Some fragments lifted from a patch by Dave Chinner.
This adds two files that were missed from the previous btree tracing
checkin.
SGI-PV: 985583
SGI-Modid: xfs-linux-melb:xfs-kern:32210a
Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Signed-off-by: Bill O'Donnell <billodo@sgi.com>
Signed-off-by: David Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/xfs_btree_trace.c')
-rw-r--r-- | fs/xfs/xfs_btree_trace.c | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/fs/xfs/xfs_btree_trace.c b/fs/xfs/xfs_btree_trace.c new file mode 100644 index 000000000000..44ff942a0fda --- /dev/null +++ b/fs/xfs/xfs_btree_trace.c | |||
@@ -0,0 +1,249 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2008 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 | #include "xfs.h" | ||
19 | #include "xfs_types.h" | ||
20 | #include "xfs_inum.h" | ||
21 | #include "xfs_bmap_btree.h" | ||
22 | #include "xfs_alloc_btree.h" | ||
23 | #include "xfs_ialloc_btree.h" | ||
24 | #include "xfs_inode.h" | ||
25 | #include "xfs_btree.h" | ||
26 | #include "xfs_btree_trace.h" | ||
27 | |||
28 | STATIC void | ||
29 | xfs_btree_trace_ptr( | ||
30 | struct xfs_btree_cur *cur, | ||
31 | union xfs_btree_ptr ptr, | ||
32 | __psunsigned_t *high, | ||
33 | __psunsigned_t *low) | ||
34 | { | ||
35 | if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { | ||
36 | __u64 val = be64_to_cpu(ptr.l); | ||
37 | *high = val >> 32; | ||
38 | *low = (int)val; | ||
39 | } else { | ||
40 | *high = 0; | ||
41 | *low = be32_to_cpu(ptr.s); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | /* | ||
46 | * Add a trace buffer entry for arguments, for a buffer & 1 integer arg. | ||
47 | */ | ||
48 | void | ||
49 | xfs_btree_trace_argbi( | ||
50 | const char *func, | ||
51 | struct xfs_btree_cur *cur, | ||
52 | struct xfs_buf *b, | ||
53 | int i, | ||
54 | int line) | ||
55 | { | ||
56 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGBI, | ||
57 | line, (__psunsigned_t)b, i, 0, 0, 0, 0, 0, | ||
58 | 0, 0, 0, 0); | ||
59 | } | ||
60 | |||
61 | /* | ||
62 | * Add a trace buffer entry for arguments, for a buffer & 2 integer args. | ||
63 | */ | ||
64 | void | ||
65 | xfs_btree_trace_argbii( | ||
66 | const char *func, | ||
67 | struct xfs_btree_cur *cur, | ||
68 | struct xfs_buf *b, | ||
69 | int i0, | ||
70 | int i1, | ||
71 | int line) | ||
72 | { | ||
73 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGBII, | ||
74 | line, (__psunsigned_t)b, i0, i1, 0, 0, 0, 0, | ||
75 | 0, 0, 0, 0); | ||
76 | } | ||
77 | |||
78 | /* | ||
79 | * Add a trace buffer entry for arguments, for 3 block-length args | ||
80 | * and an integer arg. | ||
81 | */ | ||
82 | void | ||
83 | xfs_btree_trace_argfffi( | ||
84 | const char *func, | ||
85 | struct xfs_btree_cur *cur, | ||
86 | xfs_dfiloff_t o, | ||
87 | xfs_dfsbno_t b, | ||
88 | xfs_dfilblks_t i, | ||
89 | int j, | ||
90 | int line) | ||
91 | { | ||
92 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGFFFI, | ||
93 | line, | ||
94 | o >> 32, (int)o, | ||
95 | b >> 32, (int)b, | ||
96 | i >> 32, (int)i, | ||
97 | (int)j, 0, 0, 0, 0); | ||
98 | } | ||
99 | |||
100 | /* | ||
101 | * Add a trace buffer entry for arguments, for one integer arg. | ||
102 | */ | ||
103 | void | ||
104 | xfs_btree_trace_argi( | ||
105 | const char *func, | ||
106 | struct xfs_btree_cur *cur, | ||
107 | int i, | ||
108 | int line) | ||
109 | { | ||
110 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGI, | ||
111 | line, i, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); | ||
112 | } | ||
113 | |||
114 | /* | ||
115 | * Add a trace buffer entry for arguments, for int, fsblock, key. | ||
116 | */ | ||
117 | void | ||
118 | xfs_btree_trace_argipk( | ||
119 | const char *func, | ||
120 | struct xfs_btree_cur *cur, | ||
121 | int i, | ||
122 | union xfs_btree_ptr ptr, | ||
123 | union xfs_btree_key *key, | ||
124 | int line) | ||
125 | { | ||
126 | __psunsigned_t high, low; | ||
127 | __uint64_t l0, l1; | ||
128 | |||
129 | xfs_btree_trace_ptr(cur, ptr, &high, &low); | ||
130 | cur->bc_ops->trace_key(cur, key, &l0, &l1); | ||
131 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGIPK, | ||
132 | line, i, high, low, | ||
133 | l0 >> 32, (int)l0, | ||
134 | l1 >> 32, (int)l1, | ||
135 | 0, 0, 0, 0); | ||
136 | } | ||
137 | |||
138 | /* | ||
139 | * Add a trace buffer entry for arguments, for int, fsblock, rec. | ||
140 | */ | ||
141 | void | ||
142 | xfs_btree_trace_argipr( | ||
143 | const char *func, | ||
144 | struct xfs_btree_cur *cur, | ||
145 | int i, | ||
146 | union xfs_btree_ptr ptr, | ||
147 | union xfs_btree_rec *rec, | ||
148 | int line) | ||
149 | { | ||
150 | __psunsigned_t high, low; | ||
151 | __uint64_t l0, l1, l2; | ||
152 | |||
153 | xfs_btree_trace_ptr(cur, ptr, &high, &low); | ||
154 | cur->bc_ops->trace_record(cur, rec, &l0, &l1, &l2); | ||
155 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGIPR, | ||
156 | line, i, | ||
157 | high, low, | ||
158 | l0 >> 32, (int)l0, | ||
159 | l1 >> 32, (int)l1, | ||
160 | l2 >> 32, (int)l2, | ||
161 | 0, 0); | ||
162 | } | ||
163 | |||
164 | /* | ||
165 | * Add a trace buffer entry for arguments, for int, key. | ||
166 | */ | ||
167 | void | ||
168 | xfs_btree_trace_argik( | ||
169 | const char *func, | ||
170 | struct xfs_btree_cur *cur, | ||
171 | int i, | ||
172 | union xfs_btree_key *key, | ||
173 | int line) | ||
174 | { | ||
175 | __uint64_t l0, l1; | ||
176 | |||
177 | cur->bc_ops->trace_key(cur, key, &l0, &l1); | ||
178 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGIK, | ||
179 | line, i, | ||
180 | l0 >> 32, (int)l0, | ||
181 | l1 >> 32, (int)l1, | ||
182 | 0, 0, 0, 0, 0, 0); | ||
183 | } | ||
184 | |||
185 | /* | ||
186 | * Add a trace buffer entry for arguments, for record. | ||
187 | */ | ||
188 | void | ||
189 | xfs_btree_trace_argr( | ||
190 | const char *func, | ||
191 | struct xfs_btree_cur *cur, | ||
192 | union xfs_btree_rec *rec, | ||
193 | int line) | ||
194 | { | ||
195 | __uint64_t l0, l1, l2; | ||
196 | |||
197 | cur->bc_ops->trace_record(cur, rec, &l0, &l1, &l2); | ||
198 | cur->bc_ops->trace_enter(cur, func, XBT_ARGS, XFS_BTREE_KTRACE_ARGR, | ||
199 | line, | ||
200 | l0 >> 32, (int)l0, | ||
201 | l1 >> 32, (int)l1, | ||
202 | l2 >> 32, (int)l2, | ||
203 | 0, 0, 0, 0, 0); | ||
204 | } | ||
205 | |||
206 | /* | ||
207 | * Add a trace buffer entry for the cursor/operation. | ||
208 | */ | ||
209 | void | ||
210 | xfs_btree_trace_cursor( | ||
211 | const char *func, | ||
212 | struct xfs_btree_cur *cur, | ||
213 | int type, | ||
214 | int line) | ||
215 | { | ||
216 | __uint32_t s0; | ||
217 | __uint64_t l0, l1; | ||
218 | char *s; | ||
219 | |||
220 | switch (type) { | ||
221 | case XBT_ARGS: | ||
222 | s = "args"; | ||
223 | break; | ||
224 | case XBT_ENTRY: | ||
225 | s = "entry"; | ||
226 | break; | ||
227 | case XBT_ERROR: | ||
228 | s = "error"; | ||
229 | break; | ||
230 | case XBT_EXIT: | ||
231 | s = "exit"; | ||
232 | break; | ||
233 | default: | ||
234 | s = "unknown"; | ||
235 | break; | ||
236 | } | ||
237 | |||
238 | cur->bc_ops->trace_cursor(cur, &s0, &l0, &l1); | ||
239 | cur->bc_ops->trace_enter(cur, func, s, XFS_BTREE_KTRACE_CUR, line, | ||
240 | s0, | ||
241 | l0 >> 32, (int)l0, | ||
242 | l1 >> 32, (int)l1, | ||
243 | (__psunsigned_t)cur->bc_bufs[0], | ||
244 | (__psunsigned_t)cur->bc_bufs[1], | ||
245 | (__psunsigned_t)cur->bc_bufs[2], | ||
246 | (__psunsigned_t)cur->bc_bufs[3], | ||
247 | (cur->bc_ptrs[0] << 16) | cur->bc_ptrs[1], | ||
248 | (cur->bc_ptrs[2] << 16) | cur->bc_ptrs[3]); | ||
249 | } | ||