fstests.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] fstests: btrfs seed device device operation tests
       [not found] <cover.1599234146.git.anand.jain@oracle.com>
@ 2020-09-04 23:25 ` Anand Jain
  2020-09-04 23:25   ` [PATCH v2 1/2] btrfs: add a test case for btrfs seed device delete Anand Jain
  2020-09-04 23:25   ` [PATCH 2/2] btrfs/163: replace sprout instead of seed Anand Jain
  0 siblings, 2 replies; 7+ messages in thread
From: Anand Jain @ 2020-09-04 23:25 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, dsterba

Tests and updates seed device operations test cases.

Anand Jain (2):
  btrfs: add a test case for btrfs seed device delete
  btrfs/163: replace sprout instead of seed

 tests/btrfs/163     | 21 +++++++++---
 tests/btrfs/163.out |  5 ++-
 tests/btrfs/219     | 83 +++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/219.out | 15 ++++++++
 tests/btrfs/group   |  1 +
 5 files changed, 119 insertions(+), 6 deletions(-)
 create mode 100755 tests/btrfs/219
 create mode 100644 tests/btrfs/219.out

-- 
2.25.1


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

* [PATCH v2 1/2] btrfs: add a test case for btrfs seed device delete
  2020-09-04 23:25 ` [PATCH v2 0/2] fstests: btrfs seed device device operation tests Anand Jain
