Loading fs/xfs/linux-2.6/xfs_super.c +1 −3 Original line number Diff line number Diff line Loading @@ -227,9 +227,7 @@ xfs_initialize_vnode( xfs_revalidate_inode(XFS_BHVTOM(bdp), vp, ip); xfs_set_inodeops(inode); spin_lock(&ip->i_flags_lock); ip->i_flags &= ~XFS_INEW; spin_unlock(&ip->i_flags_lock); xfs_iflags_clear(ip, XFS_INEW); barrier(); unlock_new_inode(inode); Loading fs/xfs/xfs_iget.c +6 −14 Original line number Diff line number Diff line Loading @@ -215,7 +215,7 @@ xfs_iget_core( * If INEW is set this inode is being set up * we need to pause and try again. */ if (ip->i_flags & XFS_INEW) { if (xfs_iflags_test(ip, XFS_INEW)) { read_unlock(&ih->ih_lock); delay(1); XFS_STATS_INC(xs_ig_frecycle); Loading @@ -230,7 +230,7 @@ xfs_iget_core( * on its way out of the system, * we need to pause and try again. */ if (ip->i_flags & XFS_IRECLAIM) { if (xfs_iflags_test(ip, XFS_IRECLAIM)) { read_unlock(&ih->ih_lock); delay(1); XFS_STATS_INC(xs_ig_frecycle); Loading @@ -243,9 +243,7 @@ xfs_iget_core( XFS_STATS_INC(xs_ig_found); spin_lock(&ip->i_flags_lock); ip->i_flags &= ~XFS_IRECLAIMABLE; spin_unlock(&ip->i_flags_lock); xfs_iflags_clear(ip, XFS_IRECLAIMABLE); version = ih->ih_version; read_unlock(&ih->ih_lock); xfs_ihash_promote(ih, ip, version); Loading Loading @@ -299,10 +297,7 @@ xfs_iget_core( if (lock_flags != 0) xfs_ilock(ip, lock_flags); spin_lock(&ip->i_flags_lock); ip->i_flags &= ~XFS_ISTALE; spin_unlock(&ip->i_flags_lock); xfs_iflags_clear(ip, XFS_ISTALE); vn_trace_exit(vp, "xfs_iget.found", (inst_t *)__return_address); goto return_ip; Loading Loading @@ -371,10 +366,7 @@ xfs_iget_core( ih->ih_next = ip; ip->i_udquot = ip->i_gdquot = NULL; ih->ih_version++; spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_INEW; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_INEW); write_unlock(&ih->ih_lock); /* Loading Loading @@ -625,7 +617,7 @@ xfs_iput_new(xfs_inode_t *ip, vn_trace_entry(vp, "xfs_iput_new", (inst_t *)__return_address); if ((ip->i_d.di_mode == 0)) { ASSERT(!(ip->i_flags & XFS_IRECLAIMABLE)); ASSERT(!xfs_iflags_test(ip, XFS_IRECLAIMABLE)); vn_mark_bad(vp); } if (inode->i_state & I_NEW) Loading fs/xfs/xfs_inode.c +5 −12 Original line number Diff line number Diff line Loading @@ -2193,7 +2193,7 @@ xfs_ifree_cluster( /* Inode not in memory or we found it already, * nothing to do */ if (!ip || (ip->i_flags & XFS_ISTALE)) { if (!ip || xfs_iflags_test(ip, XFS_ISTALE)) { read_unlock(&ih->ih_lock); continue; } Loading @@ -2215,10 +2215,7 @@ xfs_ifree_cluster( if (ip == free_ip) { if (xfs_iflock_nowait(ip)) { spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_ISTALE; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_ISTALE); if (xfs_inode_clean(ip)) { xfs_ifunlock(ip); } else { Loading @@ -2231,9 +2228,7 @@ xfs_ifree_cluster( if (xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) { if (xfs_iflock_nowait(ip)) { spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_ISTALE; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_ISTALE); if (xfs_inode_clean(ip)) { xfs_ifunlock(ip); Loading Loading @@ -2263,9 +2258,7 @@ xfs_ifree_cluster( AIL_LOCK(mp,s); iip->ili_flush_lsn = iip->ili_item.li_lsn; AIL_UNLOCK(mp, s); spin_lock(&iip->ili_inode->i_flags_lock); iip->ili_inode->i_flags |= XFS_ISTALE; spin_unlock(&iip->ili_inode->i_flags_lock); xfs_iflags_set(ip, XFS_ISTALE); pre_flushed++; } lip = lip->li_bio_list; Loading Loading @@ -2764,7 +2757,7 @@ xfs_iunpin( struct inode *inode = NULL; spin_lock(&ip->i_flags_lock); if (!(ip->i_flags & (XFS_IRECLAIM|XFS_IRECLAIMABLE))) { if (!__xfs_iflags_test(ip, XFS_IRECLAIM|XFS_IRECLAIMABLE)) { bhv_vnode_t *vp = XFS_ITOV_NULL(ip); /* make sync come back and flush this inode */ Loading fs/xfs/xfs_inode.h +41 −0 Original line number Diff line number Diff line Loading @@ -305,6 +305,47 @@ typedef struct xfs_inode { #endif } xfs_inode_t; /* * i_flags helper functions */ static inline void __xfs_iflags_set(xfs_inode_t *ip, unsigned short flags) { ip->i_flags |= flags; } static inline void xfs_iflags_set(xfs_inode_t *ip, unsigned short flags) { spin_lock(&ip->i_flags_lock); __xfs_iflags_set(ip, flags); spin_unlock(&ip->i_flags_lock); } static inline void xfs_iflags_clear(xfs_inode_t *ip, unsigned short flags) { spin_lock(&ip->i_flags_lock); ip->i_flags &= ~flags; spin_unlock(&ip->i_flags_lock); } static inline int __xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) { return (ip->i_flags & flags); } static inline int xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) { int ret; spin_lock(&ip->i_flags_lock); ret = __xfs_iflags_test(ip, flags); spin_unlock(&ip->i_flags_lock); return ret; } #endif /* __KERNEL__ */ Loading fs/xfs/xfs_vnodeops.c +4 −6 Original line number Diff line number Diff line Loading @@ -3844,9 +3844,7 @@ xfs_reclaim( XFS_MOUNT_ILOCK(mp); vn_bhv_remove(VN_BHV_HEAD(vp), XFS_ITOBHV(ip)); list_add_tail(&ip->i_reclaim, &mp->m_del_inodes); spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_IRECLAIMABLE; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_IRECLAIMABLE); XFS_MOUNT_IUNLOCK(mp); } return 0; Loading @@ -3872,8 +3870,8 @@ xfs_finish_reclaim( */ write_lock(&ih->ih_lock); spin_lock(&ip->i_flags_lock); if ((ip->i_flags & XFS_IRECLAIM) || (!(ip->i_flags & XFS_IRECLAIMABLE) && vp == NULL)) { if (__xfs_iflags_test(ip, XFS_IRECLAIM) || (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) && vp == NULL)) { spin_unlock(&ip->i_flags_lock); write_unlock(&ih->ih_lock); if (locked) { Loading @@ -3882,7 +3880,7 @@ xfs_finish_reclaim( } return 1; } ip->i_flags |= XFS_IRECLAIM; __xfs_iflags_set(ip, XFS_IRECLAIM); spin_unlock(&ip->i_flags_lock); write_unlock(&ih->ih_lock); Loading Loading
fs/xfs/linux-2.6/xfs_super.c +1 −3 Original line number Diff line number Diff line Loading @@ -227,9 +227,7 @@ xfs_initialize_vnode( xfs_revalidate_inode(XFS_BHVTOM(bdp), vp, ip); xfs_set_inodeops(inode); spin_lock(&ip->i_flags_lock); ip->i_flags &= ~XFS_INEW; spin_unlock(&ip->i_flags_lock); xfs_iflags_clear(ip, XFS_INEW); barrier(); unlock_new_inode(inode); Loading
fs/xfs/xfs_iget.c +6 −14 Original line number Diff line number Diff line Loading @@ -215,7 +215,7 @@ xfs_iget_core( * If INEW is set this inode is being set up * we need to pause and try again. */ if (ip->i_flags & XFS_INEW) { if (xfs_iflags_test(ip, XFS_INEW)) { read_unlock(&ih->ih_lock); delay(1); XFS_STATS_INC(xs_ig_frecycle); Loading @@ -230,7 +230,7 @@ xfs_iget_core( * on its way out of the system, * we need to pause and try again. */ if (ip->i_flags & XFS_IRECLAIM) { if (xfs_iflags_test(ip, XFS_IRECLAIM)) { read_unlock(&ih->ih_lock); delay(1); XFS_STATS_INC(xs_ig_frecycle); Loading @@ -243,9 +243,7 @@ xfs_iget_core( XFS_STATS_INC(xs_ig_found); spin_lock(&ip->i_flags_lock); ip->i_flags &= ~XFS_IRECLAIMABLE; spin_unlock(&ip->i_flags_lock); xfs_iflags_clear(ip, XFS_IRECLAIMABLE); version = ih->ih_version; read_unlock(&ih->ih_lock); xfs_ihash_promote(ih, ip, version); Loading Loading @@ -299,10 +297,7 @@ xfs_iget_core( if (lock_flags != 0) xfs_ilock(ip, lock_flags); spin_lock(&ip->i_flags_lock); ip->i_flags &= ~XFS_ISTALE; spin_unlock(&ip->i_flags_lock); xfs_iflags_clear(ip, XFS_ISTALE); vn_trace_exit(vp, "xfs_iget.found", (inst_t *)__return_address); goto return_ip; Loading Loading @@ -371,10 +366,7 @@ xfs_iget_core( ih->ih_next = ip; ip->i_udquot = ip->i_gdquot = NULL; ih->ih_version++; spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_INEW; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_INEW); write_unlock(&ih->ih_lock); /* Loading Loading @@ -625,7 +617,7 @@ xfs_iput_new(xfs_inode_t *ip, vn_trace_entry(vp, "xfs_iput_new", (inst_t *)__return_address); if ((ip->i_d.di_mode == 0)) { ASSERT(!(ip->i_flags & XFS_IRECLAIMABLE)); ASSERT(!xfs_iflags_test(ip, XFS_IRECLAIMABLE)); vn_mark_bad(vp); } if (inode->i_state & I_NEW) Loading
fs/xfs/xfs_inode.c +5 −12 Original line number Diff line number Diff line Loading @@ -2193,7 +2193,7 @@ xfs_ifree_cluster( /* Inode not in memory or we found it already, * nothing to do */ if (!ip || (ip->i_flags & XFS_ISTALE)) { if (!ip || xfs_iflags_test(ip, XFS_ISTALE)) { read_unlock(&ih->ih_lock); continue; } Loading @@ -2215,10 +2215,7 @@ xfs_ifree_cluster( if (ip == free_ip) { if (xfs_iflock_nowait(ip)) { spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_ISTALE; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_ISTALE); if (xfs_inode_clean(ip)) { xfs_ifunlock(ip); } else { Loading @@ -2231,9 +2228,7 @@ xfs_ifree_cluster( if (xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) { if (xfs_iflock_nowait(ip)) { spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_ISTALE; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_ISTALE); if (xfs_inode_clean(ip)) { xfs_ifunlock(ip); Loading Loading @@ -2263,9 +2258,7 @@ xfs_ifree_cluster( AIL_LOCK(mp,s); iip->ili_flush_lsn = iip->ili_item.li_lsn; AIL_UNLOCK(mp, s); spin_lock(&iip->ili_inode->i_flags_lock); iip->ili_inode->i_flags |= XFS_ISTALE; spin_unlock(&iip->ili_inode->i_flags_lock); xfs_iflags_set(ip, XFS_ISTALE); pre_flushed++; } lip = lip->li_bio_list; Loading Loading @@ -2764,7 +2757,7 @@ xfs_iunpin( struct inode *inode = NULL; spin_lock(&ip->i_flags_lock); if (!(ip->i_flags & (XFS_IRECLAIM|XFS_IRECLAIMABLE))) { if (!__xfs_iflags_test(ip, XFS_IRECLAIM|XFS_IRECLAIMABLE)) { bhv_vnode_t *vp = XFS_ITOV_NULL(ip); /* make sync come back and flush this inode */ Loading
fs/xfs/xfs_inode.h +41 −0 Original line number Diff line number Diff line Loading @@ -305,6 +305,47 @@ typedef struct xfs_inode { #endif } xfs_inode_t; /* * i_flags helper functions */ static inline void __xfs_iflags_set(xfs_inode_t *ip, unsigned short flags) { ip->i_flags |= flags; } static inline void xfs_iflags_set(xfs_inode_t *ip, unsigned short flags) { spin_lock(&ip->i_flags_lock); __xfs_iflags_set(ip, flags); spin_unlock(&ip->i_flags_lock); } static inline void xfs_iflags_clear(xfs_inode_t *ip, unsigned short flags) { spin_lock(&ip->i_flags_lock); ip->i_flags &= ~flags; spin_unlock(&ip->i_flags_lock); } static inline int __xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) { return (ip->i_flags & flags); } static inline int xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) { int ret; spin_lock(&ip->i_flags_lock); ret = __xfs_iflags_test(ip, flags); spin_unlock(&ip->i_flags_lock); return ret; } #endif /* __KERNEL__ */ Loading
fs/xfs/xfs_vnodeops.c +4 −6 Original line number Diff line number Diff line Loading @@ -3844,9 +3844,7 @@ xfs_reclaim( XFS_MOUNT_ILOCK(mp); vn_bhv_remove(VN_BHV_HEAD(vp), XFS_ITOBHV(ip)); list_add_tail(&ip->i_reclaim, &mp->m_del_inodes); spin_lock(&ip->i_flags_lock); ip->i_flags |= XFS_IRECLAIMABLE; spin_unlock(&ip->i_flags_lock); xfs_iflags_set(ip, XFS_IRECLAIMABLE); XFS_MOUNT_IUNLOCK(mp); } return 0; Loading @@ -3872,8 +3870,8 @@ xfs_finish_reclaim( */ write_lock(&ih->ih_lock); spin_lock(&ip->i_flags_lock); if ((ip->i_flags & XFS_IRECLAIM) || (!(ip->i_flags & XFS_IRECLAIMABLE) && vp == NULL)) { if (__xfs_iflags_test(ip, XFS_IRECLAIM) || (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) && vp == NULL)) { spin_unlock(&ip->i_flags_lock); write_unlock(&ih->ih_lock); if (locked) { Loading @@ -3882,7 +3880,7 @@ xfs_finish_reclaim( } return 1; } ip->i_flags |= XFS_IRECLAIM; __xfs_iflags_set(ip, XFS_IRECLAIM); spin_unlock(&ip->i_flags_lock); write_unlock(&ih->ih_lock); Loading