On Mon, Jul 08, 2024 at 02:02:57PM +0200, Christoph Hellwig wrote: > 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)") > Repored-by: Darrick J. Wong <djwong@xxxxxxxxxx> Reported-by: > Signed-off-by: Christoph Hellwig <hch@xxxxxx> With that fixed, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/xfs/xfs_rtalloc.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c > index 5a7ddfed1bb855..0c3e96c621a672 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 @@ xfs_bmap_rtalloc( > 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. > -- > 2.43.0 > >