* [PATCH v3 2/3] fstests: btrfs: add checks for zoned block device
2021-08-16 11:35 [PATCH v3 0/3] fstests: add checks for testing zoned btrfs Naohiro Aota
2021-08-16 11:35 ` [PATCH v3 1/3] common: add zoned block device checks Naohiro Aota
@ 2021-08-16 11:35 ` Naohiro Aota
2021-08-16 11:35 ` [PATCH v3 3/3] fstests: generic: " Naohiro Aota
2 siblings, 0 replies; 7+ messages in thread
From: Naohiro Aota @ 2021-08-16 11:35 UTC (permalink / raw)
To: fstests; +Cc: linux-btrfs, Naohiro Aota
Modify btrfs tests to require non-zoned block device or limit some part of
tests not to be run on zone block devices.
Modified tests by the reasons:
* Mixed BG
- btrfs/011
* Non-single profile
- btrfs/003
- btrfs/011
- btrfs/023
- btrfs/124
- btrfs/195
- btrfs/197
- btrfs/198
- and these are restricted indirectly by "_require_btrfs_fs_feature raid56"
- btrfs/125
- btrfs/148
- btrfs/157
- btrfs/158
* Convert from ext4
- btrfs/012
- btrfs/136
* nodatacow
- btrfs/236
* inode cache
- btrfs/049
* space cache (v1)
- btrfs/131
* write outside of FS code
- btrfs/116
- btrfs/140
- btrfs/215
* verbose output
- btrfs/194
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
common/btrfs | 26 ++++++++++++++++++++++++++
tests/btrfs/003 | 16 ++++++++++++----
tests/btrfs/011 | 21 ++++++++++++---------
tests/btrfs/012 | 2 ++
tests/btrfs/023 | 2 ++
tests/btrfs/049 | 2 ++
tests/btrfs/116 | 2 ++
tests/btrfs/124 | 4 ++++
tests/btrfs/131 | 2 ++
tests/btrfs/136 | 2 ++
tests/btrfs/140 | 2 ++
tests/btrfs/194 | 2 +-
tests/btrfs/195 | 2 ++
tests/btrfs/197 | 2 ++
tests/btrfs/198 | 2 ++
tests/btrfs/215 | 2 ++
tests/btrfs/236 | 33 ++++++++++++++++++++-------------
17 files changed, 97 insertions(+), 27 deletions(-)
diff --git a/common/btrfs b/common/btrfs
index ebe6ce269a6b..ac880bddf524 100644
--- a/common/btrfs
+++ b/common/btrfs
@@ -96,6 +96,11 @@ _require_btrfs_fs_feature()
modprobe btrfs > /dev/null 2>&1
[ -e /sys/fs/btrfs/features/$feat ] || \
_notrun "Feature $feat not supported by the available btrfs version"
+
+ if [ $feat = "raid56" ]; then
+ # Zoned btrfs only supports SINGLE profile
+ _require_non_zoned_device "${SCRATCH_DEV}"
+ fi
}
_require_btrfs_fs_sysfs()
@@ -222,6 +227,21 @@ _btrfs_get_profile_configs()
else
local unsupported=()
fi
+
+ if _scratch_btrfs_is_zoned; then
+ # Zoned btrfs only supports SINGLE profile
+ unsupported+=(
+ "dup"
+ "raid0"
+ "raid1"
+ "raid1c3"
+ "raid1c4"
+ "raid10"
+ "raid5"
+ "raid6"
+ )
+ fi
+
for unsupp in "${unsupported[@]}"; do
if [ "${profiles[0]}" == "$unsupp" -o "${profiles[1]}" == "$unsupp" ]; then
if [ -z "$BTRFS_PROFILE_CONFIGS" ]; then
@@ -419,3 +439,9 @@ _btrfs_rescan_devices()
{
$BTRFS_UTIL_PROG device scan &> /dev/null
}
+
+_scratch_btrfs_is_zoned()
+{
+ [ `_zone_type ${SCRATCH_DEV}` != "none" ] && return 0
+ return 1
+}
diff --git a/tests/btrfs/003 b/tests/btrfs/003
index d241ec6e9fdd..0aa4c99176b5 100755
--- a/tests/btrfs/003
+++ b/tests/btrfs/003
@@ -173,12 +173,20 @@ _test_remove()
_scratch_unmount
}
-_test_raid0
-_test_raid1
-_test_raid10
+# Zoned btrfs only supports SINGLE profile
+if ! _scratch_btrfs_is_zoned; then
+ _test_raid0
+ _test_raid1
+ _test_raid10
+fi
+
_test_single
_test_add
-_test_replace
+# _test_replace() uses raid1, but zoned btrfs only supports SINGLE
+# profile
+if ! _scratch_btrfs_is_zoned; then
+ _test_replace
+fi
_test_remove
echo "Silence is golden"
diff --git a/tests/btrfs/011 b/tests/btrfs/011
index f5d865ab3d21..b4673341c24b 100755
--- a/tests/btrfs/011
+++ b/tests/btrfs/011
@@ -226,15 +226,18 @@ btrfs_replace_test()
}
workout "-m single -d single" 1 no 64
-workout "-m single -d single -M" 1 no 64
-workout "-m dup -d single" 1 no 64
-workout "-m dup -d single" 1 cancel 1024
-workout "-m dup -d dup -M" 1 no 64
-workout "-m raid0 -d raid0" 2 no 64
-workout "-m raid1 -d raid1" 2 no 2048
-workout "-m raid5 -d raid5" 2 no 64
-workout "-m raid6 -d raid6" 3 no 64
-workout "-m raid10 -d raid10" 4 no 64
+# Mixed BG & RAID/DUP profiles are not supported on zoned btrfs
+if ! _scratch_btrfs_is_zoned; then
+ workout "-m dup -d single" 1 no 64
+ workout "-m dup -d single" 1 cancel 1024
+ workout "-m raid0 -d raid0" 2 no 64
+ workout "-m raid1 -d raid1" 2 no 2048
+ workout "-m raid10 -d raid10" 4 no 64
+ workout "-m single -d single -M" 1 no 64
+ workout "-m dup -d dup -M" 1 no 64
+ workout "-m raid5 -d raid5" 2 no 64
+ workout "-m raid6 -d raid6" 3 no 64
+fi
echo "*** done"
status=0
diff --git a/tests/btrfs/012 b/tests/btrfs/012
index 46341e984821..3040a655095c 100755
--- a/tests/btrfs/012
+++ b/tests/btrfs/012
@@ -28,6 +28,8 @@ _require_scratch_nocheck
_require_command "$BTRFS_CONVERT_PROG" btrfs-convert
_require_command "$MKFS_EXT4_PROG" mkfs.ext4
_require_command "$E2FSCK_PROG" e2fsck
+# ext4 does not support zoned block device
+_require_non_zoned_device "${SCRATCH_DEV}"
_require_fs_space $SCRATCH_MNT $(du -s /lib/modules/`uname -r` | ${AWK_PROG} '{print $1}')
diff --git a/tests/btrfs/023 b/tests/btrfs/023
index f6c05b121099..9facf3e2092c 100755
--- a/tests/btrfs/023
+++ b/tests/btrfs/023
@@ -17,6 +17,8 @@ _begin_fstest auto
# real QA test starts here
_supported_fs btrfs
_require_scratch_dev_pool 4
+# Zoned btrfs only supports SINGLE profile
+_require_non_zoned_device "${SCRATCH_DEV}"
create_group_profile()
{
diff --git a/tests/btrfs/049 b/tests/btrfs/049
index ad4ef122f3c9..87c205ca9650 100755
--- a/tests/btrfs/049
+++ b/tests/btrfs/049
@@ -27,6 +27,8 @@ _cleanup()
_supported_fs btrfs
_require_scratch
_require_dm_target flakey
+# Zoned btrfs does not support inode cache
+_require_non_zoned_device "$SCRATCH_DEV"
_scratch_mkfs >> $seqres.full 2>&1
diff --git a/tests/btrfs/116 b/tests/btrfs/116
index 14182e9c0f49..2449e6e3a64d 100755
--- a/tests/btrfs/116
+++ b/tests/btrfs/116
@@ -18,6 +18,8 @@ _begin_fstest auto quick metadata
# real QA test starts here
_supported_fs btrfs
_require_scratch
+# Writing non-contiguous data directly to the device
+_require_non_zoned_device $SCRATCH_DEV
_scratch_mkfs >>$seqres.full 2>&1
diff --git a/tests/btrfs/124 b/tests/btrfs/124
index 3036cbf4a72c..5c05ffae1b8f 100755
--- a/tests/btrfs/124
+++ b/tests/btrfs/124
@@ -49,6 +49,10 @@ _scratch_dev_pool_get 2
dev1=`echo $SCRATCH_DEV_POOL | awk '{print $1}'`
dev2=`echo $SCRATCH_DEV_POOL | awk '{print $2}'`
+# RAID1 is not supported on zoned btrfs
+_require_non_zoned_device "$dev1"
+_require_non_zoned_device "$dev2"
+
dev1_sz=`blockdev --getsize64 $dev1`
dev2_sz=`blockdev --getsize64 $dev2`
# get min of both
diff --git a/tests/btrfs/131 b/tests/btrfs/131
index 81e5d9bc90c7..1e072b285ecf 100755
--- a/tests/btrfs/131
+++ b/tests/btrfs/131
@@ -18,6 +18,8 @@ _supported_fs btrfs
_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}"
mkfs_v1()
{
diff --git a/tests/btrfs/136 b/tests/btrfs/136
index 896be18d84f8..b9ab8270f039 100755
--- a/tests/btrfs/136
+++ b/tests/btrfs/136
@@ -22,6 +22,8 @@ _begin_fstest auto convert
# Modify as appropriate.
_supported_fs btrfs
_require_scratch_nocheck
+# ext4 does not support zoned block device
+_require_non_zoned_device "${SCRATCH_DEV}"
_require_command "$BTRFS_CONVERT_PROG" btrfs-convert
_require_command "$MKFS_EXT4_PROG" mkfs.ext4
diff --git a/tests/btrfs/140 b/tests/btrfs/140
index f3379cae75de..5a5f828ce0de 100755
--- a/tests/btrfs/140
+++ b/tests/btrfs/140
@@ -26,6 +26,8 @@ _require_scratch_dev_pool 2
_require_btrfs_command inspect-internal dump-tree
_require_command "$FILEFRAG_PROG" filefrag
_require_odirect
+# Overwriting data is forbidden on a zoned block device
+_require_non_zoned_device "${SCRATCH_DEV}"
get_physical()
{
diff --git a/tests/btrfs/194 b/tests/btrfs/194
index 9a67e572ef74..a994a429628b 100755
--- a/tests/btrfs/194
+++ b/tests/btrfs/194
@@ -59,7 +59,7 @@ for (( i = 0; i < 64; i++ )); do
$BTRFS_UTIL_PROG device del $device_1 $SCRATCH_MNT
$BTRFS_UTIL_PROG device add -f $device_1 $SCRATCH_MNT
$BTRFS_UTIL_PROG device del $device_2 $SCRATCH_MNT
-done
+done | grep -v 'Resetting device zone'
_scratch_dev_pool_put
echo "Silence is golden"
diff --git a/tests/btrfs/195 b/tests/btrfs/195
index 59b979704491..747345973244 100755
--- a/tests/btrfs/195
+++ b/tests/btrfs/195
@@ -18,6 +18,8 @@ _begin_fstest auto volume balance
# Modify as appropriate.
_supported_fs btrfs
_require_scratch_dev_pool 4
+# Zoned btrfs only supports SINGLE profile
+_require_non_zoned_device "${SCRATCH_DEV}"
declare -a TEST_VECTORS=(
# $nr_dev_min:$data:$metadata:$data_convert:$metadata_convert
diff --git a/tests/btrfs/197 b/tests/btrfs/197
index f5baf5b6066b..597bc36f0fd7 100755
--- a/tests/btrfs/197
+++ b/tests/btrfs/197
@@ -30,6 +30,8 @@ _supported_fs btrfs
_require_test
_require_scratch
_require_scratch_dev_pool 5
+# Zoned btrfs only supports SINGLE profile
+_require_non_zoned_device ${SCRATCH_DEV}
workout()
{
diff --git a/tests/btrfs/198 b/tests/btrfs/198
index b3e175a25bf9..035c63fdb5ec 100755
--- a/tests/btrfs/198
+++ b/tests/btrfs/198
@@ -20,6 +20,8 @@ _supported_fs btrfs
_require_command "$WIPEFS_PROG" wipefs
_require_scratch
_require_scratch_dev_pool 4
+# Zoned btrfs only supports SINGLE profile
+_require_non_zoned_device ${SCRATCH_DEV}
workout()
{
diff --git a/tests/btrfs/215 b/tests/btrfs/215
index b45bd520b8e6..fa622568adfd 100755
--- a/tests/btrfs/215
+++ b/tests/btrfs/215
@@ -24,6 +24,8 @@ get_physical()
# Modify as appropriate.
_supported_fs btrfs
+# Overwriting data is forbidden on a zoned block device
+_require_non_zoned_device $SCRATCH_DEV
_scratch_mkfs > /dev/null
# disable freespace inode to ensure file is the first thing in the data
diff --git a/tests/btrfs/236 b/tests/btrfs/236
index a16a1ce62d3a..8481d8f380d2 100755
--- a/tests/btrfs/236
+++ b/tests/btrfs/236
@@ -173,21 +173,28 @@ for ((i = 1; i <= 3; i++)); do
test_fsync "link_cow_$i" "link"
done
-# Now lets test with nodatacow.
_unmount_flakey
-MOUNT_OPTIONS="-o nodatacow"
-_mount_flakey
-echo "Testing fsync after rename with NOCOW writes"
-for ((i = 1; i <= 3; i++)); do
- test_fsync "rename_nocow_$i" "rename"
-done
-echo "Testing fsync after link with NOCOW writes"
-for ((i = 1; i <= 3; i++)); do
- test_fsync "link_nocow_$i" "link"
-done
-
-_unmount_flakey
+# Now lets test with nodatacow.
+if ! _scratch_btrfs_is_zoned; then
+ MOUNT_OPTIONS="-o nodatacow"
+ _mount_flakey
+
+ echo "Testing fsync after rename with NOCOW writes"
+ for ((i = 1; i <= 3; i++)); do
+ test_fsync "rename_nocow_$i" "rename"
+ done
+ echo "Testing fsync after link with NOCOW writes"
+ for ((i = 1; i <= 3; i++)); do
+ test_fsync "link_nocow_$i" "link"
+ done
+
+ _unmount_flakey
+else
+ # Fake result. Zoned btrfs does not support NOCOW
+ echo "Testing fsync after rename with NOCOW writes"
+ echo "Testing fsync after link with NOCOW writes"
+fi
status=0
exit
--
2.32.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 3/3] fstests: generic: add checks for zoned block device
2021-08-16 11:35 [PATCH v3 0/3] fstests: add checks for testing zoned btrfs Naohiro Aota
2021-08-16 11:35 ` [PATCH v3 1/3] common: add zoned block device checks Naohiro Aota
2021-08-16 11:35 ` [PATCH v3 2/3] fstests: btrfs: add checks for zoned block device Naohiro Aota
@ 2021-08-16 11:35 ` Naohiro Aota
2021-08-18 0:01 ` Darrick J. Wong
2 siblings, 1 reply; 7+ messages in thread
From: Naohiro Aota @ 2021-08-16 11:35 UTC (permalink / raw)
To: fstests; +Cc: linux-btrfs, Naohiro Aota
Modify generic tests to require non-zoned block device
generic/108 is disabled on zoned block device because the LVM device not
always aligned to the zone boundary.
generic/471 is disabled because we cannot enable NoCoW on zoned btrfs.
generic/570 is disabled because swap file which require nocow is not usable
on zoned btrfs.
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
tests/generic/108 | 2 ++
tests/generic/471 | 2 ++
tests/generic/570 | 2 ++
3 files changed, 6 insertions(+)
diff --git a/tests/generic/108 b/tests/generic/108
index b7797e8fac2b..6e1ea5b9d20a 100755
--- a/tests/generic/108
+++ b/tests/generic/108
@@ -36,6 +36,8 @@ _require_scratch_nocheck
_require_block_device $SCRATCH_DEV
_require_scsi_debug
_require_command "$LVM_PROG" lvm
+# We cannot ensure the Logical Volume is aligned to the zone boundary
+_require_non_zoned_device $SCRATCH_DEV
lvname=lv_$seq
vgname=vg_$seq
diff --git a/tests/generic/471 b/tests/generic/471
index dab06f3a315c..fbd0b12a9e3a 100755
--- a/tests/generic/471
+++ b/tests/generic/471
@@ -37,6 +37,8 @@ mkdir $testdir
# all filesystems, use a NOCOW file on btrfs.
if [ $FSTYP == "btrfs" ]; then
_require_chattr C
+ # Zoned btrfs does not support NOCOW
+ _require_non_zoned_device $TEST_DEV
touch $testdir/f1
$CHATTR_PROG +C $testdir/f1
fi
diff --git a/tests/generic/570 b/tests/generic/570
index 7d03acfe3c44..126b222d10d2 100755
--- a/tests/generic/570
+++ b/tests/generic/570
@@ -25,6 +25,8 @@ _supported_fs generic
_require_test_program swapon
_require_scratch_nocheck
_require_block_device $SCRATCH_DEV
+# We cannot create swap on a zoned device because it can cause random write IOs
+_require_non_zoned_device "$SCRATCH_DEV"
test -e /dev/snapshot && _notrun "userspace hibernation to swap is enabled"
$MKSWAP_PROG "$SCRATCH_DEV" >> $seqres.full
--
2.32.0
^ permalink raw reply related [flat|nested] 7+ messages in thread