aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/linux-2.6
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/linux-2.6')
-rw-r--r--fs/xfs/linux-2.6/xfs_aops.c2
-rw-r--r--fs/xfs/linux-2.6/xfs_ioctl.c2
-rw-r--r--fs/xfs/linux-2.6/xfs_super.c40
-rw-r--r--fs/xfs/linux-2.6/xfs_vnode.c46
-rw-r--r--fs/xfs/linux-2.6/xfs_vnode.h21
5 files changed, 53 insertions, 58 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
425xfs_fs_clear_inode( 425xfs_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 */
198static 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 */
215void 223void
216vn_trace_entry(bhv_vnode_t *vp, const char *func, inst_t *ra) 224vn_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
221void 229void
222vn_trace_exit(bhv_vnode_t *vp, const char *func, inst_t *ra) 230vn_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
227void 235void
228vn_trace_hold(bhv_vnode_t *vp, char *file, int line, inst_t *ra) 236vn_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
233void 241void
234vn_trace_ref(bhv_vnode_t *vp, char *file, int line, inst_t *ra) 242vn_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
239void 247void
240vn_trace_rele(bhv_vnode_t *vp, char *file, int line, inst_t *ra) 248vn_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
30typedef struct bhv_vnode { 30typedef 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
317extern void vn_trace_entry(struct bhv_vnode *, const char *, inst_t *); 314extern void vn_trace_entry(struct xfs_inode *, const char *, inst_t *);
318extern void vn_trace_exit(struct bhv_vnode *, const char *, inst_t *); 315extern void vn_trace_exit(struct xfs_inode *, const char *, inst_t *);
319extern void vn_trace_hold(struct bhv_vnode *, char *, int, inst_t *); 316extern void vn_trace_hold(struct xfs_inode *, char *, int, inst_t *);
320extern void vn_trace_ref(struct bhv_vnode *, char *, int, inst_t *); 317extern void vn_trace_ref(struct xfs_inode *, char *, int, inst_t *);
321extern void vn_trace_rele(struct bhv_vnode *, char *, int, inst_t *); 318extern 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__ */