Loading fs/xfs/xfs_inode.h +13 −0 Original line number Diff line number Diff line Loading @@ -360,6 +360,19 @@ xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) spin_unlock(&ip->i_flags_lock); return ret; } static inline int xfs_iflags_test_and_clear(xfs_inode_t *ip, unsigned short flags) { int ret; spin_lock(&ip->i_flags_lock); ret = ip->i_flags & flags; if (ret) ip->i_flags &= ~flags; spin_unlock(&ip->i_flags_lock); return ret; } #endif /* __KERNEL__ */ Loading fs/xfs/xfs_vnodeops.c +1 −6 Original line number Diff line number Diff line Loading @@ -1541,12 +1541,7 @@ xfs_release( * significantly reducing the time window where we'd otherwise * be exposed to that problem. */ spin_lock(&ip->i_flags_lock); truncated = __xfs_iflags_test(ip, XFS_ITRUNCATED); if (truncated) ip->i_flags &= ~XFS_ITRUNCATED; spin_unlock(&ip->i_flags_lock); truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED); if (truncated && VN_DIRTY(vp) && ip->i_delayed_blks > 0) xfs_flush_pages(ip, 0, -1, XFS_B_ASYNC, FI_NONE); } Loading Loading
fs/xfs/xfs_inode.h +13 −0 Original line number Diff line number Diff line Loading @@ -360,6 +360,19 @@ xfs_iflags_test(xfs_inode_t *ip, unsigned short flags) spin_unlock(&ip->i_flags_lock); return ret; } static inline int xfs_iflags_test_and_clear(xfs_inode_t *ip, unsigned short flags) { int ret; spin_lock(&ip->i_flags_lock); ret = ip->i_flags & flags; if (ret) ip->i_flags &= ~flags; spin_unlock(&ip->i_flags_lock); return ret; } #endif /* __KERNEL__ */ Loading
fs/xfs/xfs_vnodeops.c +1 −6 Original line number Diff line number Diff line Loading @@ -1541,12 +1541,7 @@ xfs_release( * significantly reducing the time window where we'd otherwise * be exposed to that problem. */ spin_lock(&ip->i_flags_lock); truncated = __xfs_iflags_test(ip, XFS_ITRUNCATED); if (truncated) ip->i_flags &= ~XFS_ITRUNCATED; spin_unlock(&ip->i_flags_lock); truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED); if (truncated && VN_DIRTY(vp) && ip->i_delayed_blks > 0) xfs_flush_pages(ip, 0, -1, XFS_B_ASYNC, FI_NONE); } Loading