@ 2020-09-04 23:25   ` Anand Jain
  2020-10-15 15:45     ` Filipe Manana
  2020-09-04 23:25   ` [PATCH 2/2] btrfs/163: replace sprout instead of seed Anand Jain
  1 sibling, 1 reply; 7+ messages in thread
From: Anand Jain @ 2020-09-04 23:25 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, dsterba

This is a regression test for the issue fixed by the kernel patch
   btrfs: fix put of uninitialized kobject after seed device delete

In this test case, we verify the seed device delete on a sprouted
filesystem.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
v2 drop the sysfs layout check as it breaks the test-case backward
compatibility.

 tests/btrfs/219     | 83 +++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/219.out | 15 ++++++++
 tests/btrfs/group   |  1 +
 3 files changed, 99 insertions(+)
 create mode 100755 tests/btrfs/219
 create mode 100644 tests/btrfs/219.out

diff --git a/tests/btrfs/219 b/tests/btrfs/219
new file mode 100755
index 000000000000..86f2a6991bd7
--- /dev/null
+++ b/tests/btrfs/219
@@ -0,0 +1,83 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Oracle. All Rights Reserved.
+#
+# FS QA Test 219
+#
+# Test for seed device-delete on a sprouted FS.
+# Requires kernel patch
+#    btrfs: fix put of uninitialized kobject after seed device delete
+#
+# Steps:
+#  Create a seed FS. Add a RW device to make it sprout FS and then delete
+#  the seed device.
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+
+# Modify as appropriate.
+_supported_fs generic
+_supported_os Linux
+_require_test
+_require_scratch_dev_pool 2
+
+_scratch_dev_pool_get 2
+
+seed=$(echo $SCRATCH_DEV_POOL | awk '{print $1}')
+sprout=$(echo $SCRATCH_DEV_POOL | awk '{print $2}')
+
+_mkfs_dev $seed
+_mount $seed $SCRATCH_MNT
+
+$XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 1M" $SCRATCH_MNT/foo > /dev/null
+_scratch_unmount
+$BTRFS_TUNE_PROG -S 1 $seed
+
+# Mount the seed device and add the rw device
+_mount -o ro $seed $SCRATCH_MNT
+$BTRFS_UTIL_PROG device add -f $sprout $SCRATCH_MNT
+_scratch_unmount
+
+# Now remount
+_mount $sprout $SCRATCH_MNT
+$XFS_IO_PROG -f -d -c "pwrite -S 0xcd 0 1M" $SCRATCH_MNT/bar > /dev/null
+
+echo --- before delete ----
+od -x $SCRATCH_MNT/foo
+od -x $SCRATCH_MNT/bar
+
+$BTRFS_UTIL_PROG device delete $seed $SCRATCH_MNT
+_scratch_unmount
+_btrfs_forget_or_module_reload
+_mount $sprout $SCRATCH_MNT
+
+echo --- after delete ----
+od -x $SCRATCH_MNT/foo
+od -x $SCRATCH_MNT/bar
+
+_scratch_dev_pool_put
+
+# success, all done
+status=0
+exit
diff --git a/tests/btrfs/219.out b/tests/btrfs/219.out
new file mode 100644
index 000000000000..d39e0d8ffafd
--- /dev/null
+++ b/tests/btrfs/219.out
@@ -0,0 +1,15 @@
+QA output created by 219
+--- before delete ----
+0000000 abab abab abab abab abab abab abab abab
+*
+4000000
+0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+*
+4000000
+--- after delete ----
+0000000 abab abab abab abab abab abab abab abab
+*
+4000000
+0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+*
+4000000
diff --git a/tests/btrfs/group b/tests/btrfs/group
index 3295856d0c8c..3633fa66abe4 100644
--- a/tests/btrfs/group
+++ b/tests/btrfs/group
@@ -221,3 +221,4 @@
 216 auto quick seed
 217 auto quick trim dangerous
 218 auto quick volume
+219 auto quick volume seed
-- 
2.25.1


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

* [PATCH 2/2] btrfs/163: replace sprout instead of seed
  2020-09-04 23:25 ` [PATCH v2 0/2] fstests: btrfs seed device device operation tests Anand Jain
  2020-09-04 23:25   ` [PATCH v2 1/2] btrfs: add a test case for btrfs seed device delete Anand Jain
@ 2020-09-04 23:25   ` Anand Jain
  2020-10-15 15:49     ` Filipe Manana
  1 sibling, 1 reply; 7+ messages in thread
From: Anand Jain @ 2020-09-04 23:25 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, dsterba

Make this test case inline with the kernel patch [1] changes
[1] btrfs: fix replace of seed device

So use the sprout device as the replace target instead of the seed device.
This change is compatible with the older kernels.

While at this, this patch also fixes a typo fix as well.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
 tests/btrfs/163     | 21 ++++++++++++++++-----
 tests/btrfs/163.out |  5 ++++-
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/tests/btrfs/163 b/tests/btrfs/163
index 24c725afb6b9..354d88502d47 100755
--- a/tests/btrfs/163
+++ b/tests/btrfs/163
@@ -4,11 +4,15 @@
 #
 # FS QA Test 163
 #
-# Test case to verify that a seed device can be replaced
+# Test case to verify that a sprouted device can be replaced
 #  Create a seed device
 #  Create a sprout device
 #  Remount RW
-#  Run device replace on the seed device
+#  Run device replace on the sprout device
+#
+# Depends on the kernel patch
+#   btrfs: fail replace of seed device
+
 seq=`basename $0`
 seqres=$RESULT_DIR/$seq
 echo "QA output created by $seq"
@@ -39,6 +43,7 @@ _supported_fs btrfs
 _supported_os Linux
 _require_command "$BTRFS_TUNE_PROG" btrfstune
 _require_scratch_dev_pool 3
+_require_btrfs_forget_or_module_loadable
 
 _scratch_dev_pool_get 3
 
@@ -52,7 +57,7 @@ create_seed()
 	run_check _mount $dev_seed $SCRATCH_MNT
 	$XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 4M" $SCRATCH_MNT/foobar >\
 		/dev/null
-	echo -- gloden --
+	echo -- golden --
 	od -x $SCRATCH_MNT/foobar
 	_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
 	_scratch_unmount
@@ -64,22 +69,28 @@ add_sprout()
 {
 	_run_btrfs_util_prog device add -f $dev_sprout $SCRATCH_MNT
 	_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
+	_mount -o remount,rw $dev_sprout $SCRATCH_MNT
+	$XFS_IO_PROG -f -d -c "pwrite -S 0xcd 0 4M" $SCRATCH_MNT/foobar2 >\
+		/dev/null
 }
 
 replace_seed()
 {
-	_run_btrfs_util_prog replace start -fB $dev_seed $dev_replace_tgt $SCRATCH_MNT
+	_run_btrfs_util_prog replace start -fB $dev_sprout $dev_replace_tgt $SCRATCH_MNT
 	_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
 	_scratch_unmount
-	run_check _mount $dev_replace_tgt $SCRATCH_MNT
+	_btrfs_forget_or_module_reload
+	run_check _mount -o device=$dev_seed $dev_replace_tgt $SCRATCH_MNT
 	echo -- sprout --
 	od -x $SCRATCH_MNT/foobar
+	od -x $SCRATCH_MNT/foobar2
 	_scratch_unmount
 
 }
 
 seed_is_mountable()
 {
+	_btrfs_forget_or_module_reload
 	run_check _mount $dev_seed $SCRATCH_MNT
 	_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
 	_scratch_unmount
diff --git a/tests/btrfs/163.out b/tests/btrfs/163.out
index 91f6f5b6f48a..351ef7b040b2 100644
--- a/tests/btrfs/163.out
+++ b/tests/btrfs/163.out
@@ -1,5 +1,5 @@
 QA output created by 163
--- gloden --
+-- golden --
 0000000 abab abab abab abab abab abab abab abab
 *
 20000000
@@ -7,3 +7,6 @@ QA output created by 163
 0000000 abab abab abab abab abab abab abab abab
 *
 20000000
+0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
+*
+20000000
-- 
2.25.1


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

* Re: [PATCH v2 1/2] btrfs: add a test case for btrfs seed device delete
  2020-09-04 23:25   ` [PATCH v2 1/2] btrfs: add a test case for btrfs seed device delete Anand Jain
