[PATCH v3 3/4] xfs: randomly fall back to near mode lookup algorithm in debug mode

Brian Foster
2019-08-15T12:55:40Z

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@redhat.com>
---
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