diff --git a/[refs] b/[refs] index e4126d990234..fa8f515b85f3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b3aea4edc2903fdee34920630b8b2433f6452f02 +refs/heads/master: 09262b4339de5417a10803fbfac277eebb38ca5a diff --git a/trunk/fs/xfs/xfs_inode.h b/trunk/fs/xfs/xfs_inode.h index 79d724615c39..ea1e24effd49 100644 --- a/trunk/fs/xfs/xfs_inode.h +++ b/trunk/fs/xfs/xfs_inode.h @@ -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__ */ diff --git a/trunk/fs/xfs/xfs_vnodeops.c b/trunk/fs/xfs/xfs_vnodeops.c index f2c037a9564e..8ed7af3c5d63 100644 --- a/trunk/fs/xfs/xfs_vnodeops.c +++ b/trunk/fs/xfs/xfs_vnodeops.c @@ -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); }