[XFS] move v_trace from bhv_vnode to xfs_inode
struct bhv_vnode is on it's way out, so move the trace buffer to the XFS inode. Note that this makes the tracing macros rather misnamed, but this kind of fallout will be fixed up incrementally later on. SGI-PV: 969608 SGI-Modid: xfs-linux-melb:xfs-kern:29498a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Tim Shimmin <tes@sgi.com>
This commit is contained in:
parent
b677c210ce
commit
1543d79c45
13 changed files with 92 additions and 87 deletions
|
@ -1526,7 +1526,7 @@ xfs_vm_bmap(
|
|||
struct inode *inode = (struct inode *)mapping->host;
|
||||
struct xfs_inode *ip = XFS_I(inode);
|
||||
|
||||
vn_trace_entry(vn_from_inode(inode), __FUNCTION__,
|
||||
vn_trace_entry(XFS_I(inode), __FUNCTION__,
|
||||
(inst_t *)__return_address);
|
||||
xfs_rwlock(ip, VRWLOCK_READ);
|
||||
xfs_flush_pages(ip, (xfs_off_t)0, -1, 0, FI_REMAPF);
|
||||
|
|
|
@ -733,7 +733,7 @@ xfs_ioctl(
|
|||
xfs_mount_t *mp = ip->i_mount;
|
||||
int error;
|
||||
|
||||
vn_trace_entry(vp, "xfs_ioctl", (inst_t *)__return_address);
|
||||
vn_trace_entry(XFS_I(inode), "xfs_ioctl", (inst_t *)__return_address);
|
||||
|
||||
switch (cmd) {
|
||||
|
||||
|
|
|
@ -403,7 +403,7 @@ xfs_fs_write_inode(
|
|||
{
|
||||
int error = 0, flags = FLUSH_INODE;
|
||||
|
||||
vn_trace_entry(vn_from_inode(inode), __FUNCTION__,
|
||||
vn_trace_entry(XFS_I(inode), __FUNCTION__,
|
||||
(inst_t *)__return_address);
|
||||
if (sync) {
|
||||
filemap_fdatawait(inode->i_mapping);
|
||||
|
@ -425,34 +425,27 @@ STATIC void
|
|||
xfs_fs_clear_inode(
|
||||
struct inode *inode)
|
||||
{
|
||||
bhv_vnode_t *vp = vn_from_inode(inode);
|
||||
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
|
||||
XFS_STATS_INC(vn_rele);
|
||||
XFS_STATS_INC(vn_remove);
|
||||
XFS_STATS_INC(vn_reclaim);
|
||||
XFS_STATS_DEC(vn_active);
|
||||
xfs_inode_t *ip = XFS_I(inode);
|
||||
|
||||
/*
|
||||
* This can happen because xfs_iget_core calls xfs_idestroy if we
|
||||
* ip can be null when xfs_iget_core calls xfs_idestroy if we
|
||||
* find an inode with di_mode == 0 but without IGET_CREATE set.
|
||||
*/
|
||||
if (XFS_I(inode))
|
||||
xfs_inactive(XFS_I(inode));
|
||||
if (ip) {
|
||||
vn_trace_entry(ip, __FUNCTION__, (inst_t *)__return_address);
|
||||
|
||||
XFS_STATS_INC(vn_rele);
|
||||
XFS_STATS_INC(vn_remove);
|
||||
XFS_STATS_INC(vn_reclaim);
|
||||
XFS_STATS_DEC(vn_active);
|
||||
|
||||
if (XFS_I(inode)) {
|
||||
xfs_iflags_clear(XFS_I(inode), XFS_IMODIFIED);
|
||||
if (xfs_reclaim(XFS_I(inode)))
|
||||
panic("%s: cannot reclaim 0x%p\n", __FUNCTION__, vp);
|
||||
xfs_inactive(ip);
|
||||
xfs_iflags_clear(ip, XFS_IMODIFIED);
|
||||
if (xfs_reclaim(ip))
|
||||
panic("%s: cannot reclaim 0x%p\n", __FUNCTION__, inode);
|
||||
}
|
||||
|
||||
ASSERT(XFS_I(inode) == NULL);
|
||||
|
||||
#ifdef XFS_VNODE_TRACE
|
||||
ktrace_free(vp->v_trace);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -840,7 +833,8 @@ xfs_fs_fill_super(
|
|||
}
|
||||
if ((error = xfs_fs_start_syncd(vfsp)))
|
||||
goto fail_vnrele;
|
||||
vn_trace_exit(rootvp, __FUNCTION__, (inst_t *)__return_address);
|
||||
vn_trace_exit(XFS_I(sb->s_root->d_inode), __FUNCTION__,
|
||||
(inst_t *)__return_address);
|
||||
|
||||
kmem_free(args, sizeof(*args));
|
||||
return 0;
|
||||
|
|
|
@ -103,11 +103,6 @@ vn_initialize(
|
|||
|
||||
ASSERT(VN_CACHED(vp) == 0);
|
||||
|
||||
#ifdef XFS_VNODE_TRACE
|
||||
vp->v_trace = ktrace_alloc(VNODE_TRACE_SIZE, KM_SLEEP);
|
||||
#endif /* XFS_VNODE_TRACE */
|
||||
|
||||
vn_trace_exit(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
return vp;
|
||||
}
|
||||
|
||||
|
@ -158,7 +153,7 @@ __vn_revalidate(
|
|||
{
|
||||
int error;
|
||||
|
||||
vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
|
||||
vn_trace_entry(xfs_vtoi(vp), __FUNCTION__, (inst_t *)__return_address);
|
||||
vattr->va_mask = XFS_AT_STAT | XFS_AT_XFLAGS;
|
||||
error = xfs_getattr(xfs_vtoi(vp), vattr, 0);
|
||||
if (likely(!error)) {
|
||||
|
@ -196,12 +191,25 @@ vn_hold(
|
|||
|
||||
#ifdef XFS_VNODE_TRACE
|
||||
|
||||
#define KTRACE_ENTER(vp, vk, s, line, ra) \
|
||||
ktrace_enter( (vp)->v_trace, \
|
||||
/*
|
||||
* Reference count of Linux inode if present, -1 if the xfs_inode
|
||||
* has no associated Linux inode.
|
||||
*/
|
||||
static inline int xfs_icount(struct xfs_inode *ip)
|
||||
{
|
||||
bhv_vnode_t *vp = XFS_ITOV_NULL(ip);
|
||||
|
||||
if (vp)
|
||||
return vn_count(vp);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#define KTRACE_ENTER(ip, vk, s, line, ra) \
|
||||
ktrace_enter( (ip)->i_trace, \
|
||||
/* 0 */ (void *)(__psint_t)(vk), \
|
||||
/* 1 */ (void *)(s), \
|
||||
/* 2 */ (void *)(__psint_t) line, \
|
||||
/* 3 */ (void *)(__psint_t)(vn_count(vp)), \
|
||||
/* 3 */ (void *)(__psint_t)xfs_icount(ip), \
|
||||
/* 4 */ (void *)(ra), \
|
||||
/* 5 */ NULL, \
|
||||
/* 6 */ (void *)(__psint_t)current_cpu(), \
|
||||
|
@ -213,32 +221,32 @@ vn_hold(
|
|||
* Vnode tracing code.
|
||||
*/
|
||||
void
|
||||
vn_trace_entry(bhv_vnode_t *vp, const char *func, inst_t *ra)
|
||||
vn_trace_entry(xfs_inode_t *ip, const char *func, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_ENTRY, func, 0, ra);
|
||||
KTRACE_ENTER(ip, VNODE_KTRACE_ENTRY, func, 0, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_exit(bhv_vnode_t *vp, const char *func, inst_t *ra)
|
||||
vn_trace_exit(xfs_inode_t *ip, const char *func, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_EXIT, func, 0, ra);
|
||||
KTRACE_ENTER(ip, VNODE_KTRACE_EXIT, func, 0, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_hold(bhv_vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
vn_trace_hold(xfs_inode_t *ip, char *file, int line, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_HOLD, file, line, ra);
|
||||
KTRACE_ENTER(ip, VNODE_KTRACE_HOLD, file, line, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_ref(bhv_vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
vn_trace_ref(xfs_inode_t *ip, char *file, int line, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_REF, file, line, ra);
|
||||
KTRACE_ENTER(ip, VNODE_KTRACE_REF, file, line, ra);
|
||||
}
|
||||
|
||||
void
|
||||
vn_trace_rele(bhv_vnode_t *vp, char *file, int line, inst_t *ra)
|
||||
vn_trace_rele(xfs_inode_t *ip, char *file, int line, inst_t *ra)
|
||||
{
|
||||
KTRACE_ENTER(vp, VNODE_KTRACE_RELE, file, line, ra);
|
||||
KTRACE_ENTER(ip, VNODE_KTRACE_RELE, file, line, ra);
|
||||
}
|
||||
#endif /* XFS_VNODE_TRACE */
|
||||
|
|
|
@ -29,9 +29,6 @@ typedef __u64 bhv_vnumber_t;
|
|||
|
||||
typedef struct bhv_vnode {
|
||||
bhv_vnumber_t v_number; /* in-core vnode number */
|
||||
#ifdef XFS_VNODE_TRACE
|
||||
struct ktrace *v_trace; /* trace header structure */
|
||||
#endif
|
||||
struct inode v_inode; /* Linux inode */
|
||||
/* inode MUST be last */
|
||||
} bhv_vnode_t;
|
||||
|
@ -222,9 +219,9 @@ extern bhv_vnode_t *vn_hold(struct bhv_vnode *);
|
|||
#if defined(XFS_VNODE_TRACE)
|
||||
#define VN_HOLD(vp) \
|
||||
((void)vn_hold(vp), \
|
||||
vn_trace_hold(vp, __FILE__, __LINE__, (inst_t *)__return_address))
|
||||
vn_trace_hold(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address))
|
||||
#define VN_RELE(vp) \
|
||||
(vn_trace_rele(vp, __FILE__, __LINE__, (inst_t *)__return_address), \
|
||||
(vn_trace_rele(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address), \
|
||||
iput(vn_to_inode(vp)))
|
||||
#else
|
||||
#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)
|
|||
#define VNODE_KTRACE_REF 4
|
||||
#define VNODE_KTRACE_RELE 5
|
||||
|
||||
extern void vn_trace_entry(struct bhv_vnode *, const char *, inst_t *);
|
||||
extern void vn_trace_exit(struct bhv_vnode *, const char *, inst_t *);
|
||||
extern void vn_trace_hold(struct bhv_vnode *, char *, int, inst_t *);
|
||||
extern void vn_trace_ref(struct bhv_vnode *, char *, int, inst_t *);
|
||||
extern void vn_trace_rele(struct bhv_vnode *, char *, int, inst_t *);
|
||||
|
||||
#define VN_TRACE(vp) \
|
||||
vn_trace_ref(vp, __FILE__, __LINE__, (inst_t *)__return_address)
|
||||
extern void vn_trace_entry(struct xfs_inode *, const char *, inst_t *);
|
||||
extern void vn_trace_exit(struct xfs_inode *, const char *, inst_t *);
|
||||
extern void vn_trace_hold(struct xfs_inode *, char *, int, inst_t *);
|
||||
extern void vn_trace_ref(struct xfs_inode *, char *, int, inst_t *);
|
||||
extern void vn_trace_rele(struct xfs_inode *, char *, int, inst_t *);
|
||||
#else
|
||||
#define vn_trace_entry(a,b,c)
|
||||
#define vn_trace_exit(a,b,c)
|
||||
#define vn_trace_hold(a,b,c,d)
|
||||
#define vn_trace_ref(a,b,c,d)
|
||||
#define vn_trace_rele(a,b,c,d)
|
||||
#define VN_TRACE(vp)
|
||||
#endif
|
||||
|
||||
#endif /* __XFS_VNODE_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue