diff options
author | Christoph Hellwig <hch@lst.de> | 2024-07-08 14:02:57 +0200 |
---|---|---|
committer | Chandan Babu R <chandanbabu@kernel.org> | 2024-07-09 09:08:28 +0530 |
commit | 2bf6e353542d233486195953dc9c346331f82dcb (patch) | |
tree | 009c371dd6957c5fbb0d16b059ce3a239326c641 /fs/xfs | |
parent | 49cdc4e834e46d7c11a91d7adcfa04f56d19efaf (diff) |
xfs: fix rtalloc rotoring when delalloc is in use
If we're trying to allocate real space for a delalloc reservation at
offset 0, we should use the rotor to spread files across the rt volume.
Switch the rtalloc to use the XFS_ALLOC_INITIAL_USER_DATA flag that
is set for any write at startoff to make it match the behavior for
the main data device.
Based on a patch from Darrick J. Wong.
Fixes: 6a94b1acda7e ("xfs: reinstate delalloc for RT inodes (if sb_rextsize == 1)")
Reported-by: Darrick J. Wong <djwong@kernel.org>
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')
-rw-r--r-- | fs/xfs/xfs_rtalloc.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c index 5a7ddfed1bb8..0c3e96c621a6 100644 --- a/fs/xfs/xfs_rtalloc.c +++ b/fs/xfs/xfs_rtalloc.c @@ -12,6 +12,7 @@ #include "xfs_bit.h" #include "xfs_mount.h" #include "xfs_inode.h" +#include "xfs_alloc.h" #include "xfs_bmap.h" #include "xfs_bmap_btree.h" #include "xfs_bmap_util.h" @@ -1382,7 +1383,7 @@ retry: start = 0; } else if (xfs_bmap_adjacent(ap)) { start = xfs_rtb_to_rtx(mp, ap->blkno); - } else if (ap->eof && ap->offset == 0) { + } else if (ap->datatype & XFS_ALLOC_INITIAL_USER_DATA) { /* * If it's an allocation to an empty file at offset 0, pick an * extent that will space things out in the rt area. |