All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/8] fstests: add checks for testing zoned btrfs
@ 2021-08-11 15:12 Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 1/8] common/rc: introduce minimal fs size check Naohiro Aota
                   ` (9 more replies)
  0 siblings, 10 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

This series revisit my old series to test zoned btrfs [1].

[1] https://lore.kernel.org/fstests/PH0PR04MB7416870032582BC2A8FC5AD99B299@PH0PR04MB7416.namprd04.prod.outlook.com/T/

Several tests are failing on zoned btrfs, but actually they are invalid.
There are two reasons of the failures. One is creating too small
filesystem. Since zoned btrfs needs at lease 5 zones (= 1.25 GB if zone
size = 256MB) to create a filesystem, tests creating e.g., 1 GB filesystem
will fail.

The other reason is lacking of zone support of some dm targets and loop
device. So, they need to skip the test if the testing device is zoned.

Patches 1 to 4 handle the too small file system failure.

And, patches 5 to 8 add checks for tests requiring non-zoned devices.

Naohiro Aota (8):
  common/rc: introduce minimal fs size check
  common/rc: fix blocksize detection for btrfs
  btrfs/057: use _scratch_mkfs_sized to set filesystem size
  fstests: btrfs: add minimal file system size check
  common: add zoned block device checks
  shared/032: add check for zoned block device
  fstests: btrfs: add checks for zoned block device
  fstests: generic: add checks for zoned block device

 README            |  4 ++++
 common/btrfs      | 18 ++++++++++++++++++
 common/dmerror    |  3 +++
 common/dmhugedisk |  3 +++
 common/rc         | 24 +++++++++++++++++++++++-
 tests/btrfs/003   | 13 +++++++++----
 tests/btrfs/011   | 21 ++++++++++++---------
 tests/btrfs/012   |  2 ++
 tests/btrfs/023   |  2 ++
 tests/btrfs/049   |  2 ++
 tests/btrfs/057   |  2 +-
 tests/btrfs/116   |  2 ++
 tests/btrfs/124   |  4 ++++
 tests/btrfs/125   |  2 ++
 tests/btrfs/131   |  2 ++
 tests/btrfs/136   |  2 ++
 tests/btrfs/140   |  2 ++
 tests/btrfs/141   |  1 +
 tests/btrfs/142   |  1 +
 tests/btrfs/143   |  1 +
 tests/btrfs/148   |  2 ++
 tests/btrfs/150   |  1 +
 tests/btrfs/151   |  1 +
 tests/btrfs/156   |  1 +
 tests/btrfs/157   |  3 +++
 tests/btrfs/158   |  3 +++
 tests/btrfs/175   |  1 +
 tests/btrfs/194   |  2 +-
 tests/btrfs/195   |  8 ++++++++
 tests/btrfs/197   |  1 +
 tests/btrfs/198   |  1 +
 tests/btrfs/215   |  1 +
 tests/btrfs/236   | 33 ++++++++++++++++++++-------------
 tests/generic/108 |  1 +
 tests/generic/471 |  1 +
 tests/generic/570 |  1 +
 tests/shared/032  |  2 ++
 37 files changed, 145 insertions(+), 29 deletions(-)

-- 
2.32.0


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 1/8] common/rc: introduce minimal fs size check
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 2/8] common/rc: fix blocksize detection for btrfs Naohiro Aota
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

_scratch_mkfs_sized() create a file system with specified size
limit. It can, however, too small for certain kind of devices. For
example, zoned btrfs requires at least 5 zones to make a file system.

This commit introduces MIN_FSSIZE, which specify the minimum size of the
possible file system. We can set this variable e.g. $ZONE_SIZE *
$MIN_ZONE_COUNT.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 README    |  4 ++++
 common/rc | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/README b/README
index 18f7a6bc3ff0..b9877b7d8b1b 100644
--- a/README
+++ b/README
@@ -117,6 +117,10 @@ Preparing system for tests:
                name of a file to compress; and it must accept '-d -f -k' and
                the name of a file to decompress.  In other words, it must
                emulate gzip.
+	     - Set MIN_FSSIZE to specify the minimal size (bytes) of a
+               filesystem we can create. Setting this parameter will
+               skip the tests creating a filesystem less than
+               MIN_FSSIZE.
 
         - or add a case to the switch in common/config assigning
           these variables based on the hostname of your test
diff --git a/common/rc b/common/rc
index e04d9365d902..4cb062e2fd3f 100644
--- a/common/rc
+++ b/common/rc
@@ -956,6 +956,16 @@ _available_memory_bytes()
 	fi
 }
 
+_check_minimal_fs_size()
+{
+	local fssize=$1
+
+	if [ -n "$MIN_FSSIZE" ]; then
+		[ $MIN_FSSIZE -gt "$fssize" ] &&
+			_notrun "specified filesystem size is too small"
+	fi
+}
+
 # Create fs of certain size on scratch device
 # _scratch_mkfs_sized <size in bytes> [optional blocksize]
 _scratch_mkfs_sized()
@@ -989,6 +999,8 @@ _scratch_mkfs_sized()
 
 	local blocks=`expr $fssize / $blocksize`
 
+	_check_minimal_fs_size $fssize
+
 	if [ -b "$SCRATCH_DEV" ]; then
 		local devsize=`blockdev --getsize64 $SCRATCH_DEV`
 		[ "$fssize" -gt "$devsize" ] && _notrun "Scratch device too small"
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 2/8] common/rc: fix blocksize detection for btrfs
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 1/8] common/rc: introduce minimal fs size check Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 3/8] btrfs/057: use _scratch_mkfs_sized to set filesystem size Naohiro Aota
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

Mkfs.btrfs's "-b" does not specify the block size but the file system size.
Use "-s" to detect it instead.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 common/rc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/common/rc b/common/rc
index 4cb062e2fd3f..7b80820ff680 100644
--- a/common/rc
+++ b/common/rc
@@ -978,7 +978,10 @@ _scratch_mkfs_sized()
 	xfs)
 		def_blksz=`echo $MKFS_OPTIONS | sed -rn 's/.*-b ?size= ?+([0-9]+).*/\1/p'`
 		;;
-	ext2|ext3|ext4|ext4dev|udf|btrfs|reiser4|ocfs2|reiserfs)
+	btrfs)
+		def_blksz=`echo $MKFS_OPTIONS | sed -rn 's/.*-s ?+([0-9]+).*/\1/p'`
+		;;
+	ext2|ext3|ext4|ext4dev|udf|reiser4|ocfs2|reiserfs)
 		def_blksz=`echo $MKFS_OPTIONS | sed -rn 's/.*-b ?+([0-9]+).*/\1/p'`
 		;;
 	jfs)
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 3/8] btrfs/057: use _scratch_mkfs_sized to set filesystem size
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 1/8] common/rc: introduce minimal fs size check Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 2/8] common/rc: fix blocksize detection for btrfs Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 4/8] fstests: btrfs: add minimal file system size check Naohiro Aota
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

Btrfs/057 is using _scratch_mkfs directly to set filesystem size. This
can be _scratch_mkfs_sized instead, to go through several
checks (e.g., minimal filesystem size check).

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 tests/btrfs/057 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/btrfs/057 b/tests/btrfs/057
index 074ac96abcda..782d854a057f 100755
--- a/tests/btrfs/057
+++ b/tests/btrfs/057
@@ -16,7 +16,7 @@ _begin_fstest auto quick
 _supported_fs btrfs
 _require_scratch
 
-run_check _scratch_mkfs "-b 1g"
+_scratch_mkfs_sized $((1024 * 1024 * 1024)) >> $seqres.full 2>&1
 
 _scratch_mount
 
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 4/8] fstests: btrfs: add minimal file system size check
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
                   ` (2 preceding siblings ...)
  2021-08-11 15:12 ` [PATCH v2 3/8] btrfs/057: use _scratch_mkfs_sized to set filesystem size Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 5/8] common: add zoned block device checks Naohiro Aota
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

Some btrfs tests call _scratch_pool_mkfs or _scratch_mkfs by themselves to
specify file system size limit. It slips through the check in
_scratch_mkfs_sized(). Let's add size check call for each of them.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 tests/btrfs/141 | 1 +
 tests/btrfs/142 | 1 +
 tests/btrfs/143 | 1 +
 tests/btrfs/150 | 1 +
 tests/btrfs/151 | 1 +
 tests/btrfs/156 | 1 +
 tests/btrfs/157 | 1 +
 tests/btrfs/158 | 1 +
 tests/btrfs/175 | 1 +
 9 files changed, 9 insertions(+)

diff --git a/tests/btrfs/141 b/tests/btrfs/141
index 6f9a177a4487..cf0979e9b42a 100755
--- a/tests/btrfs/141
+++ b/tests/btrfs/141
@@ -55,6 +55,7 @@ _scratch_dev_pool_get 2
 # step 1, create a raid1 btrfs which contains one 128k file.
 echo "step 1......mkfs.btrfs" >>$seqres.full
 
+_check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid1 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
diff --git a/tests/btrfs/142 b/tests/btrfs/142
index 3caa37d167ab..1318be0fba18 100755
--- a/tests/btrfs/142
+++ b/tests/btrfs/142
@@ -33,6 +33,7 @@ _scratch_dev_pool_get 2
 # step 1, create a raid1 btrfs which contains one 128k file.
 echo "step 1......mkfs.btrfs" >>$seqres.full
 
+_check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid1 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
diff --git a/tests/btrfs/143 b/tests/btrfs/143
index f062f77bd7ce..6736dcad1702 100755
--- a/tests/btrfs/143
+++ b/tests/btrfs/143
@@ -40,6 +40,7 @@ _scratch_dev_pool_get 2
 # step 1, create a raid1 btrfs which contains one 128k file.
 echo "step 1......mkfs.btrfs" >>$seqres.full
 
+_check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid1 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
diff --git a/tests/btrfs/150 b/tests/btrfs/150
index 56938b0f4500..986c80697f15 100755
--- a/tests/btrfs/150
+++ b/tests/btrfs/150
@@ -43,6 +43,7 @@ disable_io_failure()
 	echo 0 > $SYSFS_BDEV/make-it-fail
 }
 
+_check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 _scratch_pool_mkfs "-d raid1 -b 1G" >> $seqres.full 2>&1
 
 # It doesn't matter which compression algorithm we use.
diff --git a/tests/btrfs/151 b/tests/btrfs/151
index 3150fef07e19..099e85cc7b2e 100755
--- a/tests/btrfs/151
+++ b/tests/btrfs/151
@@ -23,6 +23,7 @@ _supported_fs btrfs
 _require_scratch
 _require_scratch_dev_pool 3
 _require_btrfs_dev_del_by_devid
+_check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 
 # We need exactly 3 disks to form a fixed stripe layout for this test.
 _scratch_dev_pool_get 3
diff --git a/tests/btrfs/156 b/tests/btrfs/156
index 364135ab3e65..11bf4638c7d1 100755
--- a/tests/btrfs/156
+++ b/tests/btrfs/156
@@ -37,6 +37,7 @@ nr_files=$(( $fs_size / $file_size / 2))
 # Force to use single data and meta profile.
 # Since the test relies on fstrim output, which will differ for different
 # profiles
+_check_minimal_fs_size $fs_size
 _scratch_mkfs -b $fs_size -m single -d single > /dev/null
 _scratch_mount
 
diff --git a/tests/btrfs/157 b/tests/btrfs/157
index c08cebdc9c22..0cfe3ce56548 100755
--- a/tests/btrfs/157
+++ b/tests/btrfs/157
@@ -60,6 +60,7 @@ _scratch_dev_pool_get 4
 # step 1: create a raid6 btrfs and create a 128K file
 echo "step 1......mkfs.btrfs" >>$seqres.full
 
+_check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid6 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
diff --git a/tests/btrfs/158 b/tests/btrfs/158
index 4a642f52c05e..ad374eba8c7e 100755
--- a/tests/btrfs/158
+++ b/tests/btrfs/158
@@ -52,6 +52,7 @@ _scratch_dev_pool_get 4
 # step 1: create a raid6 btrfs and create a 128K file
 echo "step 1......mkfs.btrfs" >>$seqres.full
 
+_check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
 mkfs_opts="-d raid6 -b 1G"
 _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
 
diff --git a/tests/btrfs/175 b/tests/btrfs/175
index 8a9c0721f5ed..bf0ede257f87 100755
--- a/tests/btrfs/175
+++ b/tests/btrfs/175
@@ -14,6 +14,7 @@ _begin_fstest auto quick swap volume
 _supported_fs btrfs
 _require_scratch_dev_pool 2
 _require_scratch_swapfile
+_check_minimal_fs_size $((1024 * 1024 * 1024))
 
 cycle_swapfile() {
 	local sz=${1:-$(($(get_page_size) * 10))}
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 5/8] common: add zoned block device checks
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
                   ` (3 preceding siblings ...)
  2021-08-11 15:12 ` [PATCH v2 4/8] fstests: btrfs: add minimal file system size check Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-15 14:42   ` Eryu Guan
  2021-08-11 15:12 ` [PATCH v2 6/8] shared/032: add check for zoned block device Naohiro Aota
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

dm-error and dm-snapshot does not have DM_TARGET_ZONED_HM nor
DM_TARGET_MIXED_ZONED_MODEL feature and does not implement
.report_zones(). So, it cannot pass the zone information from the down
layer (zoned device) to the upper layer.

Loop device also cannot pass the zone information.

This patch requires non-zoned block device for the tests using these
ones.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 common/dmerror    | 3 +++
 common/dmhugedisk | 3 +++
 common/rc         | 7 +++++++
 3 files changed, 13 insertions(+)

diff --git a/common/dmerror b/common/dmerror
index 01a4c8b5e52d..64ee78d85b95 100644
--- a/common/dmerror
+++ b/common/dmerror
@@ -15,6 +15,9 @@ _dmerror_setup()
 	export DMLINEAR_TABLE="0 $blk_dev_size linear $dm_backing_dev 0"
 
 	export DMERROR_TABLE="0 $blk_dev_size error $dm_backing_dev 0"
+
+	# dm-error cannot handle zone information
+	_require_non_zoned_device "${dm_backing_dev}"
 }
 
 _dmerror_init()
diff --git a/common/dmhugedisk b/common/dmhugedisk
index 502f0243772d..715f95efde29 100644
--- a/common/dmhugedisk
+++ b/common/dmhugedisk
@@ -16,6 +16,9 @@ _dmhugedisk_init()
 	local dm_backing_dev=$SCRATCH_DEV
 	local chunk_size="$2"
 
+	# We cannot ensure sequential writes on the backing device
+	_require_non_zoned_device $dm_backing_dev
+
 	if [ -z "$chunk_size" ]; then
 		chunk_size=512
 	fi
diff --git a/common/rc b/common/rc
index 7b80820ff680..03b7e0310a84 100644
--- a/common/rc
+++ b/common/rc
@@ -1837,6 +1837,9 @@ _require_loop()
     else
 	_notrun "This test requires loopback device support"
     fi
+
+    # loop device does not handle zone information
+    _require_non_zoned_device ${TEST_DEV}
 }
 
 # this test requires kernel support for a secondary filesystem
@@ -1966,6 +1969,10 @@ _require_dm_target()
 	if [ $? -ne 0 ]; then
 		_notrun "This test requires dm $target support"
 	fi
+
+	if [ $target = thin-pool ]; then
+		_require_non_zoned_device ${SCRATCH_DEV}
+	fi
 }
 
 _zone_type()
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 6/8] shared/032: add check for zoned block device
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
                   ` (4 preceding siblings ...)
  2021-08-11 15:12 ` [PATCH v2 5/8] common: add zoned block device checks Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-11 15:12 ` [PATCH v2 7/8] fstests: btrfs: add checks " Naohiro Aota
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

