On Tue, Aug 20, 2024 at 07:04:55PM +0200, Christoph Hellwig wrote: > Userdata and metadata allocations end up in the same allocation helpers. > Remove the separate xfs_bmap_alloc_userdata function to make this more > clear. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Makes sense to combine these Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/xfs/libxfs/xfs_bmap.c | 73 +++++++++++++++------------------------- > 1 file changed, 28 insertions(+), 45 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index a63be14a9873e8..1db9d084a44c47 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -4167,43 +4167,6 @@ xfs_bmapi_reserve_delalloc( > return error; > } > > -static int > -xfs_bmap_alloc_userdata( > - struct xfs_bmalloca *bma) > -{ > - struct xfs_mount *mp = bma->ip->i_mount; > - int whichfork = xfs_bmapi_whichfork(bma->flags); > - int error; > - > - /* > - * Set the data type being allocated. For the data fork, the first data > - * in the file is treated differently to all other allocations. For the > - * attribute fork, we only need to ensure the allocated range is not on > - * the busy list. > - */ > - bma->datatype = XFS_ALLOC_NOBUSY; > - if (whichfork == XFS_DATA_FORK || whichfork == XFS_COW_FORK) { > - bma->datatype |= XFS_ALLOC_USERDATA; > - if (bma->offset == 0) > - bma->datatype |= XFS_ALLOC_INITIAL_USER_DATA; > - > - if (mp->m_dalign && bma->length >= mp->m_dalign) { > - error = xfs_bmap_isaeof(bma, whichfork); > - if (error) > - return error; > - } > - > - if (XFS_IS_REALTIME_INODE(bma->ip)) > - return xfs_bmap_rtalloc(bma); > - } > - > - if (unlikely(XFS_TEST_ERROR(false, mp, > - XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT))) > - return xfs_bmap_exact_minlen_extent_alloc(bma); > - > - return xfs_bmap_btalloc(bma); > -} > - > static int > xfs_bmapi_allocate( > struct xfs_bmalloca *bma) > @@ -4221,15 +4184,35 @@ xfs_bmapi_allocate( > else > bma->minlen = 1; > > - if (bma->flags & XFS_BMAPI_METADATA) { > - if (unlikely(XFS_TEST_ERROR(false, mp, > - XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT))) > - error = xfs_bmap_exact_minlen_extent_alloc(bma); > - else > - error = xfs_bmap_btalloc(bma); > - } else { > - error = xfs_bmap_alloc_userdata(bma); > + if (!(bma->flags & XFS_BMAPI_METADATA)) { > + /* > + * For the data and COW fork, the first data in the file is > + * treated differently to all other allocations. For the > + * attribute fork, we only need to ensure the allocated range > + * is not on the busy list. > + */ > + bma->datatype = XFS_ALLOC_NOBUSY; > + if (whichfork == XFS_DATA_FORK || whichfork == XFS_COW_FORK) { > + bma->datatype |= XFS_ALLOC_USERDATA; > + if (bma->offset == 0) > + bma->datatype |= XFS_ALLOC_INITIAL_USER_DATA; > + > + if (mp->m_dalign && bma->length >= mp->m_dalign) { > + error = xfs_bmap_isaeof(bma, whichfork); > + if (error) > + return error; > + } > + } > } > + > + if ((bma->datatype & XFS_ALLOC_USERDATA) && > + XFS_IS_REALTIME_INODE(bma->ip)) > + error = xfs_bmap_rtalloc(bma); > + else if (unlikely(XFS_TEST_ERROR(false, mp, > + XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT))) > + error = xfs_bmap_exact_minlen_extent_alloc(bma); > + else > + error = xfs_bmap_btalloc(bma); > if (error) > return error; > if (bma->blkno == NULLFSBLOCK) > -- > 2.43.0 > >