Skip to contentSkip to conversation

Restore the lowspace extent allocator algorithm

PATCH In review Lachlan McIlroy 2 participants 2 messages Jun 24, 2008 XFS filesystem

lore
Share & tools
lore
#0 lore raw

PATCH 2/2 Restore the lowspace extent allocator algorithm

When free space is running low the extent allocator may choose to allocate an extent from an AG without leaving sufficient space for a btree split when inserting the new extent (see where xfs_bmap_btalloc() sets minleft to 0). In this case the allocator will enable the lowspace algorithm which is supposed to allow further allocations (such as btree splits and newroots) to allocate from sequential AGs. This algorithm has been broken for a long time and this patch restores its behaviour.

Lachlan

fs/xfs/xfs_bmap_btree.c +0 -0
@@ -1504,7 +1504,9 @@ xfs_bmbt_split(
		 * we may need space for two tree splits.
		 */
		args.minleft = xfs_trans_get_block_res(args.tp);

- } else
+ } else if (cur->bc_private.b.flist->xbf_low)
+ args.type = XFS_ALLOCTYPE_START_BNO;
+ else

		args.type = XFS_ALLOCTYPE_NEAR_BNO;
	args.mod = args.alignment = args.total = args.isfl =
		args.userdata = args.minalignslop = 0;
@@ -2232,7 +2234,9 @@ xfs_bmbt_newroot(
#endif
		args.fsbno = be64_to_cpu(*pp);
		args.type = XFS_ALLOCTYPE_START_BNO;

- } else
+ } else if (cur->bc_private.b.flist->xbf_low)
+ args.type = XFS_ALLOCTYPE_START_BNO;
+ else

		args.type = XFS_ALLOCTYPE_NEAR_BNO;
	if ((error = xfs_alloc_vextent(&args))) {
		XFS_BMBT_TRACE_CURSOR(cur, ERROR);
#1 lore raw
Quoted 8 lines · Lachlan McIlroy

When free space is running low the extent allocator may choose to allocate an extent from an AG without leaving sufficient space for a btree split when inserting the new extent (see where xfs_bmap_btalloc() sets minleft to 0). In this case the allocator will enable the lowspace algorithm which is supposed to allow further allocations (such as btree splits and newroots) to allocate from sequential AGs. This algorithm has been broken for a long time and this patch restores its behaviour.

Looks ok to me. Perhaps add a comment to the definition of xbf_low that explains what it is used for so it doesn't get broken again in future?

Cheers,

Dave.

Signature · 2 lines
Dave Chinner
[email protected]