xfs/294: calculate space to reserve for fragmentation test
authorDarrick J. Wong <darrick.wong@oracle.com>
Tue, 7 May 2019 16:57:09 +0000 (09:57 -0700)
committerEryu Guan <guaneryu@gmail.com>
Fri, 10 May 2019 09:30:12 +0000 (17:30 +0800)
This test requires us to fragment free space, and in part accomplishes
this by fallocating 400M of a 512M filesystem, then fallocating another
70M, and then using dd to eat remaining space.  However, it's risky to
assume the 400M figure because new features such as reflink and rmap
have per-ag metadata reservations which add to overhead.  Therefore,
reserve the 70M fragment file first, then try to fallocate 95% of the
remaining free space.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Tested-by: Yang Xu<xuyang2018.jy@cn.fujitsu.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/xfs/294

index bce4d07bd175ee7d0fc9697d4694c93217bee72d..af0fc1248ca06930f066c093bbdee5ee7d3dda0e 100755 (executable)
@@ -70,15 +70,16 @@ for I in `seq 1 100`; do
        touch $SCRATCH_MNT/testdir/12345678901234567890$I;
 done
 
-# Now completely fragment freespace.
-# Consume most of it:
-$XFS_IO_PROG -f -c "falloc 0 400m" $SCRATCH_MNT/fillfile ||
-       _fail "Could not allocate space"
-
 # File to fragment:
 $XFS_IO_PROG -f -c "falloc 0 70m" $SCRATCH_MNT/fragfile ||
        _fail "Could not allocate space"
 
+# Now completely fragment freespace.
+# Consume most of it:
+space=$(stat -f -c '%f * %S * 95 / 100' $SCRATCH_MNT | $BC_PROG)
+$XFS_IO_PROG -f -c "falloc 0 $space" $SCRATCH_MNT/fillfile ||
+       _fail "Could not allocate space"
+
 df -h $SCRATCH_MNT >> $seqres.full 2>&1
 
 # Fill remaining space; let this run to failure