linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] btrfs: test active zone tracking
@ 2022-09-22  5:54 Naohiro Aota
  2022-09-22  5:54 ` [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity Naohiro Aota
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Naohiro Aota @ 2022-09-22  5:54 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

This series adds a test for checking if an active zone tracking feature of
btrfs's zoned mode. The first patch introduces _zone_capacity() helper to
get the zone capacity of a specified zone. It rewrites btrfs/237 with the
helper and use the helper in a newly added test btrfs/292.

Naohiro Aota (2):
  common: introduce zone_capacity() to return a zone capacity
  btrfs: test active zone tracking

 common/zbd          |  29 ++++++++++
 tests/btrfs/237     |   8 +--
 tests/btrfs/292     | 137 ++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/292.out |   2 +
 4 files changed, 170 insertions(+), 6 deletions(-)
 create mode 100644 common/zbd
 create mode 100755 tests/btrfs/292
 create mode 100644 tests/btrfs/292.out

-- 
2.37.3


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

* [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-22  5:54 [PATCH 0/2] btrfs: test active zone tracking Naohiro Aota
@ 2022-09-22  5:54 ` Naohiro Aota
  2022-09-22 15:41   ` Zorro Lang
  2022-09-22  5:54 ` [PATCH 2/2] btrfs: test active zone tracking Naohiro Aota
  2022-09-22 12:18 ` [PATCH 0/2] " Johannes Thumshirn
  2 siblings, 1 reply; 13+ messages in thread
From: Naohiro Aota @ 2022-09-22  5:54 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

Introduce _zone_capacity() to return a zone capacity of the given address
in the given device (optional). Rewrite btrfs/237 with it.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 common/zbd      | 17 +++++++++++++++++
 tests/btrfs/237 |  8 ++------
 2 files changed, 19 insertions(+), 6 deletions(-)
 create mode 100644 common/zbd

diff --git a/common/zbd b/common/zbd
new file mode 100644
index 000000000000..329bb7be6b7b
--- /dev/null
+++ b/common/zbd
@@ -0,0 +1,17 @@
+#
+# Common zoned block device specific functions
+#
+
+. common/filter
+
+_zone_capacity() {
+    local phy=$1
+    local dev=$2
+
+    [ -z "$dev" ] && dev=$SCRATCH_DEV
+
+    size=$($BLKZONE_PROG report -o $phy -l 1 $dev |\
+	       _filter_blkzone_report |\
+	       grep -Po "cap 0x[[:xdigit:]]+" | cut -d ' ' -f 2)
+    echo $((size << 9))
+}
diff --git a/tests/btrfs/237 b/tests/btrfs/237
index bc6522e2200a..101094b5ce70 100755
--- a/tests/btrfs/237
+++ b/tests/btrfs/237
@@ -13,7 +13,7 @@
 _begin_fstest auto quick zone balance
 
 # Import common functions.
-. ./common/filter
+. ./common/zbd
 
 # real QA test starts here
 
@@ -56,11 +56,7 @@ fi
 
 start_data_bg_phy=$(get_data_bg_physical)
 start_data_bg_phy=$((start_data_bg_phy >> 9))
-
-size=$($BLKZONE_PROG report -o $start_data_bg_phy -l 1 $SCRATCH_DEV |\
-	_filter_blkzone_report |\
-	grep -Po "cap 0x[[:xdigit:]]+" | cut -d ' ' -f 2)
-size=$((size << 9))
+size=$(_zone_capacity $start_data_bg_phy)
 
 reclaim_threshold=75
 echo $reclaim_threshold > /sys/fs/btrfs/"$uuid"/bg_reclaim_threshold
-- 
2.37.3


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

* [PATCH 2/2] btrfs: test active zone tracking
  2022-09-22  5:54 [PATCH 0/2] btrfs: test active zone tracking Naohiro Aota
  2022-09-22  5:54 ` [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity Naohiro Aota
@ 2022-09-22  5:54 ` Naohiro Aota
  2022-09-22 16:03   ` Zorro Lang
  2022-09-22 12:18 ` [PATCH 0/2] " Johannes Thumshirn
  2 siblings, 1 reply; 13+ messages in thread
From: Naohiro Aota @ 2022-09-22  5:54 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Naohiro Aota

A ZNS device limits the number of active zones, which is the number of
zones can be written at the same time. To deal with the limit, btrfs's
zoned mode tracks which zone (corresponds to a block group on the SINGLE
profile) is active, and finish a zone if necessary.

This test checks if the active zone tracking and the finishing of zones
works properly. First, it fills <number of max active zones> zones
mostly. And, run some data/metadata stress workload to force btrfs to use a
new zone.

This test fails on an older kernel (e.g, 5.18.2) like below.

btrfs/292
[failed, exit status 1]- output mismatch (see /host/btrfs/292.out.bad)
    --- tests/btrfs/292.out     2022-09-15 07:52:18.000000000 +0000
    +++ /host/btrfs/292.out.bad 2022-09-15 07:59:14.290967793 +0000
    @@ -1,2 +1,5 @@
     QA output created by 292
    -Silence is golden
    +stress_data_bgs failed
    +stress_data_bgs_2 failed
    +failed: '/bin/btrfs subvolume snapshot /mnt/scratch /mnt/scratch/snap825'
    +(see /host/btrfs/292.full for details)
    ...
    (Run 'diff -u /var/lib/xfstests/tests/btrfs/292.out /host/btrfs/292.out.bad'  to see the entire diff)

The failure is fixed with a series "btrfs: zoned: fix active zone tracking
issues" [1] (upstream commits from 65ea1b66482f ("block: add bdev_max_segments()
helper") to 2ce543f47843 ("btrfs: zoned: wait until zone is finished when
allocation didn't progress")).

[1] https://lore.kernel.org/linux-btrfs/cover.1657321126.git.naohiro.aota@wdc.com/

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 common/zbd          |  12 ++++
 tests/btrfs/292     | 137 ++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/292.out |   2 +
 3 files changed, 151 insertions(+)
 create mode 100755 tests/btrfs/292
 create mode 100644 tests/btrfs/292.out

diff --git a/common/zbd b/common/zbd
index 329bb7be6b7b..19a59fd27e69 100644
--- a/common/zbd
+++ b/common/zbd
@@ -2,8 +2,20 @@
 # Common zoned block device specific functions
 #
 
+. common/rc
 . common/filter
 
+_require_limited_active_zones() {
+    local dev=$1
+    local sysfs=$(_sysfs_dev ${dev})
+    local attr="${sysfs}/queue/max_active_zones"
+
+    [ -e "${attr}" ] || _notrun "cannot find queue/max_active_zones. Maybe non-zoned device?"
+    if [ $(cat "${attr}") == 0 ]; then
+	_notrun "this test requires limited active zones"
+    fi
+}
+
 _zone_capacity() {
     local phy=$1
     local dev=$2
diff --git a/tests/btrfs/292 b/tests/btrfs/292
new file mode 100755
index 000000000000..30c027c4ba5f
--- /dev/null
+++ b/tests/btrfs/292
@@ -0,0 +1,137 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022 Western Digital Corporation.  All Rights Reserved.
+#
+# FS QA Test 292
+#
+# Test that an active zone is properly reclaimed to allow the further
+# allocations, even if the active zones are mostly filled.
+#
+. ./common/preamble
+_begin_fstest auto quick snapshot zone
+
+# Import common functions.
+. ./common/btrfs
+. ./common/zbd
+
+# real QA test starts here
+
+_supported_fs btrfs
+_require_scratch
+_require_zoned_device "$SCRATCH_DEV"
+_require_limited_active_zones "$SCRATCH_DEV"
+
+_require_command "$BLKZONE_PROG" blkzone
+_require_fio
+_require_btrfs_command inspect-internal dump-tree
+
+# This test requires specific data space usage, skip if we have compression
+# enabled.
+_require_no_compress
+
+max_active=$(cat $(_sysfs_dev ${SCRATCH_DEV})/queue/max_active_zones)
+
+# Fill the zones leaving the last 1MB
+fill_active_zones() {
+    # Asuumes we have the same capacity between zones.
+    local capacity=$(_zone_capacity 0)
+    local fill_size=$((capacity - 1024 * 1024))
+
+    for x in $(seq ${max_active}); do
+	dd if=/dev/zero of=${SCRATCH_MNT}/fill$(printf "%02d" $x) bs=${fill_size} \
+	   count=1 oflag=direct 2>/dev/null
+	$BTRFS_UTIL_PROG filesystem sync ${SCRATCH_MNT}
+
+	local nactive=$($BLKZONE_PROG report ${SCRATCH_DEV} | grep oi | wc -l)
+	if [[ ${nactive} == ${max_active} ]]; then
+	    break
+	fi
+    done
+
+    echo "max active zones: ${max_active}" >> $seqres.full
+    $BLKZONE_PROG report ${SCRATCH_DEV} | grep oi | cat -n >> $seqres.full
+}
+
+workout() {
+    local func="$1"
+
+    _scratch_mkfs >/dev/null 2>&1
+    _scratch_mount
+
+    fill_active_zones
+    eval "$func"
+    local ret=$?
+
+    _scratch_unmount
+    _check_btrfs_filesystem ${SCRATCH_DEV}
+
+    return $ret
+}
+
+stress_data_bgs() {
+    # This dd fails with ENOSPC, which should not :(
+    dd if=/dev/zero of=${SCRATCH_MNT}/large bs=64M count=1 oflag=sync \
+       >>$seqres.full 2>&1
+}
+
+stress_data_bgs_2() {
+    # This dd fails with ENOSPC, which should not :(
+    dd if=/dev/zero of=${SCRATCH_MNT}/large bs=64M count=10 conv=fsync \
+       >>$seqres.full 2>&1 &
+    local pid1=$!
+
+    dd if=/dev/zero of=${SCRATCH_MNT}/large2 bs=64M count=10 conv=fsync \
+       >>$seqres.full 2>&1 &
+    local pid2=$!
+
+    wait $pid1; local ret1=$?
+    wait $pid2; local ret2=$?
+
+    if [ $ret1 -ne 0 -o $ret2 -ne 0 ]; then
+	return 1
+    fi
+    return 0
+}
+
+get_meta_bgs() {
+    $BTRFS_UTIL_PROG inspect-internal dump-tree -t EXTENT ${SCRATCH_DEV} |
+        grep BLOCK_GROUP -A 1 |grep -B1 'METADATA|' |
+        grep -oP '\(\d+ BLOCK_GROUP_ITEM \d+\)'
+}
+
+# This test case does not return the result because
+# _run_btrfs_util_prog will call _fail() in the error case anyway.
+stress_metadata_bgs() {
+    local metabgs=$(get_meta_bgs)
+    local count=0
+
+    while : ; do
+        _run_btrfs_util_prog subvolume snapshot ${SCRATCH_MNT} ${SCRATCH_MNT}/snap$i
+        _run_btrfs_util_prog filesystem sync ${SCRATCH_MNT}
+        cur_metabgs=$(get_meta_bgs)
+        if [[ "${cur_metabgs}" != "${metabgs}" ]]; then
+            break
+        fi
+        i=$((i + 1))
+    done
+}
+
+WORKS=(
+    stress_data_bgs
+    stress_data_bgs_2
+    stress_metadata_bgs
+)
+
+status=0
+for work in "${WORKS[@]}"; do
+    if ! workout "${work}"; then
+	echo "${work} failed"
+	status=1
+    fi
+done
+
+# success, all done
+if [ $status -eq 0 ]; then
+    echo "Silence is golden"
+fi
+exit
diff --git a/tests/btrfs/292.out b/tests/btrfs/292.out
new file mode 100644
index 000000000000..627309d3fbd2
--- /dev/null
+++ b/tests/btrfs/292.out
@@ -0,0 +1,2 @@
+QA output created by 292
+Silence is golden
-- 
2.37.3


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

* Re: [PATCH 0/2] btrfs: test active zone tracking
  2022-09-22  5:54 [PATCH 0/2] btrfs: test active zone tracking Naohiro Aota
  2022-09-22  5:54 ` [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity Naohiro Aota
  2022-09-22  5:54 ` [PATCH 2/2] btrfs: test active zone tracking Naohiro Aota
@ 2022-09-22 12:18 ` Johannes Thumshirn
  2 siblings, 0 replies; 13+ messages in thread
From: Johannes Thumshirn @ 2022-09-22 12:18 UTC (permalink / raw)
  To: Naohiro Aota, fstests; +Cc: linux-btrfs

Looks good,
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>

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

* Re: [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-22  5:54 ` [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity Naohiro Aota
@ 2022-09-22 15:41   ` Zorro Lang
  2022-09-23  8:02     ` Johannes Thumshirn
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-09-22 15:41 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: fstests, linux-btrfs

On Thu, Sep 22, 2022 at 02:54:58PM +0900, Naohiro Aota wrote:
> Introduce _zone_capacity() to return a zone capacity of the given address
> in the given device (optional). Rewrite btrfs/237 with it.
> 
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  common/zbd      | 17 +++++++++++++++++
>  tests/btrfs/237 |  8 ++------
>  2 files changed, 19 insertions(+), 6 deletions(-)
>  create mode 100644 common/zbd
> 
> diff --git a/common/zbd b/common/zbd
> new file mode 100644
> index 000000000000..329bb7be6b7b
> --- /dev/null
> +++ b/common/zbd

I don't like this abbreviation :-P If others don't open this file and read the
comment in it, they nearly no chance to guess what's this file for.

> @@ -0,0 +1,17 @@
> +#
> +# Common zoned block device specific functions
> +#
> +
> +. common/filter
> +
> +_zone_capacity() {
> +    local phy=$1
> +    local dev=$2
> +
> +    [ -z "$dev" ] && dev=$SCRATCH_DEV
> +
> +    size=$($BLKZONE_PROG report -o $phy -l 1 $dev |\
> +	       _filter_blkzone_report |\
> +	       grep -Po "cap 0x[[:xdigit:]]+" | cut -d ' ' -f 2)
> +    echo $((size << 9))
> +}

Do you have more zone related helpers are going to provide? If only this
single one helper, I think it's not worth adding a new common file. You
can put it into common/rc simply, as there're already several *zone*
related helpers in it.

We can pick up these *zone* related function into a separate include file in
one day we feel it's time (too many related helpers, and better to be maintained
individually).

Thanks,
Zorro

> diff --git a/tests/btrfs/237 b/tests/btrfs/237
> index bc6522e2200a..101094b5ce70 100755
> --- a/tests/btrfs/237
> +++ b/tests/btrfs/237
> @@ -13,7 +13,7 @@
>  _begin_fstest auto quick zone balance
>  
>  # Import common functions.
> -. ./common/filter
> +. ./common/zbd
>  
>  # real QA test starts here
>  
> @@ -56,11 +56,7 @@ fi
>  
>  start_data_bg_phy=$(get_data_bg_physical)
>  start_data_bg_phy=$((start_data_bg_phy >> 9))
> -
> -size=$($BLKZONE_PROG report -o $start_data_bg_phy -l 1 $SCRATCH_DEV |\
> -	_filter_blkzone_report |\
> -	grep -Po "cap 0x[[:xdigit:]]+" | cut -d ' ' -f 2)
> -size=$((size << 9))
> +size=$(_zone_capacity $start_data_bg_phy)
>  
>  reclaim_threshold=75
>  echo $reclaim_threshold > /sys/fs/btrfs/"$uuid"/bg_reclaim_threshold
> -- 
> 2.37.3
> 


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

* Re: [PATCH 2/2] btrfs: test active zone tracking
  2022-09-22  5:54 ` [PATCH 2/2] btrfs: test active zone tracking Naohiro Aota
@ 2022-09-22 16:03   ` Zorro Lang
  2022-09-28  3:58     ` Naohiro Aota
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-09-22 16:03 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: fstests, linux-btrfs

On Thu, Sep 22, 2022 at 02:54:59PM +0900, Naohiro Aota wrote:
> A ZNS device limits the number of active zones, which is the number of
> zones can be written at the same time. To deal with the limit, btrfs's
> zoned mode tracks which zone (corresponds to a block group on the SINGLE
> profile) is active, and finish a zone if necessary.
> 
> This test checks if the active zone tracking and the finishing of zones
> works properly. First, it fills <number of max active zones> zones
> mostly. And, run some data/metadata stress workload to force btrfs to use a
> new zone.
> 
> This test fails on an older kernel (e.g, 5.18.2) like below.
> 
> btrfs/292
> [failed, exit status 1]- output mismatch (see /host/btrfs/292.out.bad)
>     --- tests/btrfs/292.out     2022-09-15 07:52:18.000000000 +0000
>     +++ /host/btrfs/292.out.bad 2022-09-15 07:59:14.290967793 +0000
>     @@ -1,2 +1,5 @@
>      QA output created by 292
>     -Silence is golden
>     +stress_data_bgs failed
>     +stress_data_bgs_2 failed
>     +failed: '/bin/btrfs subvolume snapshot /mnt/scratch /mnt/scratch/snap825'
>     +(see /host/btrfs/292.full for details)
>     ...
>     (Run 'diff -u /var/lib/xfstests/tests/btrfs/292.out /host/btrfs/292.out.bad'  to see the entire diff)
> 
> The failure is fixed with a series "btrfs: zoned: fix active zone tracking
> issues" [1] (upstream commits from 65ea1b66482f ("block: add bdev_max_segments()
> helper") to 2ce543f47843 ("btrfs: zoned: wait until zone is finished when
> allocation didn't progress")).
> 
> [1] https://lore.kernel.org/linux-btrfs/cover.1657321126.git.naohiro.aota@wdc.com/
> 
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  common/zbd          |  12 ++++
>  tests/btrfs/292     | 137 ++++++++++++++++++++++++++++++++++++++++++++
>  tests/btrfs/292.out |   2 +
>  3 files changed, 151 insertions(+)
>  create mode 100755 tests/btrfs/292
>  create mode 100644 tests/btrfs/292.out
> 
> diff --git a/common/zbd b/common/zbd
> index 329bb7be6b7b..19a59fd27e69 100644
> --- a/common/zbd
> +++ b/common/zbd
> @@ -2,8 +2,20 @@
>  # Common zoned block device specific functions
>  #
>  
> +. common/rc

Did hit anything wrong if you don't import this file here? I think generally
we don't need to import common/rc in other common files (except common/preamble)
, due to it's always be imported at the beginning of each test cases.

>  . common/filter

As I said in patch 1/2, if you'd like to create this separated common file
about zone device, are you willing to move those extant zone related helpers
into this file, and change related cases to turn to import this file? I don't
have objection if you'd like to organize that.

Thanks,
Zorro

>  
> +_require_limited_active_zones() {
> +    local dev=$1
> +    local sysfs=$(_sysfs_dev ${dev})
> +    local attr="${sysfs}/queue/max_active_zones"
> +
> +    [ -e "${attr}" ] || _notrun "cannot find queue/max_active_zones. Maybe non-zoned device?"
> +    if [ $(cat "${attr}") == 0 ]; then
> +	_notrun "this test requires limited active zones"
> +    fi
> +}
> +
>  _zone_capacity() {
>      local phy=$1
>      local dev=$2
> diff --git a/tests/btrfs/292 b/tests/btrfs/292
> new file mode 100755
> index 000000000000..30c027c4ba5f
> --- /dev/null
> +++ b/tests/btrfs/292
> @@ -0,0 +1,137 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022 Western Digital Corporation.  All Rights Reserved.
> +#
> +# FS QA Test 292
> +#
> +# Test that an active zone is properly reclaimed to allow the further
> +# allocations, even if the active zones are mostly filled.
> +#
> +. ./common/preamble
> +_begin_fstest auto quick snapshot zone
> +
> +# Import common functions.
> +. ./common/btrfs
> +. ./common/zbd
> +
> +# real QA test starts here
> +
> +_supported_fs btrfs
> +_require_scratch
> +_require_zoned_device "$SCRATCH_DEV"
> +_require_limited_active_zones "$SCRATCH_DEV"
> +
> +_require_command "$BLKZONE_PROG" blkzone
> +_require_fio
> +_require_btrfs_command inspect-internal dump-tree
> +
> +# This test requires specific data space usage, skip if we have compression
> +# enabled.
> +_require_no_compress
> +
> +max_active=$(cat $(_sysfs_dev ${SCRATCH_DEV})/queue/max_active_zones)
> +
> +# Fill the zones leaving the last 1MB
> +fill_active_zones() {
> +    # Asuumes we have the same capacity between zones.
> +    local capacity=$(_zone_capacity 0)
> +    local fill_size=$((capacity - 1024 * 1024))
> +
> +    for x in $(seq ${max_active}); do
> +	dd if=/dev/zero of=${SCRATCH_MNT}/fill$(printf "%02d" $x) bs=${fill_size} \
> +	   count=1 oflag=direct 2>/dev/null
> +	$BTRFS_UTIL_PROG filesystem sync ${SCRATCH_MNT}
> +
> +	local nactive=$($BLKZONE_PROG report ${SCRATCH_DEV} | grep oi | wc -l)
> +	if [[ ${nactive} == ${max_active} ]]; then
> +	    break
> +	fi
> +    done
> +
> +    echo "max active zones: ${max_active}" >> $seqres.full
> +    $BLKZONE_PROG report ${SCRATCH_DEV} | grep oi | cat -n >> $seqres.full
> +}
> +
> +workout() {
> +    local func="$1"
> +
> +    _scratch_mkfs >/dev/null 2>&1
> +    _scratch_mount
> +
> +    fill_active_zones
> +    eval "$func"
> +    local ret=$?
> +
> +    _scratch_unmount
> +    _check_btrfs_filesystem ${SCRATCH_DEV}
> +
> +    return $ret
> +}
> +
> +stress_data_bgs() {
> +    # This dd fails with ENOSPC, which should not :(
> +    dd if=/dev/zero of=${SCRATCH_MNT}/large bs=64M count=1 oflag=sync \
> +       >>$seqres.full 2>&1
> +}
> +
> +stress_data_bgs_2() {
> +    # This dd fails with ENOSPC, which should not :(
> +    dd if=/dev/zero of=${SCRATCH_MNT}/large bs=64M count=10 conv=fsync \
> +       >>$seqres.full 2>&1 &
> +    local pid1=$!
> +
> +    dd if=/dev/zero of=${SCRATCH_MNT}/large2 bs=64M count=10 conv=fsync \
> +       >>$seqres.full 2>&1 &
> +    local pid2=$!
> +
> +    wait $pid1; local ret1=$?
> +    wait $pid2; local ret2=$?
> +
> +    if [ $ret1 -ne 0 -o $ret2 -ne 0 ]; then
> +	return 1
> +    fi
> +    return 0
> +}
> +
> +get_meta_bgs() {
> +    $BTRFS_UTIL_PROG inspect-internal dump-tree -t EXTENT ${SCRATCH_DEV} |
> +        grep BLOCK_GROUP -A 1 |grep -B1 'METADATA|' |
> +        grep -oP '\(\d+ BLOCK_GROUP_ITEM \d+\)'
> +}
> +
> +# This test case does not return the result because
> +# _run_btrfs_util_prog will call _fail() in the error case anyway.
> +stress_metadata_bgs() {
> +    local metabgs=$(get_meta_bgs)
> +    local count=0
> +
> +    while : ; do
> +        _run_btrfs_util_prog subvolume snapshot ${SCRATCH_MNT} ${SCRATCH_MNT}/snap$i
> +        _run_btrfs_util_prog filesystem sync ${SCRATCH_MNT}
> +        cur_metabgs=$(get_meta_bgs)
> +        if [[ "${cur_metabgs}" != "${metabgs}" ]]; then
> +            break
> +        fi
> +        i=$((i + 1))
> +    done
> +}
> +
> +WORKS=(
> +    stress_data_bgs
> +    stress_data_bgs_2
> +    stress_metadata_bgs
> +)
> +
> +status=0
> +for work in "${WORKS[@]}"; do
> +    if ! workout "${work}"; then
> +	echo "${work} failed"
> +	status=1
> +    fi
> +done
> +
> +# success, all done
> +if [ $status -eq 0 ]; then
> +    echo "Silence is golden"
> +fi
> +exit
> diff --git a/tests/btrfs/292.out b/tests/btrfs/292.out
> new file mode 100644
> index 000000000000..627309d3fbd2
> --- /dev/null
> +++ b/tests/btrfs/292.out
> @@ -0,0 +1,2 @@
> +QA output created by 292
> +Silence is golden
> -- 
> 2.37.3
> 


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

* Re: [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-22 15:41   ` Zorro Lang
@ 2022-09-23  8:02     ` Johannes Thumshirn
  2022-09-23 11:51       ` Zorro Lang
  0 siblings, 1 reply; 13+ messages in thread
From: Johannes Thumshirn @ 2022-09-23  8:02 UTC (permalink / raw)
  To: Zorro Lang, Naohiro Aota; +Cc: fstests, linux-btrfs

On 22.09.22 17:42, Zorro Lang wrote:
>> --- /dev/null
>> +++ b/common/zbd
> I don't like this abbreviation :-P If others don't open this file and read the
> comment in it, they nearly no chance to guess what's this file for.
> 

zbd is a well known abbreviation for zoned block devices. I think most
people in storage and filesystems know it.

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

* Re: [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-23  8:02     ` Johannes Thumshirn
@ 2022-09-23 11:51       ` Zorro Lang
  2022-09-28  3:57         ` Naohiro Aota
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-09-23 11:51 UTC (permalink / raw)
  To: Johannes Thumshirn; +Cc: Naohiro Aota, fstests, linux-btrfs

On Fri, Sep 23, 2022 at 08:02:10AM +0000, Johannes Thumshirn wrote:
> On 22.09.22 17:42, Zorro Lang wrote:
> >> --- /dev/null
> >> +++ b/common/zbd
> > I don't like this abbreviation :-P If others don't open this file and read the
> > comment in it, they nearly no chance to guess what's this file for.
> > 
> 
> zbd is a well known abbreviation for zoned block devices. I think most
> people in storage and filesystems know it.

OK, but we haven't been that "a single character is worth a thousand
pieces of gold", so we can use a longer name, likes common/zone,
common/zoned, common/zoned_block, common/zoned_device or something likes
that. Anyway, that's just my personal opinion, if most of people prefer
using "common/zbd", I'm fine to have that :) 

But I hope you can move all zoned block device related helpers to the new
common file if you'd like to bring in this file, likes what Darrick did in:

commit 67afd5c742464607994316acb2c6e8303b8af4c5
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Aug 9 14:00:46 2022 -0700

    common/rc: move ext4-specific helpers into a separate common/ext4 file

Thanks,
Zorro

> 
> 


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

* Re: [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-23 11:51       ` Zorro Lang
@ 2022-09-28  3:57         ` Naohiro Aota
  2022-09-28  5:47           ` Zorro Lang
  0 siblings, 1 reply; 13+ messages in thread
From: Naohiro Aota @ 2022-09-28  3:57 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Johannes Thumshirn, fstests, linux-btrfs

On Fri, Sep 23, 2022 at 07:51:26PM +0800, Zorro Lang wrote:
> On Fri, Sep 23, 2022 at 08:02:10AM +0000, Johannes Thumshirn wrote:
> > On 22.09.22 17:42, Zorro Lang wrote:
> > >> --- /dev/null
> > >> +++ b/common/zbd
> > > I don't like this abbreviation :-P If others don't open this file and read the
> > > comment in it, they nearly no chance to guess what's this file for.
> > > 
> > 
> > zbd is a well known abbreviation for zoned block devices. I think most
> > people in storage and filesystems know it.
> 
> OK, but we haven't been that "a single character is worth a thousand
> pieces of gold", so we can use a longer name, likes common/zone,
> common/zoned, common/zoned_block, common/zoned_device or something likes
> that. Anyway, that's just my personal opinion, if most of people prefer
> using "common/zbd", I'm fine to have that :) 

Sure. I'll use "zoned" as it is more common in the kernel code.

> But I hope you can move all zoned block device related helpers to the new
> common file if you'd like to bring in this file, likes what Darrick did in:
> 
> commit 67afd5c742464607994316acb2c6e8303b8af4c5
> Author: Darrick J. Wong <djwong@kernel.org>
> Date:   Tue Aug 9 14:00:46 2022 -0700
> 
>     common/rc: move ext4-specific helpers into a separate common/ext4 file

Yes, that will be better to have things in common/zoned. I considered
moving zoned functions (_zone_type, _require_{,non_}zoned_device), but
_require_loop() and _require_dm_target() use _require_non_zoned_device() in
them. So, moving _require_non_zoned_device() will make a dependency from
common/rc to common/zoned, which I considered not much clean. How do you
think of it?

Moving _filter_blkzone_report() would be fine, though.

> Thanks,
> Zorro
> 
> > 
> > 
> 

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

* Re: [PATCH 2/2] btrfs: test active zone tracking
  2022-09-22 16:03   ` Zorro Lang
@ 2022-09-28  3:58     ` Naohiro Aota
  0 siblings, 0 replies; 13+ messages in thread
From: Naohiro Aota @ 2022-09-28  3:58 UTC (permalink / raw)
  To: Zorro Lang; +Cc: fstests, linux-btrfs

On Fri, Sep 23, 2022 at 12:03:31AM +0800, Zorro Lang wrote:
> On Thu, Sep 22, 2022 at 02:54:59PM +0900, Naohiro Aota wrote:
> > A ZNS device limits the number of active zones, which is the number of
> > zones can be written at the same time. To deal with the limit, btrfs's
> > zoned mode tracks which zone (corresponds to a block group on the SINGLE
> > profile) is active, and finish a zone if necessary.
> > 
> > This test checks if the active zone tracking and the finishing of zones
> > works properly. First, it fills <number of max active zones> zones
> > mostly. And, run some data/metadata stress workload to force btrfs to use a
> > new zone.
> > 
> > This test fails on an older kernel (e.g, 5.18.2) like below.
> > 
> > btrfs/292
> > [failed, exit status 1]- output mismatch (see /host/btrfs/292.out.bad)
> >     --- tests/btrfs/292.out     2022-09-15 07:52:18.000000000 +0000
> >     +++ /host/btrfs/292.out.bad 2022-09-15 07:59:14.290967793 +0000
> >     @@ -1,2 +1,5 @@
> >      QA output created by 292
> >     -Silence is golden
> >     +stress_data_bgs failed
> >     +stress_data_bgs_2 failed
> >     +failed: '/bin/btrfs subvolume snapshot /mnt/scratch /mnt/scratch/snap825'
> >     +(see /host/btrfs/292.full for details)
> >     ...
> >     (Run 'diff -u /var/lib/xfstests/tests/btrfs/292.out /host/btrfs/292.out.bad'  to see the entire diff)
> > 
> > The failure is fixed with a series "btrfs: zoned: fix active zone tracking
> > issues" [1] (upstream commits from 65ea1b66482f ("block: add bdev_max_segments()
> > helper") to 2ce543f47843 ("btrfs: zoned: wait until zone is finished when
> > allocation didn't progress")).
> > 
> > [1] https://lore.kernel.org/linux-btrfs/cover.1657321126.git.naohiro.aota@wdc.com/
> > 
> > Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> > ---
> >  common/zbd          |  12 ++++
> >  tests/btrfs/292     | 137 ++++++++++++++++++++++++++++++++++++++++++++
> >  tests/btrfs/292.out |   2 +
> >  3 files changed, 151 insertions(+)
> >  create mode 100755 tests/btrfs/292
> >  create mode 100644 tests/btrfs/292.out
> > 
> > diff --git a/common/zbd b/common/zbd
> > index 329bb7be6b7b..19a59fd27e69 100644
> > --- a/common/zbd
> > +++ b/common/zbd
> > @@ -2,8 +2,20 @@
> >  # Common zoned block device specific functions
> >  #
> >  
> > +. common/rc
> 
> Did hit anything wrong if you don't import this file here? I think generally
> we don't need to import common/rc in other common files (except common/preamble)
> , due to it's always be imported at the beginning of each test cases.

Thank you for the comment. I'll check removing it affects the test.

> >  . common/filter
> 
> As I said in patch 1/2, if you'd like to create this separated common file
> about zone device, are you willing to move those extant zone related helpers
> into this file, and change related cases to turn to import this file? I don't
> have objection if you'd like to organize that.

Yeah, moving _filter_blkzone_report() would be fine and clean. I'll at
least move it to here.

> Thanks,
> Zorro
> 
> >  
> > +_require_limited_active_zones() {
> > +    local dev=$1
> > +    local sysfs=$(_sysfs_dev ${dev})
> > +    local attr="${sysfs}/queue/max_active_zones"
> > +
> > +    [ -e "${attr}" ] || _notrun "cannot find queue/max_active_zones. Maybe non-zoned device?"
> > +    if [ $(cat "${attr}") == 0 ]; then
> > +	_notrun "this test requires limited active zones"
> > +    fi
> > +}
> > +
> >  _zone_capacity() {
> >      local phy=$1
> >      local dev=$2
> > diff --git a/tests/btrfs/292 b/tests/btrfs/292
> > new file mode 100755
> > index 000000000000..30c027c4ba5f
> > --- /dev/null
> > +++ b/tests/btrfs/292
> > @@ -0,0 +1,137 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2022 Western Digital Corporation.  All Rights Reserved.
> > +#
> > +# FS QA Test 292
> > +#
> > +# Test that an active zone is properly reclaimed to allow the further
> > +# allocations, even if the active zones are mostly filled.
> > +#
> > +. ./common/preamble
> > +_begin_fstest auto quick snapshot zone
> > +
> > +# Import common functions.
> > +. ./common/btrfs
> > +. ./common/zbd
> > +
> > +# real QA test starts here
> > +
> > +_supported_fs btrfs
> > +_require_scratch
> > +_require_zoned_device "$SCRATCH_DEV"
> > +_require_limited_active_zones "$SCRATCH_DEV"
> > +
> > +_require_command "$BLKZONE_PROG" blkzone
> > +_require_fio
> > +_require_btrfs_command inspect-internal dump-tree
> > +
> > +# This test requires specific data space usage, skip if we have compression
> > +# enabled.
> > +_require_no_compress
> > +
> > +max_active=$(cat $(_sysfs_dev ${SCRATCH_DEV})/queue/max_active_zones)
> > +
> > +# Fill the zones leaving the last 1MB
> > +fill_active_zones() {
> > +    # Asuumes we have the same capacity between zones.
> > +    local capacity=$(_zone_capacity 0)
> > +    local fill_size=$((capacity - 1024 * 1024))
> > +
> > +    for x in $(seq ${max_active}); do
> > +	dd if=/dev/zero of=${SCRATCH_MNT}/fill$(printf "%02d" $x) bs=${fill_size} \
> > +	   count=1 oflag=direct 2>/dev/null
> > +	$BTRFS_UTIL_PROG filesystem sync ${SCRATCH_MNT}
> > +
> > +	local nactive=$($BLKZONE_PROG report ${SCRATCH_DEV} | grep oi | wc -l)
> > +	if [[ ${nactive} == ${max_active} ]]; then
> > +	    break
> > +	fi
> > +    done
> > +
> > +    echo "max active zones: ${max_active}" >> $seqres.full
> > +    $BLKZONE_PROG report ${SCRATCH_DEV} | grep oi | cat -n >> $seqres.full
> > +}
> > +
> > +workout() {
> > +    local func="$1"
> > +
> > +    _scratch_mkfs >/dev/null 2>&1
> > +    _scratch_mount
> > +
> > +    fill_active_zones
> > +    eval "$func"
> > +    local ret=$?
> > +
> > +    _scratch_unmount
> > +    _check_btrfs_filesystem ${SCRATCH_DEV}
> > +
> > +    return $ret
> > +}
> > +
> > +stress_data_bgs() {
> > +    # This dd fails with ENOSPC, which should not :(
> > +    dd if=/dev/zero of=${SCRATCH_MNT}/large bs=64M count=1 oflag=sync \
> > +       >>$seqres.full 2>&1
> > +}
> > +
> > +stress_data_bgs_2() {
> > +    # This dd fails with ENOSPC, which should not :(
> > +    dd if=/dev/zero of=${SCRATCH_MNT}/large bs=64M count=10 conv=fsync \
> > +       >>$seqres.full 2>&1 &
> > +    local pid1=$!
> > +
> > +    dd if=/dev/zero of=${SCRATCH_MNT}/large2 bs=64M count=10 conv=fsync \
> > +       >>$seqres.full 2>&1 &
> > +    local pid2=$!
> > +
> > +    wait $pid1; local ret1=$?
> > +    wait $pid2; local ret2=$?
> > +
> > +    if [ $ret1 -ne 0 -o $ret2 -ne 0 ]; then
> > +	return 1
> > +    fi
> > +    return 0
> > +}
> > +
> > +get_meta_bgs() {
> > +    $BTRFS_UTIL_PROG inspect-internal dump-tree -t EXTENT ${SCRATCH_DEV} |
> > +        grep BLOCK_GROUP -A 1 |grep -B1 'METADATA|' |
> > +        grep -oP '\(\d+ BLOCK_GROUP_ITEM \d+\)'
> > +}
> > +
> > +# This test case does not return the result because
> > +# _run_btrfs_util_prog will call _fail() in the error case anyway.
> > +stress_metadata_bgs() {
> > +    local metabgs=$(get_meta_bgs)
> > +    local count=0
> > +
> > +    while : ; do
> > +        _run_btrfs_util_prog subvolume snapshot ${SCRATCH_MNT} ${SCRATCH_MNT}/snap$i
> > +        _run_btrfs_util_prog filesystem sync ${SCRATCH_MNT}
> > +        cur_metabgs=$(get_meta_bgs)
> > +        if [[ "${cur_metabgs}" != "${metabgs}" ]]; then
> > +            break
> > +        fi
> > +        i=$((i + 1))
> > +    done
> > +}
> > +
> > +WORKS=(
> > +    stress_data_bgs
> > +    stress_data_bgs_2
> > +    stress_metadata_bgs
> > +)
> > +
> > +status=0
> > +for work in "${WORKS[@]}"; do
> > +    if ! workout "${work}"; then
> > +	echo "${work} failed"
> > +	status=1
> > +    fi
> > +done
> > +
> > +# success, all done
> > +if [ $status -eq 0 ]; then
> > +    echo "Silence is golden"
> > +fi
> > +exit
> > diff --git a/tests/btrfs/292.out b/tests/btrfs/292.out
> > new file mode 100644
> > index 000000000000..627309d3fbd2
> > --- /dev/null
> > +++ b/tests/btrfs/292.out
> > @@ -0,0 +1,2 @@
> > +QA output created by 292
> > +Silence is golden
> > -- 
> > 2.37.3
> > 
> 

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

* Re: [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-28  3:57         ` Naohiro Aota
@ 2022-09-28  5:47           ` Zorro Lang
  2022-09-28 15:32             ` Darrick J. Wong
  0 siblings, 1 reply; 13+ messages in thread
From: Zorro Lang @ 2022-09-28  5:47 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: Johannes Thumshirn, fstests, linux-btrfs

On Wed, Sep 28, 2022 at 03:57:08AM +0000, Naohiro Aota wrote:
> On Fri, Sep 23, 2022 at 07:51:26PM +0800, Zorro Lang wrote:
> > On Fri, Sep 23, 2022 at 08:02:10AM +0000, Johannes Thumshirn wrote:
> > > On 22.09.22 17:42, Zorro Lang wrote:
> > > >> --- /dev/null
> > > >> +++ b/common/zbd
> > > > I don't like this abbreviation :-P If others don't open this file and read the
> > > > comment in it, they nearly no chance to guess what's this file for.
> > > > 
> > > 
> > > zbd is a well known abbreviation for zoned block devices. I think most
> > > people in storage and filesystems know it.
> > 
> > OK, but we haven't been that "a single character is worth a thousand
> > pieces of gold", so we can use a longer name, likes common/zone,
> > common/zoned, common/zoned_block, common/zoned_device or something likes
> > that. Anyway, that's just my personal opinion, if most of people prefer
> > using "common/zbd", I'm fine to have that :) 
> 
> Sure. I'll use "zoned" as it is more common in the kernel code.
> 
> > But I hope you can move all zoned block device related helpers to the new
> > common file if you'd like to bring in this file, likes what Darrick did in:
> > 
> > commit 67afd5c742464607994316acb2c6e8303b8af4c5
> > Author: Darrick J. Wong <djwong@kernel.org>
> > Date:   Tue Aug 9 14:00:46 2022 -0700
> > 
> >     common/rc: move ext4-specific helpers into a separate common/ext4 file
> 
> Yes, that will be better to have things in common/zoned. I considered
> moving zoned functions (_zone_type, _require_{,non_}zoned_device), but
> _require_loop() and _require_dm_target() use _require_non_zoned_device() in
> them. So, moving _require_non_zoned_device() will make a dependency from
> common/rc to common/zoned, which I considered not much clean. How do you
> think of it?

Oh, below commit [1] brought in the coupling of common/rc and zoned helpers.
Hmm... that cause all the 3 helpers (_zone_type, _require_{,non_}zoned_device)
have to be in common/rc or be imported in common/rc. Looks like we have to
keep them in common/rc, except we make a bigger refactor to common/rc, or you'd
like to make your 2 new helpers in common/rc too (likes these 3 old ones:)

BTW I doubt if we might need to use more zoned related helpers in common/rc, due
to we deal with test devices in common/rc mostly, likes dax. Someone might want
a seperated common/dax or common/pmem file one day. The common/rc imports
specific fs helpers according to $FSTYP (common/config: _source_specific_fs()).
If we need to deal with different kind of device types in common/rc one day, is
there a better idea to determine which one should be imported? Welcome any
suggestions if anyone has :)

[1]
commit 952310a57d9323ae0bb174b50be93107a8895e0c
Author: Naohiro Aota <naohiro.aota@wdc.com>
Date:   Mon Aug 16 20:35:08 2021 +0900

    common: add zoned block device checks

> 
> Moving _filter_blkzone_report() would be fine, though.

Yeah, moving this is fine.

Thanks,
Zorro

> 
> > Thanks,
> > Zorro
> > 
> > > 
> > > 
> > 
> 


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

* Re: [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-28  5:47           ` Zorro Lang
@ 2022-09-28 15:32             ` Darrick J. Wong
  2022-09-29  2:40               ` Naohiro Aota
  0 siblings, 1 reply; 13+ messages in thread
From: Darrick J. Wong @ 2022-09-28 15:32 UTC (permalink / raw)
  To: Zorro Lang; +Cc: Naohiro Aota, Johannes Thumshirn, fstests, linux-btrfs

On Wed, Sep 28, 2022 at 01:47:15PM +0800, Zorro Lang wrote:
> On Wed, Sep 28, 2022 at 03:57:08AM +0000, Naohiro Aota wrote:
> > On Fri, Sep 23, 2022 at 07:51:26PM +0800, Zorro Lang wrote:
> > > On Fri, Sep 23, 2022 at 08:02:10AM +0000, Johannes Thumshirn wrote:
> > > > On 22.09.22 17:42, Zorro Lang wrote:
> > > > >> --- /dev/null
> > > > >> +++ b/common/zbd
> > > > > I don't like this abbreviation :-P If others don't open this file and read the
> > > > > comment in it, they nearly no chance to guess what's this file for.
> > > > > 
> > > > 
> > > > zbd is a well known abbreviation for zoned block devices. I think most
> > > > people in storage and filesystems know it.
> > > 
> > > OK, but we haven't been that "a single character is worth a thousand
> > > pieces of gold", so we can use a longer name, likes common/zone,
> > > common/zoned, common/zoned_block, common/zoned_device or something likes
> > > that. Anyway, that's just my personal opinion, if most of people prefer
> > > using "common/zbd", I'm fine to have that :) 
> > 
> > Sure. I'll use "zoned" as it is more common in the kernel code.
> > 
> > > But I hope you can move all zoned block device related helpers to the new
> > > common file if you'd like to bring in this file, likes what Darrick did in:
> > > 
> > > commit 67afd5c742464607994316acb2c6e8303b8af4c5
> > > Author: Darrick J. Wong <djwong@kernel.org>
> > > Date:   Tue Aug 9 14:00:46 2022 -0700
> > > 
> > >     common/rc: move ext4-specific helpers into a separate common/ext4 file
> > 
> > Yes, that will be better to have things in common/zoned. I considered
> > moving zoned functions (_zone_type, _require_{,non_}zoned_device), but
> > _require_loop() and _require_dm_target() use _require_non_zoned_device() in
> > them. So, moving _require_non_zoned_device() will make a dependency from
> > common/rc to common/zoned, which I considered not much clean. How do you
> > think of it?
> 
> Oh, below commit [1] brought in the coupling of common/rc and zoned helpers.
> Hmm... that cause all the 3 helpers (_zone_type, _require_{,non_}zoned_device)
> have to be in common/rc or be imported in common/rc. Looks like we have to
> keep them in common/rc, except we make a bigger refactor to common/rc, or you'd
> like to make your 2 new helpers in common/rc too (likes these 3 old ones:)
> 
> BTW I doubt if we might need to use more zoned related helpers in common/rc, due
> to we deal with test devices in common/rc mostly, likes dax. Someone might want
> a seperated common/dax or common/pmem file one day. The common/rc imports
> specific fs helpers according to $FSTYP (common/config: _source_specific_fs()).
> If we need to deal with different kind of device types in common/rc one day, is
> there a better idea to determine which one should be imported? Welcome any
> suggestions if anyone has :)

Leave those three in common/rc and put/move the rest to common/zoned ?

I think it's fine for common/rc to have helpers that *detect* the
presence of a blockdev feature, and require tests to source
common/$feature if they want to do anything clever with that feature.
After all, the _require_non_zoned_device tests don't care about
_zone_capacity, right?

--D

> [1]
> commit 952310a57d9323ae0bb174b50be93107a8895e0c
> Author: Naohiro Aota <naohiro.aota@wdc.com>
> Date:   Mon Aug 16 20:35:08 2021 +0900
> 
>     common: add zoned block device checks
> 
> > 
> > Moving _filter_blkzone_report() would be fine, though.
> 
> Yeah, moving this is fine.
> 
> Thanks,
> Zorro
> 
> > 
> > > Thanks,
> > > Zorro
> > > 
> > > > 
> > > > 
> > > 
> > 
> 

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

* Re: [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity
  2022-09-28 15:32             ` Darrick J. Wong
@ 2022-09-29  2:40               ` Naohiro Aota
  0 siblings, 0 replies; 13+ messages in thread
From: Naohiro Aota @ 2022-09-29  2:40 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: Zorro Lang, Johannes Thumshirn, fstests, linux-btrfs

On Wed, Sep 28, 2022 at 08:32:47AM -0700, Darrick J. Wong wrote:
> On Wed, Sep 28, 2022 at 01:47:15PM +0800, Zorro Lang wrote:
> > On Wed, Sep 28, 2022 at 03:57:08AM +0000, Naohiro Aota wrote:
> > > On Fri, Sep 23, 2022 at 07:51:26PM +0800, Zorro Lang wrote:
> > > > On Fri, Sep 23, 2022 at 08:02:10AM +0000, Johannes Thumshirn wrote:
> > > > > On 22.09.22 17:42, Zorro Lang wrote:
> > > > > >> --- /dev/null
> > > > > >> +++ b/common/zbd
> > > > > > I don't like this abbreviation :-P If others don't open this file and read the
> > > > > > comment in it, they nearly no chance to guess what's this file for.
> > > > > > 
> > > > > 
> > > > > zbd is a well known abbreviation for zoned block devices. I think most
> > > > > people in storage and filesystems know it.
> > > > 
> > > > OK, but we haven't been that "a single character is worth a thousand
> > > > pieces of gold", so we can use a longer name, likes common/zone,
> > > > common/zoned, common/zoned_block, common/zoned_device or something likes
> > > > that. Anyway, that's just my personal opinion, if most of people prefer
> > > > using "common/zbd", I'm fine to have that :) 
> > > 
> > > Sure. I'll use "zoned" as it is more common in the kernel code.
> > > 
> > > > But I hope you can move all zoned block device related helpers to the new
> > > > common file if you'd like to bring in this file, likes what Darrick did in:
> > > > 
> > > > commit 67afd5c742464607994316acb2c6e8303b8af4c5
> > > > Author: Darrick J. Wong <djwong@kernel.org>
> > > > Date:   Tue Aug 9 14:00:46 2022 -0700
> > > > 
> > > >     common/rc: move ext4-specific helpers into a separate common/ext4 file
> > > 
> > > Yes, that will be better to have things in common/zoned. I considered
> > > moving zoned functions (_zone_type, _require_{,non_}zoned_device), but
> > > _require_loop() and _require_dm_target() use _require_non_zoned_device() in
> > > them. So, moving _require_non_zoned_device() will make a dependency from
> > > common/rc to common/zoned, which I considered not much clean. How do you
> > > think of it?
> > 
> > Oh, below commit [1] brought in the coupling of common/rc and zoned helpers.
> > Hmm... that cause all the 3 helpers (_zone_type, _require_{,non_}zoned_device)
> > have to be in common/rc or be imported in common/rc. Looks like we have to
> > keep them in common/rc, except we make a bigger refactor to common/rc, or you'd
> > like to make your 2 new helpers in common/rc too (likes these 3 old ones:)
> > 
> > BTW I doubt if we might need to use more zoned related helpers in common/rc, due
> > to we deal with test devices in common/rc mostly, likes dax. Someone might want
> > a seperated common/dax or common/pmem file one day. The common/rc imports
> > specific fs helpers according to $FSTYP (common/config: _source_specific_fs()).
> > If we need to deal with different kind of device types in common/rc one day, is
> > there a better idea to determine which one should be imported? Welcome any
> > suggestions if anyone has :)
> 
> Leave those three in common/rc and put/move the rest to common/zoned ?
> 
> I think it's fine for common/rc to have helpers that *detect* the
> presence of a blockdev feature, and require tests to source
> common/$feature if they want to do anything clever with that feature.
> After all, the _require_non_zoned_device tests don't care about
> _zone_capacity, right?

Thank you for your suggestions. Yes, _require_non_zoned_device() just read
/sys/block/${sdev}/queue/zoned. I'll do so to leave the three functions in
common/rc and move/create other helpers in common/zoned.

Thanks,

> --D
> 
> > [1]
> > commit 952310a57d9323ae0bb174b50be93107a8895e0c
> > Author: Naohiro Aota <naohiro.aota@wdc.com>
> > Date:   Mon Aug 16 20:35:08 2021 +0900
> > 
> >     common: add zoned block device checks
> > 
> > > 
> > > Moving _filter_blkzone_report() would be fine, though.
> > 
> > Yeah, moving this is fine.
> > 
> > Thanks,
> > Zorro
> > 
> > > 
> > > > Thanks,
> > > > Zorro
> > > > 
> > > > > 
> > > > > 
> > > > 
> > > 
> > 

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

end of thread, other threads:[~2022-09-29  2:41 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-22  5:54 [PATCH 0/2] btrfs: test active zone tracking Naohiro Aota
2022-09-22  5:54 ` [PATCH 1/2] common: introduce zone_capacity() to return a zone capacity Naohiro Aota
2022-09-22 15:41   ` Zorro Lang
2022-09-23  8:02     ` Johannes Thumshirn
2022-09-23 11:51       ` Zorro Lang
2022-09-28  3:57         ` Naohiro Aota
2022-09-28  5:47           ` Zorro Lang
2022-09-28 15:32             ` Darrick J. Wong
2022-09-29  2:40               ` Naohiro Aota
2022-09-22  5:54 ` [PATCH 2/2] btrfs: test active zone tracking Naohiro Aota
2022-09-22 16:03   ` Zorro Lang
2022-09-28  3:58     ` Naohiro Aota
2022-09-22 12:18 ` [PATCH 0/2] " Johannes Thumshirn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).