+
+#
+# Stage 3: Wipe out any partially masked allocation group.
+#
+
+if ($retain > 0) {
+ print " o AG#", $ag, " AGF fields (partial)\n" unless $quiet;
+
+ my %ragf = xfs_db "'agf $ag'", '"print freeblks"',
+ '"addr bnoroot"', '"print recs[1].startblock"';
+ my $maskblks = $ragf{'freeblks'} - $retain;
+ my $newstart = $ragf{'recs[1].startblock'} + $maskblks;
+ xfs_db "'agf $ag'",
+ "'write freeblks $retain'", "'write longest $retain'",
+ "'agf $ag'", '"addr bnoroot"',
+ "'write recs[1].startblock $newstart'",
+ "'write recs[1].blockcount $retain'",
+ "'agf $ag'", '"addr cntroot"',
+ "'write recs[1].startblock $newstart'",
+ "'write recs[1].blockcount $retain'";
+
+ $sb{'fdblocks'} -= $maskblks;
+ print " cleared ", $maskblks, " blocks from AG#", $ag, "\n"
+ unless $quiet;
+}
+
+print "=== Updating final freespace count, ", $sb{'fdblocks'}, " blocks\n"
+ unless $quiet;