btrfs: make nospace_cache related test cases to work with latest v2 cache
authorQu Wenruo <wqu@suse.com>
Sun, 14 Nov 2021 12:51:01 +0000 (20:51 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 14 Nov 2021 13:00:23 +0000 (21:00 +0800)
In the coming btrfs-progs v5.15 release, mkfs.btrfs will change to
use v2 cache by default.

However nospace_cache mount option will not work with v2 cache, as
it would make v2 cache out of sync with on-disk used space.

So mounting a btrfs with v2 cache using "nospace_cache" will make
btrfs to reject the mount.

There are quite some test cases relying on nospace_cache to prevent
v1 cache to take up data space.

For those test cases, we no longer need the "nospace_cache" mount
option if the filesystem is already using v2 cache. Since v2 cache
is using metadata space, it will no longer take up data space, thus
no extra mount options for those test cases.

By this, we can keep those existing tests to run without problem for
both v1 and v2 cache.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
12 files changed:
common/btrfs
tests/btrfs/102
tests/btrfs/140
tests/btrfs/141
tests/btrfs/142
tests/btrfs/143
tests/btrfs/151
tests/btrfs/157
tests/btrfs/158
tests/btrfs/170
tests/btrfs/199
tests/btrfs/215

index 2eab4b299387a6aed245bd49a1078376bd46b68a..cd053d3b284a7d9a38e96221f488134a91a79126 100644 (file)
@@ -461,3 +461,15 @@ _require_btrfs_sysfs_fsid()
        test -f /sys/fs/btrfs/$fsid/devinfo/1/fsid ||\
                _notrun "Need btrfs sysfs fsid support"
 }
+
+# If test doesn't want v1 cache to take up data space, there's no longer need
+# the "nospace_cache" mount option if the filesystem is already using v2 cache.
+# Since v2 cache is using metadata space, it will no longer take up data space.
+_btrfs_no_v1_cache_opt()
+{
+       if $BTRFS_UTIL_PROG inspect-internal dump-tree $SCRATCH_DEV |\
+          grep -q "FREE_SPACE_TREE"; then
+               return
+       fi
+       echo -n "-onospace_cache"
+}
index e5a1b068ae50de2bde2dc2e88d15ae81acc2e447..2a384f3cb74ea5219533658d45c82bbf8be14643 100755 (executable)
@@ -22,7 +22,7 @@ _scratch_mkfs >>$seqres.full 2>&1
 # Mount our filesystem without space caches enabled so that we do not get any
 # space used from the initial data block group that mkfs creates (space caches
 # used space from data block groups).
-_scratch_mount "-o nospace_cache"
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 # Need an fs with at least 2Gb to make sure mkfs.btrfs does not create an fs
 # using mixed block groups (used both for data and metadata). We really need
index 5a5f828ce0debdcebfce53c3bccd4580ecc3aa8c..66efc126593c739e4b3c4313f4a5d506636fb871 100755 (executable)
@@ -60,9 +60,8 @@ echo "step 1......mkfs.btrfs" >>$seqres.full
 mkfs_opts="-d raid1 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
-# -o nospace_cache makes sure data is written to the start position of the data
-# chunk
-_scratch_mount -o nospace_cache
+# make sure data is written to the start position of the data chunk
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
        _filter_xfs_io_offset
index cf0979e9b42add08d02f07dc91d6369adbab8aeb..ca164fdc95e5ebe8d64135110399b61b2007c335 100755 (executable)
@@ -59,9 +59,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid1 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
-# -o nospace_cache makes sure data is written to the start position of the data
-# chunk
-_scratch_mount -o nospace_cache
+# make sure data is written to the start position of the data chunk
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
        _filter_xfs_io_offset
index 1318be0fba186e0fa8a84a9bd003718438301523..c88cace99629d5f0752e3413d943135bcb7e158e 100755 (executable)
@@ -37,9 +37,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid1 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
-# -o nospace_cache makes sure data is written to the start position of the data
-# chunk
-_scratch_mount -o nospace_cache,nodatasum
+# make sure data is written to the start position of the data chunk
+_scratch_mount -o nodatasum $(_btrfs_no_v1_cache_opt)
 
 $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
        _filter_xfs_io_offset
index 6736dcad1702c14962ab333b77a19a0bb990b170..8f086ee87525dd63fbf81a9110efa69f750672ab 100755 (executable)
@@ -44,9 +44,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid1 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
-# -o nospace_cache makes sure data is written to the start position of the data
-# chunk
-_scratch_mount -o nospace_cache,nodatasum
+# make sure data is written to the start position of the data chunk
+_scratch_mount -o nodatasum $(_btrfs_no_v1_cache_opt)
 
 $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
        _filter_xfs_io_offset
