The last block scan is the dominant near mode allocation algorithm for a newer filesystem with fewer, large free extents. Add debug mode logic to randomly fall back to lookup mode to improve regression test coverage. Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> --- fs/xfs/libxfs/xfs_alloc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index 7753b61ba532..d550aa5597bf 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -1266,6 +1266,7 @@ xfs_alloc_ag_vextent_near( int i; xfs_agblock_t bno; xfs_extlen_t len; + bool lastblock; /* handle unitialized agbno range so caller doesn't have to */ if (!args->min_agbno && !args->max_agbno) @@ -1291,7 +1292,12 @@ xfs_alloc_ag_vextent_near( * Otherwise run the optimized lookup search algorithm from the current * location to the end of the tree. */ - if (xfs_btree_islastblock(acur.cnt, 0)) { + lastblock = xfs_btree_islastblock(acur.cnt, 0); +#ifdef DEBUG + if (lastblock) + lastblock = prandom_u32() & 1; +#endif + if (lastblock) { int j; trace_xfs_alloc_cur_lastblock(args); -- 2.20.1