[XFS] implement IHOLD/IRELE directly
Now that all direct calls to VN_HOLD/VN_RELE are gone we can implement IHOLD/IRELE directly. For the IHOLD case also replace igrab with a direct increment of i_count because we are guaranteed to already have a live and referenced inode by the VFS. Also remove the vn_hold statistic because it's been rather meaningless for some time with most references done by other callers. SGI-PV: 981498 SGI-Modid: xfs-linux-melb:xfs-kern:31764a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
Родитель
0b1f917730
Коммит
907f49a8f5
|
@ -82,24 +82,6 @@ vn_ioerror(
|
|||
xfs_do_force_shutdown(ip->i_mount, SHUTDOWN_DEVICE_REQ, f, l);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Add a reference to a referenced vnode.
|
||||
*/
|
||||
bhv_vnode_t *
|
||||
vn_hold(
|
||||
bhv_vnode_t *vp)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
XFS_STATS_INC(vn_hold);
|
||||
|
||||
inode = igrab(vp);
|
||||
ASSERT(inode);
|
||||
|
||||
return vp;
|
||||
}
|
||||
|
||||
#ifdef XFS_INODE_TRACE
|
||||
|
||||
/*
|
||||
|
|
|
@ -69,22 +69,18 @@ static inline int vn_count(bhv_vnode_t *vp)
|
|||
return atomic_read(&vp->i_count);
|
||||
}
|
||||
|
||||
/*
|
||||
* Vnode reference counting functions (and macros for compatibility).
|
||||
*/
|
||||
extern bhv_vnode_t *vn_hold(bhv_vnode_t *);
|
||||
#define IHOLD(ip) \
|
||||
do { \
|
||||
ASSERT(atomic_read(&VFS_I(ip)->i_count) > 0) ; \
|
||||
atomic_inc(&(VFS_I(ip)->i_count)); \
|
||||
xfs_itrace_hold((ip), __FILE__, __LINE__, (inst_t *)__return_address); \
|
||||
} while (0)
|
||||
|
||||
#if defined(XFS_INODE_TRACE)
|
||||
#define VN_HOLD(vp) \
|
||||
((void)vn_hold(vp), \
|
||||
xfs_itrace_hold(XFS_I(vp), __FILE__, __LINE__, (inst_t *)__return_address))
|
||||
#define VN_RELE(vp) \
|
||||
(xfs_itrace_rele(XFS_I(vp), __FILE__, __LINE__, (inst_t *)__return_address), \
|
||||
iput(vp))
|
||||
#else
|
||||
#define VN_HOLD(vp) ((void)vn_hold(vp))
|
||||
#define VN_RELE(vp) (iput(vp))
|
||||
#endif
|
||||
#define IRELE(ip) \
|
||||
do { \
|
||||
xfs_itrace_rele((ip), __FILE__, __LINE__, (inst_t *)__return_address); \
|
||||
iput(VFS_I(ip)); \
|
||||
} while (0)
|
||||
|
||||
static inline bhv_vnode_t *vn_grab(bhv_vnode_t *vp)
|
||||
{
|
||||
|
|
|
@ -18,9 +18,6 @@
|
|||
#ifndef __XFS_UTILS_H__
|
||||
#define __XFS_UTILS_H__
|
||||
|
||||
#define IRELE(ip) VN_RELE(VFS_I(ip))
|
||||
#define IHOLD(ip) VN_HOLD(VFS_I(ip))
|
||||
|
||||
extern int xfs_truncate_file(xfs_mount_t *, xfs_inode_t *);
|
||||
extern int xfs_dir_ialloc(xfs_trans_t **, xfs_inode_t *, mode_t, xfs_nlink_t,
|
||||
xfs_dev_t, cred_t *, prid_t, int,
|
||||
|
|
Загрузка…
Ссылка в новой задаче