diff options
-rw-r--r-- | fs/xfs/xfs_bmap_btree.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/xfs/xfs_bmap_btree.c b/fs/xfs/xfs_bmap_btree.c index 1140cef4ba99..23efad29a5cd 100644 --- a/fs/xfs/xfs_bmap_btree.c +++ b/fs/xfs/xfs_bmap_btree.c | |||
@@ -1525,6 +1525,21 @@ xfs_bmbt_split( | |||
1525 | XFS_BMBT_TRACE_CURSOR(cur, ERROR); | 1525 | XFS_BMBT_TRACE_CURSOR(cur, ERROR); |
1526 | return error; | 1526 | return error; |
1527 | } | 1527 | } |
1528 | if (args.fsbno == NULLFSBLOCK && args.minleft) { | ||
1529 | /* | ||
1530 | * Could not find an AG with enough free space to satisfy | ||
1531 | * a full btree split. Try again without minleft and if | ||
1532 | * successful activate the lowspace algorithm. | ||
1533 | */ | ||
1534 | args.fsbno = 0; | ||
1535 | args.type = XFS_ALLOCTYPE_FIRST_AG; | ||
1536 | args.minleft = 0; | ||
1537 | if ((error = xfs_alloc_vextent(&args))) { | ||
1538 | XFS_BMBT_TRACE_CURSOR(cur, ERROR); | ||
1539 | return error; | ||
1540 | } | ||
1541 | cur->bc_private.b.flist->xbf_low = 1; | ||
1542 | } | ||
1528 | if (args.fsbno == NULLFSBLOCK) { | 1543 | if (args.fsbno == NULLFSBLOCK) { |
1529 | XFS_BMBT_TRACE_CURSOR(cur, EXIT); | 1544 | XFS_BMBT_TRACE_CURSOR(cur, EXIT); |
1530 | *stat = 0; | 1545 | *stat = 0; |