diff options
-rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 2 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl.c | 2 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 40 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.c | 46 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.h | 21 | ||||
-rw-r--r-- | fs/xfs/xfs_dir2.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_iget.c | 10 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.c | 7 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.h | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_rename.c | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_utils.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_utils.h | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 42 |
13 files changed, 94 insertions, 89 deletions
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 1dd198ec2890..f766c7f74dc0 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
@@ -1526,7 +1526,7 @@ xfs_vm_bmap( | |||
1526 | struct inode *inode = (struct inode *)mapping->host; | 1526 | struct inode *inode = (struct inode *)mapping->host; |
1527 | struct xfs_inode *ip = XFS_I(inode); | 1527 | struct xfs_inode *ip = XFS_I(inode); |
1528 | 1528 | ||
1529 | vn_trace_entry(vn_from_inode(inode), __FUNCTION__, | 1529 | vn_trace_entry(XFS_I(inode), __FUNCTION__, |
1530 | (inst_t *)__return_address); | 1530 | (inst_t *)__return_address); |
1531 | xfs_rwlock(ip, VRWLOCK_READ); | 1531 | xfs_rwlock(ip, VRWLOCK_READ); |
1532 | xfs_flush_pages(ip, (xfs_off_t)0, -1, 0, FI_REMAPF); | 1532 | xfs_flush_pages(ip, (xfs_off_t)0, -1, 0, FI_REMAPF); |
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index 8ff465db909b..4c38e27ed184 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c | |||
@@ -733,7 +733,7 @@ xfs_ioctl( | |||
733 | xfs_mount_t *mp = ip->i_mount; | 733 | xfs_mount_t *mp = ip->i_mount; |
734 | int error; | 734 | int error; |
735 | 735 | ||
736 | vn_trace_entry(vp, "xfs_ioctl", (inst_t *)__return_address); | 736 | vn_trace_entry(XFS_I(inode), "xfs_ioctl", (inst_t *)__return_address); |
737 | 737 | ||
738 | switch (cmd) { | 738 | switch (cmd) { |
739 | 739 | ||
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 47bca4e4696b..bb0c4a932fd7 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
@@ -403,7 +403,7 @@ xfs_fs_write_inode( | |||
403 | { | 403 | { |
404 | int error = 0, flags = FLUSH_INODE; | 404 | int error = 0, flags = FLUSH_INODE; |
405 | 405 | ||
406 | vn_trace_entry(vn_from_inode(inode), __FUNCTION__, | 406 | vn_trace_entry(XFS_I(inode), __FUNCTION__, |
407 | (inst_t *)__return_address); | 407 | (inst_t *)__return_address); |
408 | if (sync) { | 408 | if (sync) { |
409 | filemap_fdatawait(inode->i_mapping); | 409 | filemap_fdatawait(inode->i_mapping); |
@@ -425,34 +425,27 @@ STATIC void | |||
425 | xfs_fs_clear_inode( | 425 | xfs_fs_clear_inode( |
426 | struct inode *inode) | 426 | struct inode *inode) |
427 | { | 427 | { |
428 | bhv_vnode_t *vp = vn_from_inode(inode); | 428 | xfs_inode_t *ip = XFS_I(inode); |
429 | |||
430 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | ||
431 | |||
432 | XFS_STATS_INC(vn_rele); | ||
433 | XFS_STATS_INC(vn_remove); | ||
434 | XFS_STATS_INC(vn_reclaim); | ||
435 | XFS_STATS_DEC(vn_active); | ||
436 | 429 | ||
437 | /* | 430 | /* |
438 | * This can happen because xfs_iget_core calls xfs_idestroy if we | 431 | * ip can be null when xfs_iget_core calls xfs_idestroy if we |
439 | * find an inode with di_mode == 0 but without IGET_CREATE set. | 432 | * find an inode with di_mode == 0 but without IGET_CREATE set. |
440 | */ | 433 | */ |
441 | if (XFS_I(inode)) | 434 | if (ip) { |
442 | xfs_inactive(XFS_I(inode)); | 435 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
443 | 436 | ||
444 | 437 | XFS_STATS_INC(vn_rele); | |
445 | if (XFS_I(inode)) { | 438 | XFS_STATS_INC(vn_remove); |
446 | xfs_iflags_clear(XFS_I(inode), XFS_IMODIFIED); | 439 | XFS_STATS_INC(vn_reclaim); |
447 | if (xfs_reclaim(XFS_I(inode))) | 440 | XFS_STATS_DEC(vn_active); |
448 | panic("%s: cannot reclaim 0x%p\n", __FUNCTION__, vp); | 441 | |
442 | xfs_inactive(ip); | ||
443 | xfs_iflags_clear(ip, XFS_IMODIFIED); | ||
444 | if (xfs_reclaim(ip)) | ||
445 | panic("%s: cannot reclaim 0x%p\n", __FUNCTION__, inode); | ||
449 | } | 446 | } |
450 | 447 | ||
451 | ASSERT(XFS_I(inode) == NULL); | 448 | ASSERT(XFS_I(inode) == NULL); |
452 | |||
453 | #ifdef XFS_VNODE_TRACE | ||
454 | ktrace_free(vp->v_trace); | ||
455 | #endif | ||
456 | } | 449 | } |
457 | 450 | ||
458 | /* | 451 | /* |
@@ -840,7 +833,8 @@ xfs_fs_fill_super( | |||
840 | } | 833 | } |
841 | if ((error = xfs_fs_start_syncd(vfsp))) | 834 | if ((error = xfs_fs_start_syncd(vfsp))) |
842 | goto fail_vnrele; | 835 | goto fail_vnrele; |
843 | vn_trace_exit(rootvp, __FUNCTION__, (inst_t *)__return_address); | 836 | vn_trace_exit(XFS_I(sb->s_root->d_inode), __FUNCTION__, |
837 | (inst_t *)__return_address); | ||
844 | 838 | ||
845 | kmem_free(args, sizeof(*args)); | 839 | kmem_free(args, sizeof(*args)); |
846 | return 0; | 840 | return 0; |
diff --git a/fs/xfs/linux-2.6/xfs_vnode.c b/fs/xfs/linux-2.6/xfs_vnode.c index bde8d2e7f559..9d9464cf8de4 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.c +++ b/fs/xfs/linux-2.6/xfs_vnode.c | |||
@@ -103,11 +103,6 @@ vn_initialize( | |||
103 | 103 | ||
104 | ASSERT(VN_CACHED(vp) == 0); | 104 | ASSERT(VN_CACHED(vp) == 0); |
105 | 105 | ||
106 | #ifdef XFS_VNODE_TRACE | ||
107 | vp->v_trace = ktrace_alloc(VNODE_TRACE_SIZE, KM_SLEEP); | ||
108 | #endif /* XFS_VNODE_TRACE */ | ||
109 | |||
110 | vn_trace_exit(vp, __FUNCTION__, (inst_t *)__return_address); | ||
111 | return vp; | 106 | return vp; |
112 | } | 107 | } |
113 | 108 | ||
@@ -158,7 +153,7 @@ __vn_revalidate( | |||
158 | { | 153 | { |
159 | int error; | 154 | int error; |
160 | 155 | ||
161 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | 156 | vn_trace_entry(xfs_vtoi(vp), __FUNCTION__, (inst_t *)__return_address); |
162 | vattr->va_mask = XFS_AT_STAT | XFS_AT_XFLAGS; | 157 | vattr->va_mask = XFS_AT_STAT | XFS_AT_XFLAGS; |
163 | error = xfs_getattr(xfs_vtoi(vp), vattr, 0); | 158 | error = xfs_getattr(xfs_vtoi(vp), vattr, 0); |
164 | if (likely(!error)) { | 159 | if (likely(!error)) { |
@@ -196,12 +191,25 @@ vn_hold( | |||
196 | 191 | ||
197 | #ifdef XFS_VNODE_TRACE | 192 | #ifdef XFS_VNODE_TRACE |
198 | 193 | ||
199 | #define KTRACE_ENTER(vp, vk, s, line, ra) \ | 194 | /* |
200 | ktrace_enter( (vp)->v_trace, \ | 195 | * Reference count of Linux inode if present, -1 if the xfs_inode |
196 | * has no associated Linux inode. | ||
197 | */ | ||
198 | static inline int xfs_icount(struct xfs_inode *ip) | ||
199 | { | ||
200 | bhv_vnode_t *vp = XFS_ITOV_NULL(ip); | ||
201 | |||
202 | if (vp) | ||
203 | return vn_count(vp); | ||
204 | return -1; | ||
205 | } | ||
206 | |||
207 | #define KTRACE_ENTER(ip, vk, s, line, ra) \ | ||
208 | ktrace_enter( (ip)->i_trace, \ | ||
201 | /* 0 */ (void *)(__psint_t)(vk), \ | 209 | /* 0 */ (void *)(__psint_t)(vk), \ |
202 | /* 1 */ (void *)(s), \ | 210 | /* 1 */ (void *)(s), \ |
203 | /* 2 */ (void *)(__psint_t) line, \ | 211 | /* 2 */ (void *)(__psint_t) line, \ |
204 | /* 3 */ (void *)(__psint_t)(vn_count(vp)), \ | 212 | /* 3 */ (void *)(__psint_t)xfs_icount(ip), \ |
205 | /* 4 */ (void *)(ra), \ | 213 | /* 4 */ (void *)(ra), \ |
206 | /* 5 */ NULL, \ | 214 | /* 5 */ NULL, \ |
207 | /* 6 */ (void *)(__psint_t)current_cpu(), \ | 215 | /* 6 */ (void *)(__psint_t)current_cpu(), \ |
@@ -213,32 +221,32 @@ vn_hold( | |||
213 | * Vnode tracing code. | 221 | * Vnode tracing code. |
214 | */ | 222 | */ |
215 | void | 223 | void |
216 | vn_trace_entry(bhv_vnode_t *vp, const char *func, inst_t *ra) | 224 | vn_trace_entry(xfs_inode_t *ip, const char *func, inst_t *ra) |
217 | { | 225 | { |
218 | KTRACE_ENTER(vp, VNODE_KTRACE_ENTRY, func, 0, ra); | 226 | KTRACE_ENTER(ip, VNODE_KTRACE_ENTRY, func, 0, ra); |
219 | } | 227 | } |
220 | 228 | ||
221 | void | 229 | void |
222 | vn_trace_exit(bhv_vnode_t *vp, const char *func, inst_t *ra) | 230 | vn_trace_exit(xfs_inode_t *ip, const char *func, inst_t *ra) |
223 | { | 231 | { |
224 | KTRACE_ENTER(vp, VNODE_KTRACE_EXIT, func, 0, ra); | 232 | KTRACE_ENTER(ip, VNODE_KTRACE_EXIT, func, 0, ra); |
225 | } | 233 | } |
226 | 234 | ||
227 | void | 235 | void |
228 | vn_trace_hold(bhv_vnode_t *vp, char *file, int line, inst_t *ra) | 236 | vn_trace_hold(xfs_inode_t *ip, char *file, int line, inst_t *ra) |
229 | { | 237 | { |
230 | KTRACE_ENTER(vp, VNODE_KTRACE_HOLD, file, line, ra); | 238 | KTRACE_ENTER(ip, VNODE_KTRACE_HOLD, file, line, ra); |
231 | } | 239 | } |
232 | 240 | ||
233 | void | 241 | void |
234 | vn_trace_ref(bhv_vnode_t *vp, char *file, int line, inst_t *ra) | 242 | vn_trace_ref(xfs_inode_t *ip, char *file, int line, inst_t *ra) |
235 | { | 243 | { |
236 | KTRACE_ENTER(vp, VNODE_KTRACE_REF, file, line, ra); | 244 | KTRACE_ENTER(ip, VNODE_KTRACE_REF, file, line, ra); |
237 | } | 245 | } |
238 | 246 | ||
239 | void | 247 | void |
240 | vn_trace_rele(bhv_vnode_t *vp, char *file, int line, inst_t *ra) | 248 | vn_trace_rele(xfs_inode_t *ip, char *file, int line, inst_t *ra) |
241 | { | 249 | { |
242 | KTRACE_ENTER(vp, VNODE_KTRACE_RELE, file, line, ra); | 250 | KTRACE_ENTER(ip, VNODE_KTRACE_RELE, file, line, ra); |
243 | } | 251 | } |
244 | #endif /* XFS_VNODE_TRACE */ | 252 | #endif /* XFS_VNODE_TRACE */ |
diff --git a/fs/xfs/linux-2.6/xfs_vnode.h b/fs/xfs/linux-2.6/xfs_vnode.h index 321346d95267..2b161361c1a0 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.h +++ b/fs/xfs/linux-2.6/xfs_vnode.h | |||
@@ -29,9 +29,6 @@ typedef __u64 bhv_vnumber_t; | |||
29 | 29 | ||
30 | typedef struct bhv_vnode { | 30 | typedef struct bhv_vnode { |
31 | bhv_vnumber_t v_number; /* in-core vnode number */ | 31 | bhv_vnumber_t v_number; /* in-core vnode number */ |
32 | #ifdef XFS_VNODE_TRACE | ||
33 | struct ktrace *v_trace; /* trace header structure */ | ||
34 | #endif | ||
35 | struct inode v_inode; /* Linux inode */ | 32 | struct inode v_inode; /* Linux inode */ |
36 | /* inode MUST be last */ | 33 | /* inode MUST be last */ |
37 | } bhv_vnode_t; | 34 | } bhv_vnode_t; |
@@ -222,9 +219,9 @@ extern bhv_vnode_t *vn_hold(struct bhv_vnode *); | |||
222 | #if defined(XFS_VNODE_TRACE) | 219 | #if defined(XFS_VNODE_TRACE) |
223 | #define VN_HOLD(vp) \ | 220 | #define VN_HOLD(vp) \ |
224 | ((void)vn_hold(vp), \ | 221 | ((void)vn_hold(vp), \ |
225 | vn_trace_hold(vp, __FILE__, __LINE__, (inst_t *)__return_address)) | 222 | vn_trace_hold(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address)) |
226 | #define VN_RELE(vp) \ | 223 | #define VN_RELE(vp) \ |
227 | (vn_trace_rele(vp, __FILE__, __LINE__, (inst_t *)__return_address), \ | 224 | (vn_trace_rele(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address), \ |
228 | iput(vn_to_inode(vp))) | 225 | iput(vn_to_inode(vp))) |
229 | #else | 226 | #else |
230 | #define VN_HOLD(vp) ((void)vn_hold(vp)) | 227 | #define VN_HOLD(vp) ((void)vn_hold(vp)) |
@@ -314,21 +311,17 @@ static inline void vn_atime_to_time_t(bhv_vnode_t *vp, time_t *tt) | |||
314 | #define VNODE_KTRACE_REF 4 | 311 | #define VNODE_KTRACE_REF 4 |
315 | #define VNODE_KTRACE_RELE 5 | 312 | #define VNODE_KTRACE_RELE 5 |
316 | 313 | ||
317 | extern void vn_trace_entry(struct bhv_vnode *, const char *, inst_t *); | 314 | extern void vn_trace_entry(struct xfs_inode *, const char *, inst_t *); |
318 | extern void vn_trace_exit(struct bhv_vnode *, const char *, inst_t *); | 315 | extern void vn_trace_exit(struct xfs_inode *, const char *, inst_t *); |
319 | extern void vn_trace_hold(struct bhv_vnode *, char *, int, inst_t *); | 316 | extern void vn_trace_hold(struct xfs_inode *, char *, int, inst_t *); |
320 | extern void vn_trace_ref(struct bhv_vnode *, char *, int, inst_t *); | 317 | extern void vn_trace_ref(struct xfs_inode *, char *, int, inst_t *); |
321 | extern void vn_trace_rele(struct bhv_vnode *, char *, int, inst_t *); | 318 | extern void vn_trace_rele(struct xfs_inode *, char *, int, inst_t *); |
322 | |||
323 | #define VN_TRACE(vp) \ | ||
324 | vn_trace_ref(vp, __FILE__, __LINE__, (inst_t *)__return_address) | ||
325 | #else | 319 | #else |
326 | #define vn_trace_entry(a,b,c) | 320 | #define vn_trace_entry(a,b,c) |
327 | #define vn_trace_exit(a,b,c) | 321 | #define vn_trace_exit(a,b,c) |
328 | #define vn_trace_hold(a,b,c,d) | 322 | #define vn_trace_hold(a,b,c,d) |
329 | #define vn_trace_ref(a,b,c,d) | 323 | #define vn_trace_ref(a,b,c,d) |
330 | #define vn_trace_rele(a,b,c,d) | 324 | #define vn_trace_rele(a,b,c,d) |
331 | #define VN_TRACE(vp) | ||
332 | #endif | 325 | #endif |
333 | 326 | ||
334 | #endif /* __XFS_VNODE_H__ */ | 327 | #endif /* __XFS_VNODE_H__ */ |
diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c index 12001bf0d0cb..b0f1ee8fcb90 100644 --- a/fs/xfs/xfs_dir2.c +++ b/fs/xfs/xfs_dir2.c | |||
@@ -301,7 +301,7 @@ xfs_readdir( | |||
301 | int rval; /* return value */ | 301 | int rval; /* return value */ |
302 | int v; /* type-checking value */ | 302 | int v; /* type-checking value */ |
303 | 303 | ||
304 | vn_trace_entry(XFS_ITOV(dp), __FUNCTION__, (inst_t *)__return_address); | 304 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
305 | 305 | ||
306 | if (XFS_FORCED_SHUTDOWN(dp->i_mount)) | 306 | if (XFS_FORCED_SHUTDOWN(dp->i_mount)) |
307 | return XFS_ERROR(EIO); | 307 | return XFS_ERROR(EIO); |
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index ee13d6d708c8..001cec705e28 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
@@ -157,7 +157,7 @@ again: | |||
157 | goto again; | 157 | goto again; |
158 | } | 158 | } |
159 | 159 | ||
160 | vn_trace_exit(vp, "xfs_iget.alloc", | 160 | vn_trace_exit(ip, "xfs_iget.alloc", |
161 | (inst_t *)__return_address); | 161 | (inst_t *)__return_address); |
162 | 162 | ||
163 | XFS_STATS_INC(xs_ig_found); | 163 | XFS_STATS_INC(xs_ig_found); |
@@ -212,7 +212,7 @@ finish_inode: | |||
212 | xfs_ilock(ip, lock_flags); | 212 | xfs_ilock(ip, lock_flags); |
213 | 213 | ||
214 | xfs_iflags_clear(ip, XFS_ISTALE); | 214 | xfs_iflags_clear(ip, XFS_ISTALE); |
215 | vn_trace_exit(vp, "xfs_iget.found", | 215 | vn_trace_exit(ip, "xfs_iget.found", |
216 | (inst_t *)__return_address); | 216 | (inst_t *)__return_address); |
217 | goto return_ip; | 217 | goto return_ip; |
218 | } | 218 | } |
@@ -234,7 +234,7 @@ finish_inode: | |||
234 | return error; | 234 | return error; |
235 | } | 235 | } |
236 | 236 | ||
237 | vn_trace_exit(vp, "xfs_iget.alloc", (inst_t *)__return_address); | 237 | vn_trace_exit(ip, "xfs_iget.alloc", (inst_t *)__return_address); |
238 | 238 | ||
239 | xfs_inode_lock_init(ip, vp); | 239 | xfs_inode_lock_init(ip, vp); |
240 | xfs_iocore_inode_init(ip); | 240 | xfs_iocore_inode_init(ip); |
@@ -467,7 +467,7 @@ xfs_iput(xfs_inode_t *ip, | |||
467 | { | 467 | { |
468 | bhv_vnode_t *vp = XFS_ITOV(ip); | 468 | bhv_vnode_t *vp = XFS_ITOV(ip); |
469 | 469 | ||
470 | vn_trace_entry(vp, "xfs_iput", (inst_t *)__return_address); | 470 | vn_trace_entry(ip, "xfs_iput", (inst_t *)__return_address); |
471 | xfs_iunlock(ip, lock_flags); | 471 | xfs_iunlock(ip, lock_flags); |
472 | VN_RELE(vp); | 472 | VN_RELE(vp); |
473 | } | 473 | } |
@@ -482,7 +482,7 @@ xfs_iput_new(xfs_inode_t *ip, | |||
482 | bhv_vnode_t *vp = XFS_ITOV(ip); | 482 | bhv_vnode_t *vp = XFS_ITOV(ip); |
483 | struct inode *inode = vn_to_inode(vp); | 483 | struct inode *inode = vn_to_inode(vp); |
484 | 484 | ||
485 | vn_trace_entry(vp, "xfs_iput_new", (inst_t *)__return_address); | 485 | vn_trace_entry(ip, "xfs_iput_new", (inst_t *)__return_address); |
486 | 486 | ||
487 | if ((ip->i_d.di_mode == 0)) { | 487 | if ((ip->i_d.di_mode == 0)) { |
488 | ASSERT(!xfs_iflags_test(ip, XFS_IRECLAIMABLE)); | 488 | ASSERT(!xfs_iflags_test(ip, XFS_IRECLAIMABLE)); |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 0349e714dc30..b82f4e43ef3e 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
@@ -884,6 +884,9 @@ xfs_iread( | |||
884 | * Initialize inode's trace buffers. | 884 | * Initialize inode's trace buffers. |
885 | * Do this before xfs_iformat in case it adds entries. | 885 | * Do this before xfs_iformat in case it adds entries. |
886 | */ | 886 | */ |
887 | #ifdef XFS_VNODE_TRACE | ||
888 | ip->i_trace = ktrace_alloc(VNODE_TRACE_SIZE, KM_SLEEP); | ||
889 | #endif | ||
887 | #ifdef XFS_BMAP_TRACE | 890 | #ifdef XFS_BMAP_TRACE |
888 | ip->i_xtrace = ktrace_alloc(XFS_BMAP_KTRACE_SIZE, KM_SLEEP); | 891 | ip->i_xtrace = ktrace_alloc(XFS_BMAP_KTRACE_SIZE, KM_SLEEP); |
889 | #endif | 892 | #endif |
@@ -2729,6 +2732,10 @@ xfs_idestroy( | |||
2729 | mrfree(&ip->i_lock); | 2732 | mrfree(&ip->i_lock); |
2730 | mrfree(&ip->i_iolock); | 2733 | mrfree(&ip->i_iolock); |
2731 | freesema(&ip->i_flock); | 2734 | freesema(&ip->i_flock); |
2735 | |||
2736 | #ifdef XFS_VNODE_TRACE | ||
2737 | ktrace_free(ip->i_trace); | ||
2738 | #endif | ||
2732 | #ifdef XFS_BMAP_TRACE | 2739 | #ifdef XFS_BMAP_TRACE |
2733 | ktrace_free(ip->i_xtrace); | 2740 | ktrace_free(ip->i_xtrace); |
2734 | #endif | 2741 | #endif |
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index c8bb1a818a52..8a1457280f18 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
@@ -301,6 +301,9 @@ typedef struct xfs_inode { | |||
301 | xfs_fsize_t i_size; /* in-memory size */ | 301 | xfs_fsize_t i_size; /* in-memory size */ |
302 | atomic_t i_iocount; /* outstanding I/O count */ | 302 | atomic_t i_iocount; /* outstanding I/O count */ |
303 | /* Trace buffers per inode. */ | 303 | /* Trace buffers per inode. */ |
304 | #ifdef XFS_VNODE_TRACE | ||
305 | struct ktrace *i_trace; /* general inode trace */ | ||
306 | #endif | ||
304 | #ifdef XFS_BMAP_TRACE | 307 | #ifdef XFS_BMAP_TRACE |
305 | struct ktrace *i_xtrace; /* inode extent list trace */ | 308 | struct ktrace *i_xtrace; /* inode extent list trace */ |
306 | #endif | 309 | #endif |
diff --git a/fs/xfs/xfs_rename.c b/fs/xfs/xfs_rename.c index 2f5c8740b25c..44ea0ba36476 100644 --- a/fs/xfs/xfs_rename.c +++ b/fs/xfs/xfs_rename.c | |||
@@ -247,8 +247,8 @@ xfs_rename( | |||
247 | int src_namelen = VNAMELEN(src_vname); | 247 | int src_namelen = VNAMELEN(src_vname); |
248 | int target_namelen = VNAMELEN(target_vname); | 248 | int target_namelen = VNAMELEN(target_vname); |
249 | 249 | ||
250 | vn_trace_entry(src_dir_vp, "xfs_rename", (inst_t *)__return_address); | 250 | vn_trace_entry(src_dp, "xfs_rename", (inst_t *)__return_address); |
251 | vn_trace_entry(target_dir_vp, "xfs_rename", (inst_t *)__return_address); | 251 | vn_trace_entry(xfs_vtoi(target_dir_vp), "xfs_rename", (inst_t *)__return_address); |
252 | 252 | ||
253 | /* | 253 | /* |
254 | * Find the XFS behavior descriptor for the target directory | 254 | * Find the XFS behavior descriptor for the target directory |
diff --git a/fs/xfs/xfs_utils.c b/fs/xfs/xfs_utils.c index 4a7208ef7faa..673b405eaa31 100644 --- a/fs/xfs/xfs_utils.c +++ b/fs/xfs/xfs_utils.c | |||
@@ -73,7 +73,7 @@ xfs_dir_lookup_int( | |||
73 | { | 73 | { |
74 | int error; | 74 | int error; |
75 | 75 | ||
76 | vn_trace_entry(XFS_ITOV(dp), __FUNCTION__, (inst_t *)__return_address); | 76 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
77 | 77 | ||
78 | error = xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); | 78 | error = xfs_dir_lookup(NULL, dp, VNAME(dentry), VNAMELEN(dentry), inum); |
79 | if (!error) { | 79 | if (!error) { |
diff --git a/fs/xfs/xfs_utils.h b/fs/xfs/xfs_utils.h index 35c7a99f50ac..a00b26d8840e 100644 --- a/fs/xfs/xfs_utils.h +++ b/fs/xfs/xfs_utils.h | |||
@@ -20,7 +20,7 @@ | |||
20 | 20 | ||
21 | #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) | 21 | #define IRELE(ip) VN_RELE(XFS_ITOV(ip)) |
22 | #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) | 22 | #define IHOLD(ip) VN_HOLD(XFS_ITOV(ip)) |
23 | #define ITRACE(ip) vn_trace_ref(XFS_ITOV(ip), __FILE__, __LINE__, \ | 23 | #define ITRACE(ip) vn_trace_ref(ip, __FILE__, __LINE__, \ |
24 | (inst_t *)__return_address) | 24 | (inst_t *)__return_address) |
25 | 25 | ||
26 | extern int xfs_get_dir_entry (bhv_vname_t *, xfs_inode_t **); | 26 | extern int xfs_get_dir_entry (bhv_vname_t *, xfs_inode_t **); |
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index e7ef78fb4da3..98653793b34a 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -88,7 +88,7 @@ xfs_getattr( | |||
88 | bhv_vnode_t *vp = XFS_ITOV(ip); | 88 | bhv_vnode_t *vp = XFS_ITOV(ip); |
89 | xfs_mount_t *mp = ip->i_mount; | 89 | xfs_mount_t *mp = ip->i_mount; |
90 | 90 | ||
91 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | 91 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
92 | 92 | ||
93 | if (XFS_FORCED_SHUTDOWN(mp)) | 93 | if (XFS_FORCED_SHUTDOWN(mp)) |
94 | return XFS_ERROR(EIO); | 94 | return XFS_ERROR(EIO); |
@@ -228,7 +228,7 @@ xfs_setattr( | |||
228 | int file_owner; | 228 | int file_owner; |
229 | int need_iolock = 1; | 229 | int need_iolock = 1; |
230 | 230 | ||
231 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | 231 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
232 | 232 | ||
233 | if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) | 233 | if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY) |
234 | return XFS_ERROR(EROFS); | 234 | return XFS_ERROR(EROFS); |
@@ -915,7 +915,7 @@ xfs_access( | |||
915 | { | 915 | { |
916 | int error; | 916 | int error; |
917 | 917 | ||
918 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 918 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
919 | 919 | ||
920 | xfs_ilock(ip, XFS_ILOCK_SHARED); | 920 | xfs_ilock(ip, XFS_ILOCK_SHARED); |
921 | error = xfs_iaccess(ip, mode, credp); | 921 | error = xfs_iaccess(ip, mode, credp); |
@@ -987,7 +987,7 @@ xfs_readlink( | |||
987 | int pathlen; | 987 | int pathlen; |
988 | int error = 0; | 988 | int error = 0; |
989 | 989 | ||
990 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 990 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
991 | 991 | ||
992 | if (XFS_FORCED_SHUTDOWN(mp)) | 992 | if (XFS_FORCED_SHUTDOWN(mp)) |
993 | return XFS_ERROR(EIO); | 993 | return XFS_ERROR(EIO); |
@@ -1033,7 +1033,7 @@ xfs_fsync( | |||
1033 | int error; | 1033 | int error; |
1034 | int log_flushed = 0, changed = 1; | 1034 | int log_flushed = 0, changed = 1; |
1035 | 1035 | ||
1036 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 1036 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
1037 | 1037 | ||
1038 | ASSERT(start >= 0 && stop >= -1); | 1038 | ASSERT(start >= 0 && stop >= -1); |
1039 | 1039 | ||
@@ -1592,7 +1592,7 @@ xfs_inactive( | |||
1592 | int error; | 1592 | int error; |
1593 | int truncate; | 1593 | int truncate; |
1594 | 1594 | ||
1595 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | 1595 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
1596 | 1596 | ||
1597 | /* | 1597 | /* |
1598 | * If the inode is already free, then there can be nothing | 1598 | * If the inode is already free, then there can be nothing |
@@ -1805,7 +1805,7 @@ xfs_lookup( | |||
1805 | int error; | 1805 | int error; |
1806 | uint lock_mode; | 1806 | uint lock_mode; |
1807 | 1807 | ||
1808 | vn_trace_entry(XFS_ITOV(dp), __FUNCTION__, (inst_t *)__return_address); | 1808 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
1809 | 1809 | ||
1810 | if (XFS_FORCED_SHUTDOWN(dp->i_mount)) | 1810 | if (XFS_FORCED_SHUTDOWN(dp->i_mount)) |
1811 | return XFS_ERROR(EIO); | 1811 | return XFS_ERROR(EIO); |
@@ -1849,7 +1849,7 @@ xfs_create( | |||
1849 | int namelen; | 1849 | int namelen; |
1850 | 1850 | ||
1851 | ASSERT(!*vpp); | 1851 | ASSERT(!*vpp); |
1852 | vn_trace_entry(dir_vp, __FUNCTION__, (inst_t *)__return_address); | 1852 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
1853 | 1853 | ||
1854 | dm_di_mode = vap->va_mode; | 1854 | dm_di_mode = vap->va_mode; |
1855 | namelen = VNAMELEN(dentry); | 1855 | namelen = VNAMELEN(dentry); |
@@ -2326,7 +2326,7 @@ xfs_remove( | |||
2326 | uint resblks; | 2326 | uint resblks; |
2327 | int namelen; | 2327 | int namelen; |
2328 | 2328 | ||
2329 | vn_trace_entry(dir_vp, __FUNCTION__, (inst_t *)__return_address); | 2329 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
2330 | 2330 | ||
2331 | if (XFS_FORCED_SHUTDOWN(mp)) | 2331 | if (XFS_FORCED_SHUTDOWN(mp)) |
2332 | return XFS_ERROR(EIO); | 2332 | return XFS_ERROR(EIO); |
@@ -2369,7 +2369,7 @@ xfs_remove( | |||
2369 | 2369 | ||
2370 | dm_di_mode = ip->i_d.di_mode; | 2370 | dm_di_mode = ip->i_d.di_mode; |
2371 | 2371 | ||
2372 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 2372 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
2373 | 2373 | ||
2374 | ITRACE(ip); | 2374 | ITRACE(ip); |
2375 | 2375 | ||
@@ -2503,7 +2503,7 @@ xfs_remove( | |||
2503 | if (link_zero && xfs_inode_is_filestream(ip)) | 2503 | if (link_zero && xfs_inode_is_filestream(ip)) |
2504 | xfs_filestream_deassociate(ip); | 2504 | xfs_filestream_deassociate(ip); |
2505 | 2505 | ||
2506 | vn_trace_exit(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 2506 | vn_trace_exit(ip, __FUNCTION__, (inst_t *)__return_address); |
2507 | 2507 | ||
2508 | IRELE(ip); | 2508 | IRELE(ip); |
2509 | 2509 | ||
@@ -2567,8 +2567,8 @@ xfs_link( | |||
2567 | char *target_name = VNAME(dentry); | 2567 | char *target_name = VNAME(dentry); |
2568 | int target_namelen; | 2568 | int target_namelen; |
2569 | 2569 | ||
2570 | vn_trace_entry(target_dir_vp, __FUNCTION__, (inst_t *)__return_address); | 2570 | vn_trace_entry(tdp, __FUNCTION__, (inst_t *)__return_address); |
2571 | vn_trace_entry(src_vp, __FUNCTION__, (inst_t *)__return_address); | 2571 | vn_trace_entry(xfs_vtoi(src_vp), __FUNCTION__, (inst_t *)__return_address); |
2572 | 2572 | ||
2573 | target_namelen = VNAMELEN(dentry); | 2573 | target_namelen = VNAMELEN(dentry); |
2574 | ASSERT(!VN_ISDIR(src_vp)); | 2574 | ASSERT(!VN_ISDIR(src_vp)); |
@@ -2751,7 +2751,7 @@ xfs_mkdir( | |||
2751 | 2751 | ||
2752 | /* Return through std_return after this point. */ | 2752 | /* Return through std_return after this point. */ |
2753 | 2753 | ||
2754 | vn_trace_entry(dir_vp, __FUNCTION__, (inst_t *)__return_address); | 2754 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
2755 | 2755 | ||
2756 | mp = dp->i_mount; | 2756 | mp = dp->i_mount; |
2757 | udqp = gdqp = NULL; | 2757 | udqp = gdqp = NULL; |
@@ -2945,7 +2945,7 @@ xfs_rmdir( | |||
2945 | int last_cdp_link; | 2945 | int last_cdp_link; |
2946 | uint resblks; | 2946 | uint resblks; |
2947 | 2947 | ||
2948 | vn_trace_entry(dir_vp, __FUNCTION__, (inst_t *)__return_address); | 2948 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
2949 | 2949 | ||
2950 | if (XFS_FORCED_SHUTDOWN(mp)) | 2950 | if (XFS_FORCED_SHUTDOWN(mp)) |
2951 | return XFS_ERROR(EIO); | 2951 | return XFS_ERROR(EIO); |
@@ -3198,7 +3198,7 @@ xfs_symlink( | |||
3198 | ip = NULL; | 3198 | ip = NULL; |
3199 | tp = NULL; | 3199 | tp = NULL; |
3200 | 3200 | ||
3201 | vn_trace_entry(dir_vp, __FUNCTION__, (inst_t *)__return_address); | 3201 | vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address); |
3202 | 3202 | ||
3203 | 3203 | ||
3204 | if (XFS_FORCED_SHUTDOWN(mp)) | 3204 | if (XFS_FORCED_SHUTDOWN(mp)) |
@@ -3490,7 +3490,7 @@ xfs_fid2( | |||
3490 | { | 3490 | { |
3491 | xfs_fid2_t *xfid = (xfs_fid2_t *)fidp; | 3491 | xfs_fid2_t *xfid = (xfs_fid2_t *)fidp; |
3492 | 3492 | ||
3493 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 3493 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
3494 | ASSERT(sizeof(fid_t) >= sizeof(xfs_fid2_t)); | 3494 | ASSERT(sizeof(fid_t) >= sizeof(xfs_fid2_t)); |
3495 | 3495 | ||
3496 | xfid->fid_len = sizeof(xfs_fid2_t) - sizeof(xfid->fid_len); | 3496 | xfid->fid_len = sizeof(xfs_fid2_t) - sizeof(xfid->fid_len); |
@@ -3673,7 +3673,7 @@ xfs_reclaim( | |||
3673 | { | 3673 | { |
3674 | bhv_vnode_t *vp = XFS_ITOV(ip); | 3674 | bhv_vnode_t *vp = XFS_ITOV(ip); |
3675 | 3675 | ||
3676 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | 3676 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
3677 | 3677 | ||
3678 | ASSERT(!VN_MAPPED(vp)); | 3678 | ASSERT(!VN_MAPPED(vp)); |
3679 | 3679 | ||
@@ -3891,7 +3891,7 @@ xfs_alloc_file_space( | |||
3891 | int committed; | 3891 | int committed; |
3892 | int error; | 3892 | int error; |
3893 | 3893 | ||
3894 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 3894 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
3895 | 3895 | ||
3896 | if (XFS_FORCED_SHUTDOWN(mp)) | 3896 | if (XFS_FORCED_SHUTDOWN(mp)) |
3897 | return XFS_ERROR(EIO); | 3897 | return XFS_ERROR(EIO); |
@@ -4161,7 +4161,7 @@ xfs_free_file_space( | |||
4161 | vp = XFS_ITOV(ip); | 4161 | vp = XFS_ITOV(ip); |
4162 | mp = ip->i_mount; | 4162 | mp = ip->i_mount; |
4163 | 4163 | ||
4164 | vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address); | 4164 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
4165 | 4165 | ||
4166 | if ((error = XFS_QM_DQATTACH(mp, ip, 0))) | 4166 | if ((error = XFS_QM_DQATTACH(mp, ip, 0))) |
4167 | return error; | 4167 | return error; |
@@ -4367,7 +4367,7 @@ xfs_change_file_space( | |||
4367 | xfs_trans_t *tp; | 4367 | xfs_trans_t *tp; |
4368 | bhv_vattr_t va; | 4368 | bhv_vattr_t va; |
4369 | 4369 | ||
4370 | vn_trace_entry(XFS_ITOV(ip), __FUNCTION__, (inst_t *)__return_address); | 4370 | vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address); |
4371 | 4371 | ||
4372 | /* | 4372 | /* |
4373 | * must be a regular file and have write permission | 4373 | * must be a regular file and have write permission |