index 099e85cc7b2e94a8f1cb09f2f78e657273858159..54cd0827d915cb5bb69bc37a3560ab6f67ceb4ef 100755 (executable)
@@ -31,8 +31,8 @@ _scratch_dev_pool_get 3
 # create raid1 for data
 _scratch_pool_mkfs "-d raid1 -b 1G" >> $seqres.full 2>&1
 
-# we need an empty data chunk, so nospace_cache is required.
-_scratch_mount -onospace_cache
+# we need an empty data chunk, so $(_btrfs_no_v1_cache_opt) is required.
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 # if data chunk is empty, 'btrfs device remove' can change raid1 to
 # single.
index 0cfe3ce565483a26ef522a26c2bdde441ba18161..ae56f3e1bdb84bcd82d99ec8834867bdee1102b5 100755 (executable)
@@ -64,9 +64,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid6 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
-# -o nospace_cache makes sure data is written to the start position of the data
-# chunk
-_scratch_mount -o nospace_cache
+# make sure data is written to the start position of the data chunk
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 # [0,64K) is written to stripe 0 and [64K, 128K) is written to stripe 1
 $XFS_IO_PROG -f -d -c "pwrite -S 0xaa 0 128K" -c "fsync" \
@@ -94,7 +93,7 @@ $XFS_IO_PROG -f -d -c "pwrite -S 0xbb $phy1 64K" $devpath1 > /dev/null
 
 # step 3: read foobar to repair the bitrot
 echo "step 3......repair the bitrot" >> $seqres.full
-_scratch_mount -o nospace_cache
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 # read the 2nd stripe, i.e. [64K, 128K), to trigger repair
 od -x -j 64K $SCRATCH_MNT/foobar
index ad374eba8c7e534a2bb7e51dc8f1b8dfa869f2ef..aa85835a0425b6655e7ecb9ccc42be553bb216ae 100755 (executable)
@@ -56,9 +56,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid6 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
-# -o nospace_cache makes sure data is written to the start position of the data
-# chunk
-_scratch_mount -o nospace_cache
+# make sure data is written to the start position of the data chunk
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 # [0,64K) is written to stripe 0 and [64K, 128K) is written to stripe 1
 $XFS_IO_PROG -f -d -c "pwrite -S 0xaa 0 128K" -c "fsync" \
@@ -85,7 +84,7 @@ $XFS_IO_PROG -f -d -c "pwrite -S 0xbb $phy1 64K" $devpath1 > /dev/null
 
 # step 3: scrub filesystem to repair the bitrot
 echo "step 3......repair the bitrot" >> $seqres.full
-_scratch_mount -o nospace_cache
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 $BTRFS_UTIL_PROG scrub start -B $SCRATCH_MNT >> $seqres.full 2>&1
 
index 15382eb31638d6c0b6105a390b55ad4036d79928..8700be07c30734e8526277920cff7e55b0905e90 100755 (executable)
@@ -29,7 +29,7 @@ _scratch_mkfs_sized $fs_size >>$seqres.full 2>&1
 
 # Mount without space cache so that we can precisely fill all data space and
 # unallocated space later (space cache v1 uses data block groups).
-_scratch_mount "-o nospace_cache"
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 # Create our test file and allocate 1826.25Mb of space for it.
 # This will exhaust the existing data block group and all unallocated space on
index 6aca62f463d6974f48b5a5d111f3845c523b3c29..2024447c0a0c6dada30926d76fbcd420e97efc14 100755 (executable)
@@ -67,7 +67,7 @@ loop_dev=$(_create_loop_device "$loop_file")
 loop_mnt=$tmp/loop_mnt
 
 mkdir -p $loop_mnt
-# - nospace_cache
+# - $(_btrfs_no_v1_cache_opt)
 #   Since v1 cache using DATA space, it can break data extent bytenr
 #   continuousness.
 # - nodatasum
@@ -75,7 +75,7 @@ mkdir -p $loop_mnt
 #   Disabling datasum could reduce the margin caused by metadata to minimal
 # - discard
 #   What we're testing
-_mount -o nospace_cache,nodatasum,discard $loop_dev $loop_mnt
+_mount $(_btrfs_no_v1_cache_opt) -o nodatasum,discard $loop_dev $loop_mnt
 
 # Craft the following extent layout:
 #         |  BG1 |      BG2        |       BG3            |
index fa622568adfd977ac19a64004a044c5f04346f7d..9ee1a8b3996706768732c1defed864e06e922b14 100755 (executable)
@@ -30,7 +30,7 @@ _require_non_zoned_device $SCRATCH_DEV
 _scratch_mkfs > /dev/null
 # disable freespace inode to ensure file is the first thing in the data
 # blobk group
-_scratch_mount -o nospace_cache
+_scratch_mount $(_btrfs_no_v1_cache_opt)
 
 pagesize=$(get_page_size)
 blocksize=$(_get_block_size $SCRATCH_MNT)