From: Anand Jain <anand.jain@oracle.com>
To: Qu Wenruo <wqu@suse.com>, fstests@vger.kernel.org
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v3] fstests: btrfs: make nospace_cache related test cases to work with latest v2 cache
Date: Wed, 10 Nov 2021 17:51:29 +0800 [thread overview]
Message-ID: <e28598a3-3756-6917-c52b-db0542da4fe1@oracle.com> (raw)
In-Reply-To: <20211110093417.47185-1-wqu@suse.com>
On 10/11/21 5:34 pm, Qu Wenruo wrote:
> In the coming btrfs-progs v5.15 release, mkfs.btrfs will change to use
> v2 cache by default.
>
> However nospace_cache mount option will not work with v2 cache, as it
> would make v2 cache out of sync with on-disk used space.
>
> So mounting a btrfs with v2 cache using "nospace_cache" will make btrfs
> to reject the mount.
>
> There are quite some test cases relying on nospace_cache to prevent v1
> cache to take up data space.
>
> For those test cases, we no longer need the "nospace_cache" mount option
> if the filesystem is already using v2 cache.
> Since v2 cache is using metadata space, it will no longer take up data
> space, thus no extra mount options for those test cases.
>
> By this, we can keep those existing tests to run without problem for
> both v1 and v2 cache.
>
> Signed-off-by: Qu Wenruo <wqu@suse.com> > ---
> Changelog:
> v2:
> - Add _scratch_no_v1_cache_opt() function
> v3:
> - Add _require_btrfs_command for _scratch_no_v1_cache_opt()
Looks good.
Reviewed-by: Anand Jain <anand.jain@oracle.com>
> ---
> common/btrfs | 11 +++++++++++
> tests/btrfs/102 | 2 +-
> tests/btrfs/140 | 5 ++---
> tests/btrfs/141 | 5 ++---
> tests/btrfs/142 | 5 ++---
> tests/btrfs/143 | 5 ++---
> tests/btrfs/151 | 4 ++--
> tests/btrfs/157 | 7 +++----
> tests/btrfs/158 | 7 +++----
> tests/btrfs/170 | 4 ++--
> tests/btrfs/199 | 4 ++--
> tests/btrfs/215 | 2 +-
> 12 files changed, 33 insertions(+), 28 deletions(-)
>
> diff --git a/common/btrfs b/common/btrfs
> index ac880bdd..e21c452c 100644
> --- a/common/btrfs
> +++ b/common/btrfs
> @@ -445,3 +445,14 @@ _scratch_btrfs_is_zoned()
> [ `_zone_type ${SCRATCH_DEV}` != "none" ] && return 0
> return 1
> }
> +
> +_scratch_no_v1_cache_opt()
> +{
> + _require_btrfs_command inspect-internal dump-tree
> +
> + if $BTRFS_UTIL_PROG inspect-internal dump-tree $SCRATCH_DEV |\
> + grep -q "FREE_SPACE_TREE"; then
> + return
> + fi
> + echo -n "-onospace_cache"
> +}
> diff --git a/tests/btrfs/102 b/tests/btrfs/102
> index e5a1b068..c1678b5d 100755
> --- a/tests/btrfs/102
> +++ b/tests/btrfs/102
> @@ -22,7 +22,7 @@ _scratch_mkfs >>$seqres.full 2>&1
> # Mount our filesystem without space caches enabled so that we do not get any
> # space used from the initial data block group that mkfs creates (space caches
> # used space from data block groups).
> -_scratch_mount "-o nospace_cache"
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> # Need an fs with at least 2Gb to make sure mkfs.btrfs does not create an fs
> # using mixed block groups (used both for data and metadata). We really need
> diff --git a/tests/btrfs/140 b/tests/btrfs/140
> index 5a5f828c..77d1cab9 100755
> --- a/tests/btrfs/140
> +++ b/tests/btrfs/140
> @@ -60,9 +60,8 @@ echo "step 1......mkfs.btrfs" >>$seqres.full
> mkfs_opts="-d raid1 -b 1G"
> _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
>
> -# -o nospace_cache makes sure data is written to the start position of the data
> -# chunk
> -_scratch_mount -o nospace_cache
> +# makes sure data is written to the start position of the data chunk
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
> _filter_xfs_io_offset
> diff --git a/tests/btrfs/141 b/tests/btrfs/141
> index cf0979e9..9bde0977 100755
> --- a/tests/btrfs/141
> +++ b/tests/btrfs/141
> @@ -59,9 +59,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
> mkfs_opts="-d raid1 -b 1G"
> _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
>
> -# -o nospace_cache makes sure data is written to the start position of the data
> -# chunk
> -_scratch_mount -o nospace_cache
> +# make sure data is written to the start position of the data chunk
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
> _filter_xfs_io_offset
> diff --git a/tests/btrfs/142 b/tests/btrfs/142
> index 1318be0f..ffe298d6 100755
> --- a/tests/btrfs/142
> +++ b/tests/btrfs/142
> @@ -37,9 +37,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
> mkfs_opts="-d raid1 -b 1G"
> _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
>
> -# -o nospace_cache makes sure data is written to the start position of the data
> -# chunk
> -_scratch_mount -o nospace_cache,nodatasum
> +# make sure data is written to the start position of the data chunk
> +_scratch_mount -o nodatasum $(_scratch_no_v1_cache_opt)
>
> $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
> _filter_xfs_io_offset
> diff --git a/tests/btrfs/143 b/tests/btrfs/143
> index 6736dcad..1f55cded 100755
> --- a/tests/btrfs/143
> +++ b/tests/btrfs/143
> @@ -44,9 +44,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
> mkfs_opts="-d raid1 -b 1G"
> _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
>
> -# -o nospace_cache makes sure data is written to the start position of the data
> -# chunk
> -_scratch_mount -o nospace_cache,nodatasum
> +# make sure data is written to the start position of the data chunk
> +_scratch_mount -o nodatasum $(_scratch_no_v1_cache_opt)
>
> $XFS_IO_PROG -f -d -c "pwrite -S 0xaa -b 128K 0 128K" "$SCRATCH_MNT/foobar" |\
> _filter_xfs_io_offset
> diff --git a/tests/btrfs/151 b/tests/btrfs/151
> index 099e85cc..b343271f 100755
> --- a/tests/btrfs/151
> +++ b/tests/btrfs/151
> @@ -31,8 +31,8 @@ _scratch_dev_pool_get 3
> # create raid1 for data
> _scratch_pool_mkfs "-d raid1 -b 1G" >> $seqres.full 2>&1
>
> -# we need an empty data chunk, so nospace_cache is required.
> -_scratch_mount -onospace_cache
> +# we need an empty data chunk, so need to disable v1 cache
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> # if data chunk is empty, 'btrfs device remove' can change raid1 to
> # single.
> diff --git a/tests/btrfs/157 b/tests/btrfs/157
> index 0cfe3ce5..e779e33a 100755
> --- a/tests/btrfs/157
> +++ b/tests/btrfs/157
> @@ -64,9 +64,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
> mkfs_opts="-d raid6 -b 1G"
> _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
>
> -# -o nospace_cache makes sure data is written to the start position of the data
> -# chunk
> -_scratch_mount -o nospace_cache
> +# make sure data is written to the start position of the data chunk
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> # [0,64K) is written to stripe 0 and [64K, 128K) is written to stripe 1
> $XFS_IO_PROG -f -d -c "pwrite -S 0xaa 0 128K" -c "fsync" \
> @@ -94,7 +93,7 @@ $XFS_IO_PROG -f -d -c "pwrite -S 0xbb $phy1 64K" $devpath1 > /dev/null
>
> # step 3: read foobar to repair the bitrot
> echo "step 3......repair the bitrot" >> $seqres.full
> -_scratch_mount -o nospace_cache
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> # read the 2nd stripe, i.e. [64K, 128K), to trigger repair
> od -x -j 64K $SCRATCH_MNT/foobar
> diff --git a/tests/btrfs/158 b/tests/btrfs/158
> index ad374eba..52d67001 100755
> --- a/tests/btrfs/158
> +++ b/tests/btrfs/158
> @@ -56,9 +56,8 @@ _check_minimal_fs_size $(( 1024 * 1024 * 1024 ))
> mkfs_opts="-d raid6 -b 1G"
> _scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
>
> -# -o nospace_cache makes sure data is written to the start position of the data
> -# chunk
> -_scratch_mount -o nospace_cache
> +# make sure data is written to the start position of the data chunk
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> # [0,64K) is written to stripe 0 and [64K, 128K) is written to stripe 1
> $XFS_IO_PROG -f -d -c "pwrite -S 0xaa 0 128K" -c "fsync" \
> @@ -85,7 +84,7 @@ $XFS_IO_PROG -f -d -c "pwrite -S 0xbb $phy1 64K" $devpath1 > /dev/null
>
> # step 3: scrub filesystem to repair the bitrot
> echo "step 3......repair the bitrot" >> $seqres.full
> -_scratch_mount -o nospace_cache
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> $BTRFS_UTIL_PROG scrub start -B $SCRATCH_MNT >> $seqres.full 2>&1
>
> diff --git a/tests/btrfs/170 b/tests/btrfs/170
> index 15382eb3..3efe085d 100755
> --- a/tests/btrfs/170
> +++ b/tests/btrfs/170
> @@ -27,9 +27,9 @@ _require_xfs_io_command "falloc" "-k"
> fs_size=$((2 * 1024 * 1024 * 1024)) # 2Gb
> _scratch_mkfs_sized $fs_size >>$seqres.full 2>&1
>
> -# Mount without space cache so that we can precisely fill all data space and
> +# Mount without v1 cache so that we can precisely fill all data space and
> # unallocated space later (space cache v1 uses data block groups).
> -_scratch_mount "-o nospace_cache"
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> # Create our test file and allocate 1826.25Mb of space for it.
> # This will exhaust the existing data block group and all unallocated space on
> diff --git a/tests/btrfs/199 b/tests/btrfs/199
> index 6aca62f4..7fa678e7 100755
> --- a/tests/btrfs/199
> +++ b/tests/btrfs/199
> @@ -67,7 +67,7 @@ loop_dev=$(_create_loop_device "$loop_file")
> loop_mnt=$tmp/loop_mnt
>
> mkdir -p $loop_mnt
> -# - nospace_cache
> +# - _scratch_no_v1_cache_opt
> # Since v1 cache using DATA space, it can break data extent bytenr
> # continuousness.
> # - nodatasum
> @@ -75,7 +75,7 @@ mkdir -p $loop_mnt
> # Disabling datasum could reduce the margin caused by metadata to minimal
> # - discard
> # What we're testing
> -_mount -o nospace_cache,nodatasum,discard $loop_dev $loop_mnt
> +_mount -o nodatasum,discard $(_scratch_no_v1_cache_opt) $loop_dev $loop_mnt
>
> # Craft the following extent layout:
> # | BG1 | BG2 | BG3 |
> diff --git a/tests/btrfs/215 b/tests/btrfs/215
> index fa622568..d62b2ff6 100755
> --- a/tests/btrfs/215
> +++ b/tests/btrfs/215
> @@ -30,7 +30,7 @@ _require_non_zoned_device $SCRATCH_DEV
> _scratch_mkfs > /dev/null
> # disable freespace inode to ensure file is the first thing in the data
> # blobk group
> -_scratch_mount -o nospace_cache
> +_scratch_mount $(_scratch_no_v1_cache_opt)
>
> pagesize=$(get_page_size)
> blocksize=$(_get_block_size $SCRATCH_MNT)
>
next prev parent reply other threads:[~2021-11-10 9:51 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-10 9:34 [PATCH v3] fstests: btrfs: make nospace_cache related test cases to work with latest v2 cache Qu Wenruo
2021-11-10 9:51 ` Anand Jain [this message]
2021-11-10 10:48 ` Eryu Guan
2021-11-10 10:52 ` Qu Wenruo
2021-11-10 11:01 ` Eryu Guan
2021-11-10 12:13 ` Qu Wenruo
2021-11-14 12:11 ` Eryu Guan
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=e28598a3-3756-6917-c52b-db0542da4fe1@oracle.com \
--to=anand.jain@oracle.com \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=wqu@suse.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