btrfs/177: fix for nodesize 64K and type single
authorAnand Jain <anand.jain@oracle.com>
Tue, 10 Mar 2020 04:22:32 +0000 (12:22 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 22 Mar 2020 13:55:15 +0000 (21:55 +0800)
In the blockgroup type single with nodesize 64K, the relocation of
the bg containing the swapfile is not being attempted during the
resize. So due to this the resize is successful and does not
generate the required 'Text file busy' error message as in the
golden output and so the testcase fails.

Fix this by replacing the mkfs created chunk with the bigger kernel
created chunk using balance, and then fill it up to the full. Upsize
to 3x of fssize once instead of first to 2G and then to 3G. Also
drop the unnecessary downsize to 2G step.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/btrfs/177
tests/btrfs/177.out

index f7c2436ee7e46d9699c6c1705cb047fd623d284b..69b9a539500a96b454eb5afed53b3d8174b3dd04 100755 (executable)
@@ -36,30 +36,42 @@ swapfile="$SCRATCH_MNT/swap"
 
 _require_scratch_size $((3 * 1024 * 1024)) #kB
 
-# First, create a 1GB filesystem and fill it up.
-_scratch_mkfs_sized $((1024 * 1024 * 1024)) >> $seqres.full 2>&1
+# First, create a 1GB filesystem.
+fssize=$((1024 * 1024 * 1024))
+_scratch_mkfs_sized $fssize >> $seqres.full 2>&1
 _scratch_mount
-dd if=/dev/zero of="$SCRATCH_MNT/fill" bs=1024k >> $seqres.full 2>&1
-# Now add more space and create a swap file. We know that the first 1GB of the
-# filesystem was used, so the swap file must be in the new part of the
+
+# Create a small file and run balance so we shall deal with the chunk
+# size as allocated by the kernel, mkfs allocated chunks are smaller.
+dd if=/dev/zero of="$SCRATCH_MNT/fill" bs=4096 count=1 >> $seqres.full 2>&1
+_run_btrfs_balance_start "$SCRATCH_MNT"
+
+# Now fill it up.
+dd if=/dev/zero of="$SCRATCH_MNT/refill" bs=4096 >> $seqres.full 2>&1
+
+# Now add more space and create a swap file. We know that the first $fssize
+# of the filesystem was used, so the swap file must be in the new part of the
 # filesystem.
-$BTRFS_UTIL_PROG filesystem resize 2G "$SCRATCH_MNT" | _filter_scratch
+$BTRFS_UTIL_PROG filesystem resize $((3 * fssize)) "$SCRATCH_MNT" | \
+                                                       _filter_scratch
 _format_swapfile "$swapfile" $((32 * 1024 * 1024))
 swapon "$swapfile"
-# Add even more space which we know is unused.
-$BTRFS_UTIL_PROG filesystem resize 3G "$SCRATCH_MNT" | _filter_scratch
+
 # Free up the first 1GB of the filesystem.
 rm -f "$SCRATCH_MNT/fill"
+rm -f "$SCRATCH_MNT/refill"
+
 # Get rid of empty block groups and also make sure that balance skips block
 # groups containing active swap files.
 _run_btrfs_balance_start "$SCRATCH_MNT"
-# Shrink away the unused space.
-$BTRFS_UTIL_PROG filesystem resize 2G "$SCRATCH_MNT" | _filter_scratch
+
 # Try to shrink away the area occupied by the swap file, which should fail.
 $BTRFS_UTIL_PROG filesystem resize 1G "$SCRATCH_MNT" 2>&1 | grep -o "Text file busy"
+
 swapoff "$swapfile"
+
 # It should work again after swapoff.
-$BTRFS_UTIL_PROG filesystem resize 1G "$SCRATCH_MNT" | _filter_scratch
+$BTRFS_UTIL_PROG filesystem resize $fssize "$SCRATCH_MNT" | _filter_scratch
 
 status=0
 exit
index 6ced01da9f61541fc8b39defd27648a67b074ed2..63aca0e5362dd45be69e7776d9d94c6d10a4a7a2 100644 (file)
@@ -1,6 +1,4 @@
 QA output created by 177
-Resize 'SCRATCH_MNT' of '2G'
-Resize 'SCRATCH_MNT' of '3G'
-Resize 'SCRATCH_MNT' of '2G'
+Resize 'SCRATCH_MNT' of '3221225472'
 Text file busy
-Resize 'SCRATCH_MNT' of '1G'
+Resize 'SCRATCH_MNT' of '1073741824'