@ 2020-10-15 15:45     ` Filipe Manana
  2020-10-20 11:21       ` Anand Jain
  0 siblings, 1 reply; 7+ messages in thread
From: Filipe Manana @ 2020-10-15 15:45 UTC (permalink / raw)
  To: Anand Jain; +Cc: fstests, linux-btrfs, David Sterba

On Sat, Sep 5, 2020 at 12:25 AM Anand Jain <anand.jain@oracle.com> wrote:
>
> This is a regression test for the issue fixed by the kernel patch
>    btrfs: fix put of uninitialized kobject after seed device delete

Now that the patch is in Linus' tree, we could have the commit id as well.
Just a few comments below.

>
> In this test case, we verify the seed device delete on a sprouted
> filesystem.
>
> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> ---
> v2 drop the sysfs layout check as it breaks the test-case backward
> compatibility.
>
>  tests/btrfs/219     | 83 +++++++++++++++++++++++++++++++++++++++++++++
>  tests/btrfs/219.out | 15 ++++++++
>  tests/btrfs/group   |  1 +
>  3 files changed, 99 insertions(+)
>  create mode 100755 tests/btrfs/219
>  create mode 100644 tests/btrfs/219.out
>
> diff --git a/tests/btrfs/219 b/tests/btrfs/219
> new file mode 100755
> index 000000000000..86f2a6991bd7
> --- /dev/null
> +++ b/tests/btrfs/219
> @@ -0,0 +1,83 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Oracle. All Rights Reserved.
> +#
> +# FS QA Test 219
> +#
> +# Test for seed device-delete on a sprouted FS.
> +# Requires kernel patch
> +#    btrfs: fix put of uninitialized kobject after seed device delete
> +#
> +# Steps:
> +#  Create a seed FS. Add a RW device to make it sprout FS and then delete
> +#  the seed device.
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1       # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +       cd /
> +       rm -f $tmp.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +
> +# Modify as appropriate.
> +_supported_fs generic

s/generic/btrfs

> +_supported_os Linux

This should go away, _supported_os is gone now.

> +_require_test
> +_require_scratch_dev_pool 2
> +
> +_scratch_dev_pool_get 2
> +
> +seed=$(echo $SCRATCH_DEV_POOL | awk '{print $1}')
> +sprout=$(echo $SCRATCH_DEV_POOL | awk '{print $2}')

$AWK_PROG should be used instead.

> +
> +_mkfs_dev $seed
> +_mount $seed $SCRATCH_MNT
> +
> +$XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 1M" $SCRATCH_MNT/foo > /dev/null

