diff options
author | Christoph Hellwig <hch@lst.de> | 2024-08-13 10:39:40 +0300 |
---|---|---|
committer | Chandan Babu R <chandanbabu@kernel.org> | 2024-09-03 07:37:38 +0300 |
commit | b717089efe47bb0894d3deb016fecfc09ae586c6 (patch) | |
tree | 079e0a895106fcffd2cef1b921cb03494bdf80d4 /fs/xfs/xfs_file.c | |
parent | f1204d96450fa7650dc27b8839df159a01998737 (diff) | |
download | linux-b717089efe47bb0894d3deb016fecfc09ae586c6.tar.xz |
xfs: check XFS_EOFBLOCKS_RELEASED earlier in xfs_release_eofblocks
If the XFS_EOFBLOCKS_RELEASED flag is set, we are not going to free the
eofblocks, so don't bother locking the inode or performing the checks in
xfs_can_free_eofblocks. Also switch to a test_and_set operation once
the iolock has been acquire so that only the caller that sets it actually
frees the post-EOF blocks.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Diffstat (limited to 'fs/xfs/xfs_file.c')
-rw-r--r-- | fs/xfs/xfs_file.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 30b553ac8f56..986448d1ff3c 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1234,12 +1234,11 @@ xfs_file_release( */ if (inode->i_nlink && (file->f_mode & FMODE_WRITE) && + !xfs_iflags_test(ip, XFS_EOFBLOCKS_RELEASED) && xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { if (xfs_can_free_eofblocks(ip) && - !xfs_iflags_test(ip, XFS_EOFBLOCKS_RELEASED)) { + !xfs_iflags_test_and_set(ip, XFS_EOFBLOCKS_RELEASED)) xfs_free_eofblocks(ip); - xfs_iflags_set(ip, XFS_EOFBLOCKS_RELEASED); - } xfs_iunlock(ip, XFS_IOLOCK_EXCL); } |