summaryrefslogtreecommitdiff
path: root/fs/xfs
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2021-09-01 11:24:41 -0700
committerDarrick J. Wong <djwong@kernel.org>2021-09-17 18:55:27 -0700
commit146d6bb89e4f7b33a3b1c1ac0f7621b6cdc7e004 (patch)
tree950c3833700cf06fe05320c7c11b74aca1405f3b /fs/xfs
parent436ad2221a3e67ae7ad301392f4a4552710a51c3 (diff)
xfs: only free posteof blocks on first close
Certain workloads fragment files on XFS very badly, such as a software package that creates a number of threads, each of which repeatedly run the sequence: open a file, perform a synchronous write, and close the file, which defeats the speculative preallocation mechanism. We work around this problem by only deleting posteof blocks the /first/ time a file is closed to preserve the behavior that unpacking a tarball lays out files one after the other with no gaps. Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Diffstat (limited to 'fs/xfs')
-rw-r--r--fs/xfs/xfs_inode.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 6bfd87fa4712..978a5ef43239 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -1268,9 +1268,7 @@ xfs_release(
if (error)
goto out_unlock;
- /* delalloc blocks after truncation means it really is dirty */
- if (ip->i_delayed_blks)
- xfs_iflags_set(ip, XFS_IDIRTY_RELEASE);
+ xfs_iflags_set(ip, XFS_IDIRTY_RELEASE);
}
out_unlock: