Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: Naohiro Aota <naohiro.aota@wdc.com>, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v2 7/8] btrfs-progs: add test for zone resetting
Date: Wed, 15 May 2024 08:34:57 +0930	[thread overview]
Message-ID: <65db4776-b74f-48f0-ab7f-b33f56e1c00c@gmx.com> (raw)
In-Reply-To: <20240514182227.1197664-8-naohiro.aota@wdc.com>



在 2024/5/15 03:52, Naohiro Aota 写道:
> Add test for mkfs.btrfs's zone reset behavior to check if
>
> - it resets all the zones without "-b" option
> - it detects an active zone outside of the FS range
> - it do not reset a zone outside of the range
>
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>   tests/mkfs-tests/032-zoned-reset/test.sh | 62 ++++++++++++++++++++++++
>   1 file changed, 62 insertions(+)
>   create mode 100755 tests/mkfs-tests/032-zoned-reset/test.sh
>
> diff --git a/tests/mkfs-tests/032-zoned-reset/test.sh b/tests/mkfs-tests/032-zoned-reset/test.sh
> new file mode 100755
> index 000000000000..6a599dd2874f
> --- /dev/null
> +++ b/tests/mkfs-tests/032-zoned-reset/test.sh
> @@ -0,0 +1,62 @@
> +#!/bin/bash
> +# Verify mkfs for zoned devices support block-group-tree feature
> +
> +source "$TEST_TOP/common" || exit
> +
> +setup_root_helper
> +prepare_test_dev
> +
> +nullb="$TEST_TOP/nullb"
> +# Create one 128M device with 4M zones, 32 of them
> +size=128
> +zone=4
> +
> +run_mayfail $SUDO_HELPER "$nullb" setup
> +if [ $? != 0 ]; then
> +	_not_run "cannot setup nullb environment for zoned devices"
> +fi
> +
> +# Record any other pre-existing devices in case creation fails
> +run_check $SUDO_HELPER "$nullb" ls
> +
> +# Last line has the name of the device node path
> +out=$(run_check_stdout $SUDO_HELPER "$nullb" create -s "$size" -z "$zone")
> +if [ $? != 0 ]; then
> +	_fail "cannot create nullb zoned device $i"
> +fi
> +dev=$(echo "$out" | tail -n 1)
> +name=$(basename "${dev}")

Can we wrap all the zoned devices setup in a common function?

I believe zoned tests would only increase in the future.

> +
> +run_check $SUDO_HELPER "$nullb" ls
> +
> +TEST_DEV="${dev}"
> +last_zone_sector=$(( 4 * 31 * 1024 * 1024 / 512 ))
> +# Write some data to the last zone
> +run_check $SUDO_HELPER dd if=/dev/urandom of="${dev}" bs=1M count=4 seek=$(( 4 * 31 ))
> +# Use single as it's supported on more kernels
> +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f -m single -d single "${dev}"
> +# Check if the lat zone is empty
> +$SUDO_HELPER blkzone report -o ${last_zone_sector} -c 1 "${dev}" | grep -Fq '(em)'

You may want to use `run_check_stdout`, as that would dump the command
and its output into the log for easier debug.

And since the test is relying on external program `blkzone` you may want
to put all those requirement into a zoned specific helper like
`check_zoned_preqreq()`.

Thanks,
Qu

> +if [ $? != 0 ]; then
> +	_fail "last zone is not empty"
> +fi
> +
> +# Write some data to the last zone
> +run_check $SUDO_HELPER dd if=/dev/urandom of="${dev}" bs=1M count=1 seek=$(( 4 * 31 ))
> +# Create a FS excluding the last zone
> +run_mayfail $SUDO_HELPER "$TOP/mkfs.btrfs" -f -b $(( 4 * 31 ))M -m single -d single "${dev}"
> +if [ $? == 0 ]; then
> +	_fail "mkfs.btrfs should detect active zone outside of FS range"
> +fi
> +
> +# Fill the last zone to finish it
> +run_check $SUDO_HELPER dd if=/dev/urandom of="${dev}" bs=1M count=3 seek=$(( 4 * 31 + 1 ))
> +# Create a FS excluding the last zone
> +run_mayfail $SUDO_HELPER "$TOP/mkfs.btrfs" -f -b $(( 4 * 31 ))M -m single -d single "${dev}"
> +# Check if the lat zone is not empty
> +$SUDO_HELPER blkzone report -o ${last_zone_sector} -c 1 "${dev}" | grep -Fq '(em)'
> +if [ $? == 0 ]; then
> +	_fail "last zone is empty"
> +fi
> +
> +run_check $SUDO_HELPER "$nullb" rm "${name}"

  reply	other threads:[~2024-05-14 23:05 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-14 18:22 [PATCH v2 0/8] btrfs-progs: zoned: proper "mkfs.btrfs -b" support Naohiro Aota
2024-05-14 18:22 ` [PATCH v2 1/8] btrfs-progs: rename block_count to byte_count Naohiro Aota
2024-05-14 18:22 ` [PATCH v2 2/8] btrfs-progs: mkfs: remove duplicated device size check Naohiro Aota
2024-05-14 18:22 ` [PATCH v2 3/8] btrfs-progs: mkfs: unify zoned mode minimum size calc into btrfs_min_dev_size() Naohiro Aota
2024-05-14 18:22 ` [PATCH v2 4/8] btrfs-progs: mkfs: fix minimum size calculation for zoned mode Naohiro Aota
2024-05-14 22:54   ` Qu Wenruo
2024-05-15 16:25     ` Naohiro Aota
2024-05-14 18:22 ` [PATCH v2 5/8] btrfs-progs: mkfs: check if byte_count is zone size aligned Naohiro Aota
2024-05-14 22:56   ` Qu Wenruo
2024-05-15 15:43     ` Naohiro Aota
2024-05-14 18:22 ` [PATCH v2 6/8] btrfs-progs: support byte length for zone resetting Naohiro Aota
2024-05-14 22:59   ` Qu Wenruo
2024-05-15 16:11     ` Naohiro Aota
2024-05-15 21:47       ` Qu Wenruo
2024-05-14 18:22 ` [PATCH v2 7/8] btrfs-progs: add test " Naohiro Aota
2024-05-14 23:04   ` Qu Wenruo [this message]
2024-05-15 16:14     ` Naohiro Aota
2024-05-14 18:22 ` [PATCH v2 8/8] btrfs-progs: test: use smaller emulated zone size Naohiro Aota

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=65db4776-b74f-48f0-ab7f-b33f56e1c00c@gmx.com \
    --to=quwenruo.btrfs@gmx.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=naohiro.aota@wdc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox