On Wed, May 22, 2019 at 02:05:38PM -0400, Brian Foster wrote: > The small allocation helper is implemented in a way that is fairly > tightly integrated to the existing allocation algorithms. It expects > a cntbt cursor beyond the end of the tree, attempts to locate the > last record in the tree and only attempts an AGFL allocation if the > cntbt is empty. > > The upcoming generic algorithm doesn't rely on the cntbt processing > of this function. It will only call this function when the cntbt > doesn't have a big enough extent or is empty and thus AGFL > allocation is the only remaining option. Tweak > xfs_alloc_ag_vextent_small() to handle a NULL cntbt cursor and skip > the cntbt logic. This facilitates use by the existing allocation > code and new code that only requires an AGFL allocation attempt. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> Looks ok, Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > --- > fs/xfs/libxfs/xfs_alloc.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > index b345fe771c54..436f8eb0bc4c 100644 > --- a/fs/xfs/libxfs/xfs_alloc.c > +++ b/fs/xfs/libxfs/xfs_alloc.c > @@ -713,9 +713,16 @@ xfs_alloc_ag_vextent_small( > int error = 0; > xfs_agblock_t fbno = NULLAGBLOCK; > xfs_extlen_t flen = 0; > - int i; > + int i = 0; > > - error = xfs_btree_decrement(ccur, 0, &i); > + /* > + * If a cntbt cursor is provided, try to allocate the largest record in > + * the tree. Try the AGFL if the cntbt is empty, otherwise fail the > + * allocation. Make sure to respect minleft even when pulling from the > + * freelist. > + */ > + if (ccur) > + error = xfs_btree_decrement(ccur, 0, &i); > if (error) > goto error; > if (i) { > -- > 2.17.2 >