]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
fstests: btrfs/131: add explicit v1 space cache requirement
authorQu Wenruo <wqu@suse.com>
Thu, 25 Dec 2025 22:15:52 +0000 (08:45 +1030)
committerZorro Lang <zlang@kernel.org>
Sun, 25 Jan 2026 16:05:29 +0000 (00:05 +0800)
The test case is utilizing v1 space cache, meanwhile v1 space cache
is already marked deprecated for a while since kernel commit
1e7bec1f7d65 ("btrfs: emit a warning about space cache v1 being
deprecated").

Furthermore quite some features are not compatible with v1 cache,
including the soon-to-be-default block-group-tree, and hardware
dependent zoned features.

Currently we reject those features for btrfs/131, but what we really
want is to only run the test case for supported features/kernels.
The current way to reject will not handle future kernels that completely
rejects v1 space cache.

Add a new helper, _require_btrfs_v1_cache() to do the check, which
checks the following criteria:

- "space_cache=v1" mount option is supported
  And to handle default v2 cache behavior, also add "clear_cache".
  If the kernel has completely dropped v1 cache support, such mount
  should fail.

- Check if FREE_SPACE_TREE feature exists after above mount
  For bs != ps cases, v2 cache is enforced to replace v1 cache, thus
  we need to double check to make sure above mount didn't result v2
  cache.

- Check if cache generation is correct
  If v1 cache is working, the cache_generation should be some valid
  value other than 0 nor (u64)-1.

And replace the existing checks on zoned and block-group-tree with the
new one.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
common/btrfs
tests/btrfs/131

index 6a1095ff89343c50dd41fafc30f24780f2b1fb35..c2d616aa26e4beccd3ea1479a91d7f2719da0ba6 100644 (file)
@@ -630,6 +630,31 @@ _btrfs_no_v1_cache_opt()
        echo -n "-onospace_cache"
 }
 
+# v1 space cache is already deprecated and will be removed soon. Furthermore
+# the soon-to-be-default block-group-tree has dependency on v2 space cache, and
+# will reject v1 cache mount option.
+# Make sure v1 space cache is still supported for test cases still utilizing
+# v1 space cache.
+_require_btrfs_v1_cache()
+{
+       _scratch_mkfs &> /dev/null
+       _try_scratch_mount -o clear_cache,space_cache=v1 || _notrun "v1 space cache is not supported"
+       _scratch_unmount
+
+       # Make sure no FREE_SPACE_TREE enabled.
+       if $BTRFS_UTIL_PROG inspect-internal dump-super $SCRATCH_DEV |\
+          grep -q "FREE_SPACE_TREE"; then
+               _notrun "v1 space cache is not supported"
+       fi
+
+       # Make sure the cache generation is not 0 nor -1.
+       local cache_gen=$($BTRFS_UTIL_PROG inspect-internal dump-super $SCRATCH_DEV |\
+                         grep "cache_generation" | $AWK_PROG '{ print $2 }' )
+       if [ "$cache_gen" -eq 0 -o $(( $test_num + 1 )) -eq 0 ]; then
+               _notrun "v1 space cache is not supported"
+       fi
+}
+
 # Require certain sectorsize support
 _require_btrfs_support_sectorsize()
 {
index b4756a5fb2a27018dfe5ff1f000ddb4260304b94..026d11e6eb0aeba1ab7ca836181177c36e464504 100755 (executable)
@@ -14,14 +14,9 @@ _begin_fstest auto quick
 _require_scratch
 _require_btrfs_command inspect-internal dump-super
 _require_btrfs_fs_feature free_space_tree
-# Zoned btrfs does not support space_cache(v1)
-_require_non_zoned_device "${SCRATCH_DEV}"
-# Block group tree does not support space_cache(v1)
-_require_btrfs_no_block_group_tree
+_require_btrfs_v1_cache
 
 _scratch_mkfs >/dev/null 2>&1
-[ "$(_get_page_size)" -gt "$(_scratch_btrfs_sectorsize)" ] && \
-       _notrun "cannot run with subpage sectorsize"
 
 mkfs_v1()
 {