Why the direct IO write? Why not buffered IO?
I just tried the test, and it passes too with a buffered write (no -d).
If there's any reason for using direct IO, it should be mentioned in a
comment, and _require_odirect added at the top.

> +_scratch_unmount
> +$BTRFS_TUNE_PROG -S 1 $seed
> +
> +# Mount the seed device and add the rw device
> +_mount -o ro $seed $SCRATCH_MNT
> +$BTRFS_UTIL_PROG device add -f $sprout $SCRATCH_MNT
> +_scratch_unmount
> +
> +# Now remount
> +_mount $sprout $SCRATCH_MNT
> +$XFS_IO_PROG -f -d -c "pwrite -S 0xcd 0 1M" $SCRATCH_MNT/bar > /dev/null

Same comment here regarding the use of direct IO.

> +
> +echo --- before delete ----
> +od -x $SCRATCH_MNT/foo
> +od -x $SCRATCH_MNT/bar
> +
> +$BTRFS_UTIL_PROG device delete $seed $SCRATCH_MNT
> +_scratch_unmount
> +_btrfs_forget_or_module_reload
> +_mount $sprout $SCRATCH_MNT
> +
> +echo --- after delete ----
> +od -x $SCRATCH_MNT/foo
> +od -x $SCRATCH_MNT/bar
> +
> +_scratch_dev_pool_put
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/btrfs/219.out b/tests/btrfs/219.out
> new file mode 100644
> index 000000000000..d39e0d8ffafd
> --- /dev/null
> +++ b/tests/btrfs/219.out
> @@ -0,0 +1,15 @@
> +QA output created by 219
> +--- before delete ----
> +0000000 abab abab abab abab abab abab abab abab
> +*
> +4000000
> +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
> +*
> +4000000
> +--- after delete ----
> +0000000 abab abab abab abab abab abab abab abab
> +*
> +4000000
> +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
> +*
> +4000000
> diff --git a/tests/btrfs/group b/tests/btrfs/group
> index 3295856d0c8c..3633fa66abe4 100644
> --- a/tests/btrfs/group
> +++ b/tests/btrfs/group
> @@ -221,3 +221,4 @@
>  216 auto quick seed
>  217 auto quick trim dangerous
>  218 auto quick volume
> +219 auto quick volume seed

New tests were added in the meanwhile.
For the next version don't forget to renumber the test to 224.

Other than those minor comments, it looks fine and it works.

Thanks.

> --
> 2.25.1
>


-- 
Filipe David Manana,

“Whether you think you can, or you think you can't — you're right.”

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

