Message ID | 20240820170517.528181-5-hch@lst.de (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | [1/6] xfs: merge xfs_attr_leaf_try_add into xfs_attr_leaf_addname | expand |
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@lst.de> Makes sense to combine these Reviewed-by: Darrick J. Wong <djwong@kernel.org> --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 > >
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)
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@lst.de> --- fs/xfs/libxfs/xfs_bmap.c | 73 +++++++++++++++------------------------- 1 file changed, 28 insertions(+), 45 deletions(-)