Mkfs on zoned block device won't work on most filesystem. Let's
disable the test.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 tests/shared/032 | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tests/shared/032 b/tests/shared/032
index a84af3a603d8..131323ab5b0f 100755
--- a/tests/shared/032
+++ b/tests/shared/032
@@ -17,6 +17,8 @@ _supported_fs xfs btrfs
 
 _require_scratch_nocheck
 _require_no_large_scratch_dev
+# not all the FS support zoned block device
+_require_non_zoned_device "${SCRATCH_DEV}"
 
 # mkfs.btrfs did not have overwrite detection at first
 if [ "$FSTYP" == "btrfs" ]; then
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 7/8] fstests: btrfs: add checks for zoned block device
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
                   ` (5 preceding siblings ...)
  2021-08-11 15:12 ` [PATCH v2 6/8] shared/032: add check for zoned block device Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-15 15:12   ` Eryu Guan
  2021-08-11 15:12 ` [PATCH v2 8/8] fstests: generic: " Naohiro Aota
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 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/125
  - btrfs/148
  - btrfs/157
  - btrfs/158
  - btrfs/195
  - btrfs/197
  - btrfs/198
* 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    | 18 ++++++++++++++++++
 tests/btrfs/003 | 13 +++++++++----
 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/125 |  2 ++
 tests/btrfs/131 |  2 ++
 tests/btrfs/136 |  2 ++
 tests/btrfs/140 |  2 ++
 tests/btrfs/148 |  2 ++
 tests/btrfs/157 |  2 ++
 tests/btrfs/158 |  2 ++
 tests/btrfs/194 |  2 +-
 tests/btrfs/195 |  8 ++++++++
 tests/btrfs/197 |  1 +
 tests/btrfs/198 |  1 +
 tests/btrfs/215 |  1 +
 tests/btrfs/236 | 33 ++++++++++++++++++++-------------
 21 files changed, 97 insertions(+), 27 deletions(-)