* Re: [PATCH 2/2] btrfs/163: replace sprout instead of seed
  2020-09-04 23:25   ` [PATCH 2/2] btrfs/163: replace sprout instead of seed Anand Jain
@ 2020-10-15 15:49     ` Filipe Manana
  2020-10-20 12:20       ` Anand Jain
  0 siblings, 1 reply; 7+ messages in thread
From: Filipe Manana @ 2020-10-15 15:49 UTC (permalink / raw)
  To: Anand Jain; +Cc: fstests, linux-btrfs, David Sterba

On Sat, Sep 5, 2020 at 12:25 AM Anand Jain <anand.jain@oracle.com> wrote:
>
> Make this test case inline with the kernel patch [1] changes
> [1] btrfs: fix replace of seed device

Same comment as in the previous patch. Now that this is in Linus'
tree, it would be good to mention the commit id too.
>
> So use the sprout device as the replace target instead of the seed device.
> This change is compatible with the older kernels.
>
> While at this, this patch also fixes a typo fix as well.
>
> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> ---
>  tests/btrfs/163     | 21 ++++++++++++++++-----
>  tests/btrfs/163.out |  5 ++++-
>  2 files changed, 20 insertions(+), 6 deletions(-)
>
> diff --git a/tests/btrfs/163 b/tests/btrfs/163
> index 24c725afb6b9..354d88502d47 100755
> --- a/tests/btrfs/163
> +++ b/tests/btrfs/163
> @@ -4,11 +4,15 @@
>  #
>  # FS QA Test 163
>  #
> -# Test case to verify that a seed device can be replaced
> +# Test case to verify that a sprouted device can be replaced
>  #  Create a seed device
>  #  Create a sprout device
>  #  Remount RW
> -#  Run device replace on the seed device
> +#  Run device replace on the sprout device
> +#
> +# Depends on the kernel patch
> +#   btrfs: fail replace of seed device
> +
>  seq=`basename $0`
>  seqres=$RESULT_DIR/$seq
>  echo "QA output created by $seq"
> @@ -39,6 +43,7 @@ _supported_fs btrfs
>  _supported_os Linux
>  _require_command "$BTRFS_TUNE_PROG" btrfstune
>  _require_scratch_dev_pool 3
> +_require_btrfs_forget_or_module_loadable
>
>  _scratch_dev_pool_get 3
>
> @@ -52,7 +57,7 @@ create_seed()
>         run_check _mount $dev_seed $SCRATCH_MNT
>         $XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 4M" $SCRATCH_MNT/foobar >\
>                 /dev/null
> -       echo -- gloden --
> +       echo -- golden --
>         od -x $SCRATCH_MNT/foobar
>         _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
>         _scratch_unmount
> @@ -64,22 +69,28 @@ add_sprout()
>  {
>         _run_btrfs_util_prog device add -f $dev_sprout $SCRATCH_MNT
>         _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
> +       _mount -o remount,rw $dev_sprout $SCRATCH_MNT
> +       $XFS_IO_PROG -f -d -c "pwrite -S 0xcd 0 4M" $SCRATCH_MNT/foobar2 >\
> +               /dev/null

Same comment as for the other patch.
Why the direct IO? The test passes with buffered IO as well.
If there's a reason for direct IO, it should be mentioned in a comment
and _require_odirect added above.

>  }
>
>  replace_seed()
>  {
> -       _run_btrfs_util_prog replace start -fB $dev_seed $dev_replace_tgt $SCRATCH_MNT
> +       _run_btrfs_util_prog replace start -fB $dev_sprout $dev_replace_tgt $SCRATCH_MNT

So now the function should be renamed from replace_seed() to
replace_sprout() as well. Shouldn't it?

Other than that, it looks good and it works as expected.

Thanks.

>         _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
>         _scratch_unmount
> -       run_check _mount $dev_replace_tgt $SCRATCH_MNT
> +       _btrfs_forget_or_module_reload
> +       run_check _mount -o device=$dev_seed $dev_replace_tgt $SCRATCH_MNT
>         echo -- sprout --
>         od -x $SCRATCH_MNT/foobar
> +       od -x $SCRATCH_MNT/foobar2
>         _scratch_unmount
>
>  }
>
>  seed_is_mountable()
>  {
> +       _btrfs_forget_or_module_reload
>         run_check _mount $dev_seed $SCRATCH_MNT
>         _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
>         _scratch_unmount
> diff --git a/tests/btrfs/163.out b/tests/btrfs/163.out
> index 91f6f5b6f48a..351ef7b040b2 100644
> --- a/tests/btrfs/163.out
> +++ b/tests/btrfs/163.out
> @@ -1,5 +1,5 @@
>  QA output created by 163
> --- gloden --
> +-- golden --
>  0000000 abab abab abab abab abab abab abab abab
>  *
>  20000000
> @@ -7,3 +7,6 @@ QA output created by 163
>  0000000 abab abab abab abab abab abab abab abab
>  *
>  20000000
> +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
> +*
> +20000000
> --
> 2.25.1
>


-- 
Filipe David Manana,

“Whether you think you can, or you think you can't — you're right.”

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

* Re: [PATCH v2 1/2] btrfs: add a test case for btrfs seed device delete
  2020-10-15 15:45     ` Filipe Manana
