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>
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()
{
_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()
{