diff --git a/common/btrfs b/common/btrfs
index ebe6ce269a6b..fb1a65842012 100644
--- a/common/btrfs
+++ b/common/btrfs
@@ -222,6 +222,18 @@ _btrfs_get_profile_configs()
 		else
 			local unsupported=()
 		fi
+
+		if [ `_zone_type $TEST_DEV` != "none" ]; then
+			unsupported+=(
+				"dup"
+				"raid0"
+				"raid1"
+				"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 +431,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..af0dc8a7e105 100755
--- a/tests/btrfs/003
+++ b/tests/btrfs/003
@@ -173,12 +173,17 @@ _test_remove()
 	_scratch_unmount
 }
 
-_test_raid0
-_test_raid1
-_test_raid10
+if ! _scratch_btrfs_is_zoned; then
+	_test_raid0
+	_test_raid1
+	_test_raid10
+fi
+
 _test_single
 _test_add
-_test_replace
+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..49ca95bc9efb 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
+# RAID profiles are not supported on zoned btrfs
+_require_non_zoned_device "${SCRATCH_DEV}"
 
 create_group_profile()
 {
diff --git a/tests/btrfs/049 b/tests/btrfs/049
index ad4ef122f3c9..a9cd5b2cf12b 100755
--- a/tests/btrfs/049
+++ b/tests/btrfs/049
@@ -27,6 +27,8 @@ _cleanup()
 _supported_fs btrfs
 _require_scratch
 _require_dm_target flakey
+# inode cache is not supported on zoned btrfs
+_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/125 b/tests/btrfs/125
index e46b194d0139..de6651739f49 100755
--- a/tests/btrfs/125
+++ b/tests/btrfs/125
@@ -43,6 +43,8 @@ _require_scratch_dev_pool 3
 _test_unmount
 _require_btrfs_forget_or_module_loadable
 _require_btrfs_fs_feature raid56
+# raid56 is not supported on zoned btrfs
+_require_non_zoned_device "${SCRATCH_DEV}"
 
 _scratch_dev_pool_get 3
 
diff --git a/tests/btrfs/131 b/tests/btrfs/131
index 81e5d9bc90c7..f97e8f30666a 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
+# space_cache(v1) is not supported on HMZONED
+_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..a1a465cc8e5d 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
+# it overwrites data, which is forbidden on zoned block device
+_require_non_zoned_device "${SCRATCH_DEV}"
 
 get_physical()
 {
diff --git a/tests/btrfs/148 b/tests/btrfs/148
index 510e46dc0826..eb86df862d9b 100755
--- a/tests/btrfs/148
+++ b/tests/btrfs/148
@@ -18,6 +18,8 @@ _require_scratch
 _require_scratch_dev_pool 4
 _require_odirect
 _require_btrfs_fs_feature raid56
+# raid56 is not supported on zoned btrfs
+_require_non_zoned_device "${SCRATCH_DEV}"
 
 _scratch_dev_pool_get 4
 
diff --git a/tests/btrfs/157 b/tests/btrfs/157
index 0cfe3ce56548..d06acead25a1 100755
--- a/tests/btrfs/157
+++ b/tests/btrfs/157
@@ -33,6 +33,8 @@ _supported_fs btrfs
 _require_scratch_dev_pool 4
 _require_btrfs_command inspect-internal dump-tree
 _require_btrfs_fs_feature raid56
+# raid56 is not supported on zoned btrfs
+_require_non_zoned_device "${SCRATCH_DEV}"
 
 get_physical()
 {
diff --git a/tests/btrfs/158 b/tests/btrfs/158
index ad374eba8c7e..dbe1036ae320 100755
--- a/tests/btrfs/158
+++ b/tests/btrfs/158
@@ -25,6 +25,8 @@ _supported_fs btrfs
 _require_scratch_dev_pool 4
 _require_btrfs_command inspect-internal dump-tree
 _require_btrfs_fs_feature raid56
+# raid56 is not supported on zoned btrfs
+_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..303f18b43281 100755
--- a/tests/btrfs/195
+++ b/tests/btrfs/195
@@ -36,6 +36,14 @@ run_testcase() {
 	src_type=${args[1]}
 	dst_type=${args[2]}
 
+	if [ `_zone_type ${SCRATCH_DEV}` != "none" -a \
+		\( ${src_type} = "raid5" -o \
+		   ${src_type} = "raid6" -o \
+		   ${dst_type} = "raid5" -o \
+		   ${dst_type} = "raid6" \) ]; then
+		return
+	fi
+
 	_scratch_dev_pool_get $num_disks
 
 	echo "=== Running test: $1 ===" >> $seqres.full
diff --git a/tests/btrfs/197 b/tests/btrfs/197
index f5baf5b6066b..5f38df401dea 100755
--- a/tests/btrfs/197
+++ b/tests/btrfs/197
@@ -30,6 +30,7 @@ _supported_fs btrfs
 _require_test
 _require_scratch
 _require_scratch_dev_pool 5
+_require_non_zoned_device ${SCRATCH_DEV}
 
 workout()
 {
diff --git a/tests/btrfs/198 b/tests/btrfs/198
index b3e175a25bf9..007445cb5cb4 100755
--- a/tests/btrfs/198
+++ b/tests/btrfs/198
@@ -20,6 +20,7 @@ _supported_fs btrfs
 _require_command "$WIPEFS_PROG" wipefs
 _require_scratch
 _require_scratch_dev_pool 4
+_require_non_zoned_device ${SCRATCH_DEV}
 
 workout()
 {
diff --git a/tests/btrfs/215 b/tests/btrfs/215
index b45bd520b8e6..4a2933df6cdf 100755
--- a/tests/btrfs/215
+++ b/tests/btrfs/215
@@ -24,6 +24,7 @@ get_physical()
 
 # Modify as appropriate.
 _supported_fs btrfs
+_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] 17+ messages in thread

* [PATCH v2 8/8] fstests: generic: add checks for zoned block device
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
                   ` (6 preceding siblings ...)
  2021-08-11 15:12 ` [PATCH v2 7/8] fstests: btrfs: add checks " Naohiro Aota
@ 2021-08-11 15:12 ` Naohiro Aota
  2021-08-15 15:20   ` Eryu Guan
  2021-08-12 15:41 ` [PATCH v2 0/8] fstests: add checks for testing zoned btrfs David Sterba
  2021-08-15 15:21 ` Eryu Guan
  9 siblings, 1 reply; 17+ messages in thread
From: Naohiro Aota @ 2021-08-11 15:12 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 | 1 +
 tests/generic/471 | 1 +
 tests/generic/570 | 1 +
 3 files changed, 3 insertions(+)

diff --git a/tests/generic/108 b/tests/generic/108
index 7dd426c19030..b51bce9f9bce 100755
--- a/tests/generic/108
+++ b/tests/generic/108
@@ -35,6 +35,7 @@ _require_scratch_nocheck
 _require_block_device $SCRATCH_DEV
 _require_scsi_debug
 _require_command "$LVM_PROG" lvm
+_require_non_zoned_device $SCRATCH_DEV
 
 lvname=lv_$seq
 vgname=vg_$seq
diff --git a/tests/generic/471 b/tests/generic/471
index dab06f3a315c..66b7d6946a9f 100755
--- a/tests/generic/471
+++ b/tests/generic/471
@@ -37,6 +37,7 @@ mkdir $testdir
 # all filesystems, use a NOCOW file on btrfs.
 if [ $FSTYP == "btrfs" ]; then
 	_require_chattr C
+	_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..71928f0ac980 100755
--- a/tests/generic/570
+++ b/tests/generic/570
@@ -25,6 +25,7 @@ _supported_fs generic
 _require_test_program swapon
 _require_scratch_nocheck
 _require_block_device $SCRATCH_DEV
+_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] 17+ messages in thread

* Re: [PATCH v2 0/8] fstests: add checks for testing zoned btrfs
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
                   ` (7 preceding siblings ...)
  2021-08-11 15:12 ` [PATCH v2 8/8] fstests: generic: " Naohiro Aota
@ 2021-08-12 15:41 ` David Sterba
  2021-08-15 15:21 ` Eryu Guan
  9 siblings, 0 replies; 17+ messages in thread
From: David Sterba @ 2021-08-12 15:41 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: fstests, linux-btrfs

On Thu, Aug 12, 2021 at 12:12:24AM +0900, Naohiro Aota wrote:
> This series revisit my old series to test zoned btrfs [1].
> 
> [1] https://lore.kernel.org/fstests/PH0PR04MB7416870032582BC2A8FC5AD99B299@PH0PR04MB7416.namprd04.prod.outlook.com/T/
> 
> Several tests are failing on zoned btrfs, but actually they are invalid.
> There are two reasons of the failures. One is creating too small
> filesystem. Since zoned btrfs needs at lease 5 zones (= 1.25 GB if zone
> size = 256MB) to create a filesystem, tests creating e.g., 1 GB filesystem
> will fail.
> 
> The other reason is lacking of zone support of some dm targets and loop
> device. So, they need to skip the test if the testing device is zoned.
> 
> Patches 1 to 4 handle the too small file system failure.
> 
> And, patches 5 to 8 add checks for tests requiring non-zoned devices.
> 
> Naohiro Aota (8):
>   common/rc: introduce minimal fs size check
>   common/rc: fix blocksize detection for btrfs
>   btrfs/057: use _scratch_mkfs_sized to set filesystem size
>   fstests: btrfs: add minimal file system size check
>   common: add zoned block device checks
>   shared/032: add check for zoned block device
>   fstests: btrfs: add checks for zoned block device
>   fstests: generic: add checks for zoned block device

I did a light review of the patches (no actual testing), all seem to be
doing the right thing regarding the special cases zoned mode needs, and
not changing the default use case.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 5/8] common: add zoned block device checks
  2021-08-11 15:12 ` [PATCH v2 5/8] common: add zoned block device checks Naohiro Aota
@ 2021-08-15 14:42   ` Eryu Guan
  2021-08-16  6:06     ` Naohiro Aota
  0 siblings, 1 reply; 17+ messages in thread
From: Eryu Guan @ 2021-08-15 14:42 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: fstests, linux-btrfs

On Thu, Aug 12, 2021 at 12:12:29AM +0900, Naohiro Aota wrote:
> dm-error and dm-snapshot does not have DM_TARGET_ZONED_HM nor
> DM_TARGET_MIXED_ZONED_MODEL feature and does not implement
> .report_zones(). So, it cannot pass the zone information from the down
> layer (zoned device) to the upper layer.
> 
> Loop device also cannot pass the zone information.
> 
> This patch requires non-zoned block device for the tests using these
> ones.
> 
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  common/dmerror    | 3 +++
>  common/dmhugedisk | 3 +++
>  common/rc         | 7 +++++++
>  3 files changed, 13 insertions(+)
> 
> diff --git a/common/dmerror b/common/dmerror
> index 01a4c8b5e52d..64ee78d85b95 100644
> --- a/common/dmerror
> +++ b/common/dmerror
> @@ -15,6 +15,9 @@ _dmerror_setup()
>  	export DMLINEAR_TABLE="0 $blk_dev_size linear $dm_backing_dev 0"
>  
>  	export DMERROR_TABLE="0 $blk_dev_size error $dm_backing_dev 0"
> +
> +	# dm-error cannot handle zone information
> +	_require_non_zoned_device "${dm_backing_dev}"

We should really do the check in _require rules not in _setup()
functions. Please see below.

>  }
>  
>  _dmerror_init()
> diff --git a/common/dmhugedisk b/common/dmhugedisk
> index 502f0243772d..715f95efde29 100644
> --- a/common/dmhugedisk
> +++ b/common/dmhugedisk
> @@ -16,6 +16,9 @@ _dmhugedisk_init()
>  	local dm_backing_dev=$SCRATCH_DEV
>  	local chunk_size="$2"
>  
> +	# We cannot ensure sequential writes on the backing device
> +	_require_non_zoned_device $dm_backing_dev
> +
>  	if [ -z "$chunk_size" ]; then
>  		chunk_size=512
>  	fi
> diff --git a/common/rc b/common/rc
> index 7b80820ff680..03b7e0310a84 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -1837,6 +1837,9 @@ _require_loop()
>      else
>  	_notrun "This test requires loopback device support"
>      fi
> +
> +    # loop device does not handle zone information
> +    _require_non_zoned_device ${TEST_DEV}
>  }
>  
>  # this test requires kernel support for a secondary filesystem
> @@ -1966,6 +1969,10 @@ _require_dm_target()
>  	if [ $? -ne 0 ]; then
>  		_notrun "This test requires dm $target support"
>  	fi
> +
> +	if [ $target = thin-pool ]; then
> +		_require_non_zoned_device ${SCRATCH_DEV}
> +	fi

I think we could move all check here, based on $target, e.g.

	case $target in
	thin-pool|error|snapshot)
		_require_non_zoned_device ${SCRATCH_DEV}
		;;
	esac

Thanks,
Eryu

>  }
>  
>  _zone_type()
> -- 
> 2.32.0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 7/8] fstests: btrfs: add checks for zoned block device
  2021-08-11 15:12 ` [PATCH v2 7/8] fstests: btrfs: add checks " Naohiro Aota
@ 2021-08-15 15:12   ` Eryu Guan
  2021-08-16  6:10     ` Naohiro Aota
  0 siblings, 1 reply; 17+ messages in thread
From: Eryu Guan @ 2021-08-15 15:12 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: fstests, linux-btrfs

On Thu, Aug 12, 2021 at 12:12:31AM +0900, Naohiro Aota wrote:
> 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/125
>   - btrfs/148
>   - btrfs/157
>   - btrfs/158
>   - btrfs/195
>   - btrfs/197
>   - btrfs/198
> * 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    | 18 ++++++++++++++++++
>  tests/btrfs/003 | 13 +++++++++----
>  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/125 |  2 ++
>  tests/btrfs/131 |  2 ++
>  tests/btrfs/136 |  2 ++
>  tests/btrfs/140 |  2 ++
>  tests/btrfs/148 |  2 ++
>  tests/btrfs/157 |  2 ++
>  tests/btrfs/158 |  2 ++
>  tests/btrfs/194 |  2 +-
>  tests/btrfs/195 |  8 ++++++++
>  tests/btrfs/197 |  1 +
>  tests/btrfs/198 |  1 +
>  tests/btrfs/215 |  1 +
>  tests/btrfs/236 | 33 ++++++++++++++++++++-------------
>  21 files changed, 97 insertions(+), 27 deletions(-)
> 
> diff --git a/common/btrfs b/common/btrfs
> index ebe6ce269a6b..fb1a65842012 100644
> --- a/common/btrfs
> +++ b/common/btrfs
> @@ -222,6 +222,18 @@ _btrfs_get_profile_configs()
>  		else
>  			local unsupported=()
>  		fi
> +
> +		if [ `_zone_type $TEST_DEV` != "none" ]; then

Better to have some comments in code as well.

> +			unsupported+=(
> +				"dup"
> +				"raid0"
> +				"raid1"
> +				"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 +431,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..af0dc8a7e105 100755
> --- a/tests/btrfs/003
> +++ b/tests/btrfs/003
> @@ -173,12 +173,17 @@ _test_remove()
>  	_scratch_unmount
>  }
>  
> -_test_raid0
> -_test_raid1
> -_test_raid10
> +if ! _scratch_btrfs_is_zoned; then
> +	_test_raid0
> +	_test_raid1
> +	_test_raid10
> +fi
> +
>  _test_single
>  _test_add
> -_test_replace
> +if ! _scratch_btrfs_is_zoned; then

Same here, some comments to explain why replace doesn't work with zoned
devices?

> +	_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..49ca95bc9efb 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
> +# RAID profiles are not supported on zoned btrfs
> +_require_non_zoned_device "${SCRATCH_DEV}"
>  
>  create_group_profile()
>  {
> diff --git a/tests/btrfs/049 b/tests/btrfs/049
> index ad4ef122f3c9..a9cd5b2cf12b 100755
> --- a/tests/btrfs/049
> +++ b/tests/btrfs/049
> @@ -27,6 +27,8 @@ _cleanup()
>  _supported_fs btrfs
>  _require_scratch
>  _require_dm_target flakey
> +# inode cache is not supported on zoned btrfs
> +_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/125 b/tests/btrfs/125
> index e46b194d0139..de6651739f49 100755
> --- a/tests/btrfs/125
> +++ b/tests/btrfs/125
> @@ -43,6 +43,8 @@ _require_scratch_dev_pool 3
>  _test_unmount
>  _require_btrfs_forget_or_module_loadable
>  _require_btrfs_fs_feature raid56
> +# raid56 is not supported on zoned btrfs
> +_require_non_zoned_device "${SCRATCH_DEV}"

I think this check could be folded into "_require_btrfs_fs_feature raid56"
>  
>  _scratch_dev_pool_get 3
>  
> diff --git a/tests/btrfs/131 b/tests/btrfs/131
> index 81e5d9bc90c7..f97e8f30666a 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
> +# space_cache(v1) is not supported on HMZONED
> +_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..a1a465cc8e5d 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
> +# it overwrites data, which is forbidden on zoned block device
> +_require_non_zoned_device "${SCRATCH_DEV}"
>  
>  get_physical()
>  {
> diff --git a/tests/btrfs/148 b/tests/btrfs/148
> index 510e46dc0826..eb86df862d9b 100755
> --- a/tests/btrfs/148
> +++ b/tests/btrfs/148
> @@ -18,6 +18,8 @@ _require_scratch
>  _require_scratch_dev_pool 4
>  _require_odirect
>  _require_btrfs_fs_feature raid56
> +# raid56 is not supported on zoned btrfs
> +_require_non_zoned_device "${SCRATCH_DEV}"

Same here.

>  
>  _scratch_dev_pool_get 4
>  
> diff --git a/tests/btrfs/157 b/tests/btrfs/157
> index 0cfe3ce56548..d06acead25a1 100755
> --- a/tests/btrfs/157
> +++ b/tests/btrfs/157
> @@ -33,6 +33,8 @@ _supported_fs btrfs
>  _require_scratch_dev_pool 4
>  _require_btrfs_command inspect-internal dump-tree
>  _require_btrfs_fs_feature raid56
> +# raid56 is not supported on zoned btrfs
> +_require_non_zoned_device "${SCRATCH_DEV}"

And here.

>  
>  get_physical()
>  {
> diff --git a/tests/btrfs/158 b/tests/btrfs/158
> index ad374eba8c7e..dbe1036ae320 100755
> --- a/tests/btrfs/158
> +++ b/tests/btrfs/158
> @@ -25,6 +25,8 @@ _supported_fs btrfs
>  _require_scratch_dev_pool 4
>  _require_btrfs_command inspect-internal dump-tree
>  _require_btrfs_fs_feature raid56
> +# raid56 is not supported on zoned btrfs
> +_require_non_zoned_device "${SCRATCH_DEV}"

Ditto.

>  
>  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..303f18b43281 100755
> --- a/tests/btrfs/195
> +++ b/tests/btrfs/195
> @@ -36,6 +36,14 @@ run_testcase() {
>  	src_type=${args[1]}
>  	dst_type=${args[2]}
>  
> +	if [ `_zone_type ${SCRATCH_DEV}` != "none" -a \
> +		\( ${src_type} = "raid5" -o \
> +		   ${src_type} = "raid6" -o \
> +		   ${dst_type} = "raid5" -o \
> +		   ${dst_type} = "raid6" \) ]; then
> +		return
> +	fi
> +
>  	_scratch_dev_pool_get $num_disks
>  
>  	echo "=== Running test: $1 ===" >> $seqres.full
> diff --git a/tests/btrfs/197 b/tests/btrfs/197
> index f5baf5b6066b..5f38df401dea 100755
> --- a/tests/btrfs/197
> +++ b/tests/btrfs/197
> @@ -30,6 +30,7 @@ _supported_fs btrfs
>  _require_test
>  _require_scratch
>  _require_scratch_dev_pool 5
> +_require_non_zoned_device ${SCRATCH_DEV}

This test also tests raid5/raid6, I think we could also use the updated

_require_btrfs_fs_feature raid56

>  
>  workout()
>  {
> diff --git a/tests/btrfs/198 b/tests/btrfs/198
> index b3e175a25bf9..007445cb5cb4 100755
> --- a/tests/btrfs/198
> +++ b/tests/btrfs/198
> @@ -20,6 +20,7 @@ _supported_fs btrfs
>  _require_command "$WIPEFS_PROG" wipefs
>  _require_scratch
>  _require_scratch_dev_pool 4
> +_require_non_zoned_device ${SCRATCH_DEV}

Same here.

>  
>  workout()
>  {
> diff --git a/tests/btrfs/215 b/tests/btrfs/215
> index b45bd520b8e6..4a2933df6cdf 100755
> --- a/tests/btrfs/215
> +++ b/tests/btrfs/215
> @@ -24,6 +24,7 @@ get_physical()
>  
>  # Modify as appropriate.
>  _supported_fs btrfs
> +_require_non_zoned_device $SCRATCH_DEV

Some comments would be good.

Thanks,
Eryu

>  
>  _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	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 8/8] fstests: generic: add checks for zoned block device
  2021-08-11 15:12 ` [PATCH v2 8/8] fstests: generic: " Naohiro Aota
@ 2021-08-15 15:20   ` Eryu Guan
  2021-08-16  6:19     ` Naohiro Aota
  0 siblings, 1 reply; 17+ messages in thread
From: Eryu Guan @ 2021-08-15 15:20 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: fstests, linux-btrfs

On Thu, Aug 12, 2021 at 12:12:32AM +0900, Naohiro Aota wrote:
> 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 | 1 +
>  tests/generic/471 | 1 +
>  tests/generic/570 | 1 +
>  3 files changed, 3 insertions(+)
> 
> diff --git a/tests/generic/108 b/tests/generic/108
> index 7dd426c19030..b51bce9f9bce 100755
> --- a/tests/generic/108
> +++ b/tests/generic/108
> @@ -35,6 +35,7 @@ _require_scratch_nocheck
>  _require_block_device $SCRATCH_DEV
>  _require_scsi_debug
>  _require_command "$LVM_PROG" lvm
> +_require_non_zoned_device $SCRATCH_DEV

I think in generic/108 and generic/570 we should only check zoned device
if FSTYP is btrfs in in generic/471. And also need comments to explain
the reason to do so.

Thanks,
Eryu

>  
>  lvname=lv_$seq
>  vgname=vg_$seq
> diff --git a/tests/generic/471 b/tests/generic/471
> index dab06f3a315c..66b7d6946a9f 100755
> --- a/tests/generic/471
> +++ b/tests/generic/471
> @@ -37,6 +37,7 @@ mkdir $testdir
>  # all filesystems, use a NOCOW file on btrfs.
>  if [ $FSTYP == "btrfs" ]; then
>  	_require_chattr C
> +	_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..71928f0ac980 100755
> --- a/tests/generic/570
> +++ b/tests/generic/570
> @@ -25,6 +25,7 @@ _supported_fs generic
>  _require_test_program swapon
>  _require_scratch_nocheck
>  _require_block_device $SCRATCH_DEV
> +_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	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] fstests: add checks for testing zoned btrfs
  2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
                   ` (8 preceding siblings ...)
  2021-08-12 15:41 ` [PATCH v2 0/8] fstests: add checks for testing zoned btrfs David Sterba
@ 2021-08-15 15:21 ` Eryu Guan
  9 siblings, 0 replies; 17+ messages in thread
From: Eryu Guan @ 2021-08-15 15:21 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: fstests, linux-btrfs

On Thu, Aug 12, 2021 at 12:12:24AM +0900, Naohiro Aota wrote:
> This series revisit my old series to test zoned btrfs [1].
> 
> [1] https://lore.kernel.org/fstests/PH0PR04MB7416870032582BC2A8FC5AD99B299@PH0PR04MB7416.namprd04.prod.outlook.com/T/
> 
> Several tests are failing on zoned btrfs, but actually they are invalid.
> There are two reasons of the failures. One is creating too small
> filesystem. Since zoned btrfs needs at lease 5 zones (= 1.25 GB if zone
> size = 256MB) to create a filesystem, tests creating e.g., 1 GB filesystem
> will fail.
> 
> The other reason is lacking of zone support of some dm targets and loop
> device. So, they need to skip the test if the testing device is zoned.
> 
> Patches 1 to 4 handle the too small file system failure.

I've applied patch 1-4 and 6.

Thanks,
Eryu

> 
> And, patches 5 to 8 add checks for tests requiring non-zoned devices.
> 
> Naohiro Aota (8):
>   common/rc: introduce minimal fs size check
>   common/rc: fix blocksize detection for btrfs
>   btrfs/057: use _scratch_mkfs_sized to set filesystem size
>   fstests: btrfs: add minimal file system size check
>   common: add zoned block device checks
>   shared/032: add check for zoned block device
>   fstests: btrfs: add checks for zoned block device
>   fstests: generic: add checks for zoned block device
> 
>  README            |  4 ++++
>  common/btrfs      | 18 ++++++++++++++++++
>  common/dmerror    |  3 +++
>  common/dmhugedisk |  3 +++
>  common/rc         | 24 +++++++++++++++++++++++-
>  tests/btrfs/003   | 13 +++++++++----
>  tests/btrfs/011   | 21 ++++++++++++---------
>  tests/btrfs/012   |  2 ++
>  tests/btrfs/023   |  2 ++
>  tests/btrfs/049   |  2 ++
>  tests/btrfs/057   |  2 +-
>  tests/btrfs/116   |  2 ++
>  tests/btrfs/124   |  4 ++++
>  tests/btrfs/125   |  2 ++
>  tests/btrfs/131   |  2 ++
>  tests/btrfs/136   |  2 ++
>  tests/btrfs/140   |  2 ++
>  tests/btrfs/141   |  1 +
>  tests/btrfs/142   |  1 +
>  tests/btrfs/143   |  1 +
>  tests/btrfs/148   |  2 ++
>  tests/btrfs/150   |  1 +
>  tests/btrfs/151   |  1 +
>  tests/btrfs/156   |  1 +
>  tests/btrfs/157   |  3 +++
>  tests/btrfs/158   |  3 +++
>  tests/btrfs/175   |  1 +
>  tests/btrfs/194   |  2 +-
>  tests/btrfs/195   |  8 ++++++++
>  tests/btrfs/197   |  1 +
>  tests/btrfs/198   |  1 +
>  tests/btrfs/215   |  1 +
>  tests/btrfs/236   | 33 ++++++++++++++++++++-------------
>  tests/generic/108 |  1 +
>  tests/generic/471 |  1 +
>  tests/generic/570 |  1 +
>  tests/shared/032  |  2 ++
>  37 files changed, 145 insertions(+), 29 deletions(-)
> 
> -- 
> 2.32.0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 5/8] common: add zoned block device checks
  2021-08-15 14:42   ` Eryu Guan
@ 2021-08-16  6:06     ` Naohiro Aota
  0 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-16  6:06 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests, linux-btrfs

On Sun, Aug 15, 2021 at 10:42:46PM +0800, Eryu Guan wrote:
> On Thu, Aug 12, 2021 at 12:12:29AM +0900, Naohiro Aota wrote:
> > dm-error and dm-snapshot does not have DM_TARGET_ZONED_HM nor
> > DM_TARGET_MIXED_ZONED_MODEL feature and does not implement
> > .report_zones(). So, it cannot pass the zone information from the down
> > layer (zoned device) to the upper layer.
> > 
> > Loop device also cannot pass the zone information.
> > 
> > This patch requires non-zoned block device for the tests using these
> > ones.
> > 
> > Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> > ---
> >  common/dmerror    | 3 +++
> >  common/dmhugedisk | 3 +++
> >  common/rc         | 7 +++++++
> >  3 files changed, 13 insertions(+)
> > 
> > diff --git a/common/dmerror b/common/dmerror
> > index 01a4c8b5e52d..64ee78d85b95 100644
> > --- a/common/dmerror
> > +++ b/common/dmerror
> > @@ -15,6 +15,9 @@ _dmerror_setup()
> >  	export DMLINEAR_TABLE="0 $blk_dev_size linear $dm_backing_dev 0"
> >  
> >  	export DMERROR_TABLE="0 $blk_dev_size error $dm_backing_dev 0"
> > +
> > +	# dm-error cannot handle zone information
> > +	_require_non_zoned_device "${dm_backing_dev}"
> 
> We should really do the check in _require rules not in _setup()
> functions. Please see below.
> 
> >  }
> >  
> >  _dmerror_init()
> > diff --git a/common/dmhugedisk b/common/dmhugedisk
> > index 502f0243772d..715f95efde29 100644
> > --- a/common/dmhugedisk
> > +++ b/common/dmhugedisk
> > @@ -16,6 +16,9 @@ _dmhugedisk_init()
> >  	local dm_backing_dev=$SCRATCH_DEV
> >  	local chunk_size="$2"
> >  
> > +	# We cannot ensure sequential writes on the backing device
> > +	_require_non_zoned_device $dm_backing_dev
> > +
> >  	if [ -z "$chunk_size" ]; then
> >  		chunk_size=512
> >  	fi
> > diff --git a/common/rc b/common/rc
> > index 7b80820ff680..03b7e0310a84 100644
> > --- a/common/rc
> > +++ b/common/rc
> > @@ -1837,6 +1837,9 @@ _require_loop()
> >      else
> >  	_notrun "This test requires loopback device support"
> >      fi
> > +
> > +    # loop device does not handle zone information
> > +    _require_non_zoned_device ${TEST_DEV}
> >  }
> >  
> >  # this test requires kernel support for a secondary filesystem
> > @@ -1966,6 +1969,10 @@ _require_dm_target()
> >  	if [ $? -ne 0 ]; then
> >  		_notrun "This test requires dm $target support"
> >  	fi
> > +
> > +	if [ $target = thin-pool ]; then
> > +		_require_non_zoned_device ${SCRATCH_DEV}
> > +	fi
> 
> I think we could move all check here, based on $target, e.g.
> 
> 	case $target in
> 	thin-pool|error|snapshot)
> 		_require_non_zoned_device ${SCRATCH_DEV}
> 		;;
> 	esac

I see. It looks far better. I'll do so.

> Thanks,
> Eryu
> 
> >  }
> >  
> >  _zone_type()
> > -- 
> > 2.32.0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 7/8] fstests: btrfs: add checks for zoned block device
  2021-08-15 15:12   ` Eryu Guan
@ 2021-08-16  6:10     ` Naohiro Aota
  0 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-16  6:10 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests, linux-btrfs

On Sun, Aug 15, 2021 at 11:12:21PM +0800, Eryu Guan wrote:
> On Thu, Aug 12, 2021 at 12:12:31AM +0900, Naohiro Aota wrote:
> > 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/125
> >   - btrfs/148
> >   - btrfs/157
> >   - btrfs/158
> >   - btrfs/195
> >   - btrfs/197
> >   - btrfs/198
> > * 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    | 18 ++++++++++++++++++
> >  tests/btrfs/003 | 13 +++++++++----
> >  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/125 |  2 ++
> >  tests/btrfs/131 |  2 ++
> >  tests/btrfs/136 |  2 ++
> >  tests/btrfs/140 |  2 ++
> >  tests/btrfs/148 |  2 ++
> >  tests/btrfs/157 |  2 ++
> >  tests/btrfs/158 |  2 ++
> >  tests/btrfs/194 |  2 +-
> >  tests/btrfs/195 |  8 ++++++++
> >  tests/btrfs/197 |  1 +
> >  tests/btrfs/198 |  1 +
> >  tests/btrfs/215 |  1 +
> >  tests/btrfs/236 | 33 ++++++++++++++++++++-------------
> >  21 files changed, 97 insertions(+), 27 deletions(-)
> > 
> > diff --git a/common/btrfs b/common/btrfs
> > index ebe6ce269a6b..fb1a65842012 100644
> > --- a/common/btrfs
> > +++ b/common/btrfs
> > @@ -222,6 +222,18 @@ _btrfs_get_profile_configs()
> >  		else
> >  			local unsupported=()
> >  		fi
> > +
> > +		if [ `_zone_type $TEST_DEV` != "none" ]; then
> 
> Better to have some comments in code as well.

Sure. I'll add comments for all the places.

> > +			unsupported+=(
> > +				"dup"
> > +				"raid0"
> > +				"raid1"
> > +				"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 +431,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..af0dc8a7e105 100755
> > --- a/tests/btrfs/003
> > +++ b/tests/btrfs/003
> > @@ -173,12 +173,17 @@ _test_remove()
> >  	_scratch_unmount
> >  }
> >  
> > -_test_raid0
> > -_test_raid1
> > -_test_raid10
> > +if ! _scratch_btrfs_is_zoned; then
> > +	_test_raid0
> > +	_test_raid1
> > +	_test_raid10
> > +fi
> > +
> >  _test_single
> >  _test_add
> > -_test_replace
> > +if ! _scratch_btrfs_is_zoned; then
> 
> Same here, some comments to explain why replace doesn't work with zoned
> devices?
> 
> > +	_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..49ca95bc9efb 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
> > +# RAID profiles are not supported on zoned btrfs
> > +_require_non_zoned_device "${SCRATCH_DEV}"
> >  
> >  create_group_profile()
> >  {
> > diff --git a/tests/btrfs/049 b/tests/btrfs/049
> > index ad4ef122f3c9..a9cd5b2cf12b 100755
> > --- a/tests/btrfs/049
> > +++ b/tests/btrfs/049
> > @@ -27,6 +27,8 @@ _cleanup()
> >  _supported_fs btrfs
> >  _require_scratch
> >  _require_dm_target flakey
> > +# inode cache is not supported on zoned btrfs
> > +_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/125 b/tests/btrfs/125
> > index e46b194d0139..de6651739f49 100755
> > --- a/tests/btrfs/125
> > +++ b/tests/btrfs/125
> > @@ -43,6 +43,8 @@ _require_scratch_dev_pool 3
> >  _test_unmount
> >  _require_btrfs_forget_or_module_loadable
> >  _require_btrfs_fs_feature raid56
> > +# raid56 is not supported on zoned btrfs
> > +_require_non_zoned_device "${SCRATCH_DEV}"
> 
> I think this check could be folded into "_require_btrfs_fs_feature raid56"

Yeah, that will make the patch much more simple. Thanks.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 8/8] fstests: generic: add checks for zoned block device
  2021-08-15 15:20   ` Eryu Guan
@ 2021-08-16  6:19     ` Naohiro Aota
  0 siblings, 0 replies; 17+ messages in thread
From: Naohiro Aota @ 2021-08-16  6:19 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests, linux-btrfs

On Sun, Aug 15, 2021 at 11:20:07PM +0800, Eryu Guan wrote:
> On Thu, Aug 12, 2021 at 12:12:32AM +0900, Naohiro Aota wrote:
> > 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 | 1 +
> >  tests/generic/471 | 1 +
> >  tests/generic/570 | 1 +
> >  3 files changed, 3 insertions(+)
> > 
> > diff --git a/tests/generic/108 b/tests/generic/108
> > index 7dd426c19030..b51bce9f9bce 100755
> > --- a/tests/generic/108
> > +++ b/tests/generic/108
> > @@ -35,6 +35,7 @@ _require_scratch_nocheck
> >  _require_block_device $SCRATCH_DEV
> >  _require_scsi_debug
> >  _require_command "$LVM_PROG" lvm
> > +_require_non_zoned_device $SCRATCH_DEV
> 
> I think in generic/108 and generic/570 we should only check zoned device
> if FSTYP is btrfs in in generic/471. And also need comments to explain
> the reason to do so.

Hmm, I don't think the FSTYP restriction is neccesary for generic/108
and generic/570.

Generic/108 won't work on zoned devices regardless of file system
type, because it tries to create LVM on SCRATCH_DEV.

Also, generic/570 tries to create swap directly on SCRATCH_DEV. So, no
file system code is related here. And, swap cannot be work on zoned
devices, because it will do random write IOs. My commit log was
misleading on this point.

I'll add comments anyway.

> Thanks,
> Eryu
> 
> >  
> >  lvname=lv_$seq
> >  vgname=vg_$seq
> > diff --git a/tests/generic/471 b/tests/generic/471
> > index dab06f3a315c..66b7d6946a9f 100755
> > --- a/tests/generic/471
> > +++ b/tests/generic/471
> > @@ -37,6 +37,7 @@ mkdir $testdir
> >  # all filesystems, use a NOCOW file on btrfs.
> >  if [ $FSTYP == "btrfs" ]; then
> >  	_require_chattr C
> > +	_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..71928f0ac980 100755
> > --- a/tests/generic/570
> > +++ b/tests/generic/570
> > @@ -25,6 +25,7 @@ _supported_fs generic
> >  _require_test_program swapon
> >  _require_scratch_nocheck
> >  _require_block_device $SCRATCH_DEV
> > +_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	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2021-08-16  6:19 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-11 15:12 [PATCH v2 0/8] fstests: add checks for testing zoned btrfs Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 1/8] common/rc: introduce minimal fs size check Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 2/8] common/rc: fix blocksize detection for btrfs Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 3/8] btrfs/057: use _scratch_mkfs_sized to set filesystem size Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 4/8] fstests: btrfs: add minimal file system size check Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 5/8] common: add zoned block device checks Naohiro Aota
2021-08-15 14:42   ` Eryu Guan
2021-08-16  6:06     ` Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 6/8] shared/032: add check for zoned block device Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 7/8] fstests: btrfs: add checks " Naohiro Aota
2021-08-15 15:12   ` Eryu Guan
2021-08-16  6:10     ` Naohiro Aota
2021-08-11 15:12 ` [PATCH v2 8/8] fstests: generic: " Naohiro Aota
2021-08-15 15:20   ` Eryu Guan
2021-08-16  6:19     ` Naohiro Aota
2021-08-12 15:41 ` [PATCH v2 0/8] fstests: add checks for testing zoned btrfs David Sterba
2021-08-15 15:21 ` Eryu Guan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.