@ 2020-10-20 11:21       ` Anand Jain
  0 siblings, 0 replies; 7+ messages in thread
From: Anand Jain @ 2020-10-20 11:21 UTC (permalink / raw)
  To: fdmanana; +Cc: fstests, linux-btrfs, David Sterba

On 15/10/20 11:45 pm, Filipe Manana wrote:
> On Sat, Sep 5, 2020 at 12:25 AM Anand Jain <anand.jain@oracle.com> wrote:
>>
>> This is a regression test for the issue fixed by the kernel patch
>>     btrfs: fix put of uninitialized kobject after seed device delete
> 
> Now that the patch is in Linus' tree, we could have the commit id as well.
> Just a few comments below.
> 
>>
>> In this test case, we verify the seed device delete on a sprouted
>> filesystem.
>>
>> Signed-off-by: Anand Jain <anand.jain@oracle.com>
>> ---
>> v2 drop the sysfs layout check as it breaks the test-case backward
>> compatibility.
>>
>>   tests/btrfs/219     | 83 +++++++++++++++++++++++++++++++++++++++++++++
>>   tests/btrfs/219.out | 15 ++++++++
>>   tests/btrfs/group   |  1 +
>>   3 files changed, 99 insertions(+)
>>   create mode 100755 tests/btrfs/219
>>   create mode 100644 tests/btrfs/219.out
>>
>> diff --git a/tests/btrfs/219 b/tests/btrfs/219
>> new file mode 100755
>> index 000000000000..86f2a6991bd7
>> --- /dev/null
>> +++ b/tests/btrfs/219
>> @@ -0,0 +1,83 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2020 Oracle. All Rights Reserved.
>> +#
>> +# FS QA Test 219
>> +#
>> +# Test for seed device-delete on a sprouted FS.
>> +# Requires kernel patch
>> +#    btrfs: fix put of uninitialized kobject after seed device delete
>> +#
>> +# Steps:
>> +#  Create a seed FS. Add a RW device to make it sprout FS and then delete
>> +#  the seed device.
>> +
>> +seq=`basename $0`
>> +seqres=$RESULT_DIR/$seq
>> +echo "QA output created by $seq"
>> +
>> +here=`pwd`
>> +tmp=/tmp/$$
>> +status=1       # failure is the default!
>> +trap "_cleanup; exit \$status" 0 1 2 3 15
>> +
>> +_cleanup()
>> +{
>> +       cd /
>> +       rm -f $tmp.*
>> +}
>> +
>> +# get standard environment, filters and checks
>> +. ./common/rc
>> +. ./common/filter
>> +
>> +# remove previous $seqres.full before test
>> +rm -f $seqres.full
>> +
>> +# real QA test starts here
>> +
>> +# Modify as appropriate.
>> +_supported_fs generic
> 
> s/generic/btrfs
> 
>> +_supported_os Linux
> 
> This should go away, _supported_os is gone now.
> 
>> +_require_test
>> +_require_scratch_dev_pool 2
>> +
>> +_scratch_dev_pool_get 2
>> +
>> +seed=$(echo $SCRATCH_DEV_POOL | awk '{print $1}')
>> +sprout=$(echo $SCRATCH_DEV_POOL | awk '{print $2}')
> 
> $AWK_PROG should be used instead.
> 
>> +
>> +_mkfs_dev $seed
>> +_mount $seed $SCRATCH_MNT
>> +
>> +$XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 1M" $SCRATCH_MNT/foo > /dev/null
> 
> Why the direct IO write? Why not buffered IO?
> I just tried the test, and it passes too with a buffered write (no -d).
> If there's any reason for using direct IO, it should be mentioned in a
> comment, and _require_odirect added at the top.
> 

  Ah. No there isn't any reason for using direct IO. I will take it out.



>> +_scratch_unmount
>> +$BTRFS_TUNE_PROG -S 1 $seed
>> +
>> +# Mount the seed device and add the rw device
>> +_mount -o ro $seed $SCRATCH_MNT
>> +$BTRFS_UTIL_PROG device add -f $sprout $SCRATCH_MNT
>> +_scratch_unmount
>> +
>> +# Now remount
>> +_mount $sprout $SCRATCH_MNT
>> +$XFS_IO_PROG -f -d -c "pwrite -S 0xcd 0 1M" $SCRATCH_MNT/bar > /dev/null
> 
> Same comment here regarding the use of direct IO.
> 
>> +
>> +echo --- before delete ----
>> +od -x $SCRATCH_MNT/foo
>> +od -x $SCRATCH_MNT/bar
>> +
>> +$BTRFS_UTIL_PROG device delete $seed $SCRATCH_MNT
>> +_scratch_unmount
>> +_btrfs_forget_or_module_reload
>> +_mount $sprout $SCRATCH_MNT
>> +
>> +echo --- after delete ----
>> +od -x $SCRATCH_MNT/foo
>> +od -x $SCRATCH_MNT/bar
>> +
>> +_scratch_dev_pool_put
>> +
>> +# success, all done
>> +status=0
>> +exit
>> diff --git a/tests/btrfs/219.out b/tests/btrfs/219.out
>> new file mode 100644
>> index 000000000000..d39e0d8ffafd
>> --- /dev/null
>> +++ b/tests/btrfs/219.out
>> @@ -0,0 +1,15 @@
>> +QA output created by 219
>> +--- before delete ----
>> +0000000 abab abab abab abab abab abab abab abab
>> +*
>> +4000000
>> +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
>> +*
>> +4000000
>> +--- after delete ----
>> +0000000 abab abab abab abab abab abab abab abab
>> +*
>> +4000000
>> +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
>> +*
>> +4000000
>> diff --git a/tests/btrfs/group b/tests/btrfs/group
>> index 3295856d0c8c..3633fa66abe4 100644
>> --- a/tests/btrfs/group
>> +++ b/tests/btrfs/group
>> @@ -221,3 +221,4 @@
>>   216 auto quick seed
>>   217 auto quick trim dangerous
>>   218 auto quick volume
>> +219 auto quick volume seed
> 
> New tests were added in the meanwhile.
> For the next version don't forget to renumber the test to 224.
> 
> Other than those minor comments, it looks fine and it works.
> 

  Rest of the comments are accepted. I am sending v3.

Thanks, Anand

> Thanks.
> 
>> --
>> 2.25.1
>>
> 
> 


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

* Re: [PATCH 2/2] btrfs/163: replace sprout instead of seed
  2020-10-15 15:49     ` Filipe Manana
@ 2020-10-20 12:20       ` Anand Jain
  0 siblings, 0 replies; 7+ messages in thread
From: Anand Jain @ 2020-10-20 12:20 UTC (permalink / raw)
  To: fdmanana; +Cc: fstests, linux-btrfs, David Sterba

On 15/10/20 11:49 pm, Filipe Manana wrote:
> On Sat, Sep 5, 2020 at 12:25 AM Anand Jain <anand.jain@oracle.com> wrote:
>>
>> Make this test case inline with the kernel patch [1] changes
>> [1] btrfs: fix replace of seed device
> 
> Same comment as in the previous patch. Now that this is in Linus'
> tree, it would be good to mention the commit id too.

  Added in v3.

>>
>> So use the sprout device as the replace target instead of the seed device..
>> This change is compatible with the older kernels.
>>
>> While at this, this patch also fixes a typo fix as well.
>>
>> Signed-off-by: Anand Jain <anand.jain@oracle.com>
>> ---
>>   tests/btrfs/163     | 21 ++++++++++++++++-----
>>   tests/btrfs/163.out |  5 ++++-
>>   2 files changed, 20 insertions(+), 6 deletions(-)
>>
>> diff --git a/tests/btrfs/163 b/tests/btrfs/163
>> index 24c725afb6b9..354d88502d47 100755
>> --- a/tests/btrfs/163
>> +++ b/tests/btrfs/163
>> @@ -4,11 +4,15 @@
>>   #
>>   # FS QA Test 163
>>   #
>> -# Test case to verify that a seed device can be replaced
>> +# Test case to verify that a sprouted device can be replaced
>>   #  Create a seed device
>>   #  Create a sprout device
>>   #  Remount RW
>> -#  Run device replace on the seed device
>> +#  Run device replace on the sprout device
>> +#
>> +# Depends on the kernel patch
>> +#   btrfs: fail replace of seed device
>> +
>>   seq=`basename $0`
>>   seqres=$RESULT_DIR/$seq
>>   echo "QA output created by $seq"
>> @@ -39,6 +43,7 @@ _supported_fs btrfs
>>   _supported_os Linux
>>   _require_command "$BTRFS_TUNE_PROG" btrfstune
>>   _require_scratch_dev_pool 3
>> +_require_btrfs_forget_or_module_loadable
>>
>>   _scratch_dev_pool_get 3
>>
>> @@ -52,7 +57,7 @@ create_seed()
>>          run_check _mount $dev_seed $SCRATCH_MNT
>>          $XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 4M" $SCRATCH_MNT/foobar >\
>>                  /dev/null
>> -       echo -- gloden --
>> +       echo -- golden --
>>          od -x $SCRATCH_MNT/foobar
>>          _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
>>          _scratch_unmount
>> @@ -64,22 +69,28 @@ add_sprout()
>>   {
>>          _run_btrfs_util_prog device add -f $dev_sprout $SCRATCH_MNT
>>          _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
>> +       _mount -o remount,rw $dev_sprout $SCRATCH_MNT
>> +       $XFS_IO_PROG -f -d -c "pwrite -S 0xcd 0 4M" $SCRATCH_MNT/foobar2 >\
>> +               /dev/null
> 
> Same comment as for the other patch.
> Why the direct IO? The test passes with buffered IO as well.
> If there's a reason for direct IO, it should be mentioned in a comment
> and _require_odirect added above.
> 

  Yes. No need of the directio here. Thanks.

>>   }
>>
>>   replace_seed()
>>   {
>> -       _run_btrfs_util_prog replace start -fB $dev_seed $dev_replace_tgt $SCRATCH_MNT
>> +       _run_btrfs_util_prog replace start -fB $dev_sprout $dev_replace_tgt $SCRATCH_MNT
> 
> So now the function should be renamed from replace_seed() to
> replace_sprout() as well. Shouldn't it?
> 

  Good catch will fix the function name.

> Other than that, it looks good and it works as expected.
> 

  All comments are fixed in v3.


Thanks, Anand

> Thanks.
> 
>>          _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
>>          _scratch_unmount
>> -       run_check _mount $dev_replace_tgt $SCRATCH_MNT
>> +       _btrfs_forget_or_module_reload
>> +       run_check _mount -o device=$dev_seed $dev_replace_tgt $SCRATCH_MNT
>>          echo -- sprout --
>>          od -x $SCRATCH_MNT/foobar
>> +       od -x $SCRATCH_MNT/foobar2
>>          _scratch_unmount
>>
>>   }
>>
>>   seed_is_mountable()
>>   {
>> +       _btrfs_forget_or_module_reload
>>          run_check _mount $dev_seed $SCRATCH_MNT
>>          _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
>>          _scratch_unmount
>> diff --git a/tests/btrfs/163.out b/tests/btrfs/163.out
>> index 91f6f5b6f48a..351ef7b040b2 100644
>> --- a/tests/btrfs/163.out
>> +++ b/tests/btrfs/163.out
>> @@ -1,5 +1,5 @@
>>   QA output created by 163
>> --- gloden --
>> +-- golden --
>>   0000000 abab abab abab abab abab abab abab abab
>>   *
>>   20000000
>> @@ -7,3 +7,6 @@ QA output created by 163
>>   0000000 abab abab abab abab abab abab abab abab
>>   *
>>   20000000
>> +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
>> +*
>> +20000000
>> --
>> 2.25.1
>>
> 
> 


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

end of thread, other threads:[~2020-10-20 12:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <cover.1599234146.git.anand.jain@oracle.com>
2020-09-04 23:25 ` [PATCH v2 0/2] fstests: btrfs seed device device operation tests Anand Jain
2020-09-04 23:25   ` [PATCH v2 1/2] btrfs: add a test case for btrfs seed device delete Anand Jain
2020-10-15 15:45     ` Filipe Manana
2020-10-20 11:21       ` Anand Jain
2020-09-04 23:25   ` [PATCH 2/2] btrfs/163: replace sprout instead of seed Anand Jain
2020-10-15 15:49     ` Filipe Manana
2020-10-20 12:20       ` Anand Jain

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).