FSTests Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
@ 2020-07-08  8:25 Xiao Yang
  2020-07-08 15:47 ` Darrick J. Wong
  0 siblings, 1 reply; 3+ messages in thread
From: Xiao Yang @ 2020-07-08  8:25 UTC (permalink / raw)
  To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---

Note: this patch depends on the following patches:
https://www.spinics.net/lists/fstests/msg14252.html
https://www.spinics.net/lists/fstests/msg14272.html

 tests/generic/605     | 169 ++++++++++++++++++++++++++++++++++++++++++
 tests/generic/605.out |   2 +
 tests/generic/group   |   1 +
 3 files changed, 172 insertions(+)
 create mode 100644 tests/generic/605
 create mode 100644 tests/generic/605.out

diff --git a/tests/generic/605 b/tests/generic/605
new file mode 100644
index 00000000..c44271e8
--- /dev/null
+++ b/tests/generic/605
@@ -0,0 +1,169 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu.  All Rights Reserved.
+#
+# FS QA Test 605
+#
+# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations.
+# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory.
+# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory.
+# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory.
+# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options.
+
+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
+
+_supported_fs generic
+_supported_os Linux
+_require_scratch_dax_mountopt "dax=always"
+_require_scratch_dax_iflag
+_require_xfs_io_command "lsattr"
+
+check_xflag()
+{
+	local target=$1
+	local exp_xflag=$2
+
+	if [ $exp_xflag -eq 0 ]; then
+		_test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag"
+	else
+		_test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
+	fi
+}
+
+test_xflag_inheritance1()
+{
+	mkdir -p a
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/b/c
+	touch a/b/c/d
+
+	check_xflag a 1
+	check_xflag a/b 1
+	check_xflag a/b/c 1
+	check_xflag a/b/c/d 1
+
+	rm -rf a
+}
+
+test_xflag_inheritance2()
+{
+	mkdir -p a/b
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/b/c a/d
+	touch a/b/c/e a/d/f
+
+	check_xflag a 1
+	check_xflag a/b 0
+	check_xflag a/b/c 0
+	check_xflag a/b/c/e 0
+	check_xflag a/d 1
+	check_xflag a/d/f 1
+
+	rm -rf a
+}
+
+test_xflag_inheritance3()
+{
+	mkdir -p a/b
+	$XFS_IO_PROG -c "chattr +x" a/b
+	mkdir -p a/b/c a/d
+	touch a/b/c/e a/d/f
+
+	check_xflag a 0
+	check_xflag a/b 1
+	check_xflag a/b/c 1
+	check_xflag a/b/c/e 1
+	check_xflag a/d 0
+	check_xflag a/d/f 0
+
+	rm -rf a
+}
+
+test_xflag_inheritance4()
+{
+	mkdir -p a
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/b/c
+	$XFS_IO_PROG -c "chattr -x" a/b
+	mkdir -p a/b/c/d a/b/e
+	touch a/b/c/d/f a/b/e/g
+
+	check_xflag a 1
+	check_xflag a/b 0
+	check_xflag a/b/c 1
+	check_xflag a/b/c/d 1
+	check_xflag a/b/c/d/f 1
+	check_xflag a/b/e 0
+	check_xflag a/b/e/g 0
+
+	rm -rf a
+}
+
+test_xflag_inheritance5()
+{
+	mkdir -p a b
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/c a/d b/e b/f
+	touch a/g b/h
+
+	cp -r a/c b/
+	cp -r b/e a/
+	cp -r a/g b/
+	mv a/d b/
+	mv b/f a/
+	mv b/h a/
+
+	check_xflag b/c 0
+	check_xflag b/d 1
+	check_xflag a/e 1
+	check_xflag a/f 0
+	check_xflag b/g 0
+	check_xflag a/h 0
+
+	rm -rf a b
+}
+
+do_tests()
+{
+	# Mount with various dax options
+	for dax_option in "dax=always" "dax=inode" "dax=never"; do
+		_scratch_mount "-o $dax_option"
+		cd $SCRATCH_MNT
+
+		for i in $(seq 1 5); do
+			test_xflag_inheritance${i}
+		done
+
+		cd - > /dev/null
+		_scratch_unmount
+	done
+}
+
+_scratch_mkfs >> $seqres.full 2>&1
+
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/605.out b/tests/generic/605.out
new file mode 100644
index 00000000..1ae20049
--- /dev/null
+++ b/tests/generic/605.out
@@ -0,0 +1,2 @@
+QA output created by 605
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index 676e0d2e..a8451862 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -607,3 +607,4 @@
 602 auto quick encrypt
 603 auto attr quick dax
 604 auto attr quick dax
+605 auto attr quick dax
-- 
2.21.0




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

* Re: [PATCH] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
  2020-07-08  8:25 [PATCH] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
@ 2020-07-08 15:47 ` Darrick J. Wong
  2020-07-09  1:13   ` Xiao Yang
  0 siblings, 1 reply; 3+ messages in thread
From: Darrick J. Wong @ 2020-07-08 15:47 UTC (permalink / raw)
  To: Xiao Yang; +Cc: fstests, ira.weiny

On Wed, Jul 08, 2020 at 04:25:44PM +0800, Xiao Yang wrote:
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
> 
> Note: this patch depends on the following patches:
> https://www.spinics.net/lists/fstests/msg14252.html
> https://www.spinics.net/lists/fstests/msg14272.html

You might want to add this test onto that series then...

> 
>  tests/generic/605     | 169 ++++++++++++++++++++++++++++++++++++++++++
>  tests/generic/605.out |   2 +
>  tests/generic/group   |   1 +
>  3 files changed, 172 insertions(+)
>  create mode 100644 tests/generic/605
>  create mode 100644 tests/generic/605.out
> 
> diff --git a/tests/generic/605 b/tests/generic/605
> new file mode 100644
> index 00000000..c44271e8
> --- /dev/null
> +++ b/tests/generic/605
> @@ -0,0 +1,169 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Fujitsu.  All Rights Reserved.
> +#
> +# FS QA Test 605
> +#
> +# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations.
> +# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory.
> +# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory.
> +# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory.
> +# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options.
> +
> +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
> +
> +_supported_fs generic
> +_supported_os Linux
> +_require_scratch_dax_mountopt "dax=always"

Do you actually need this?  I'd hate to leave this test out of reach for
people who don't have pmem or can't simulate it reliably.  We
deliberately left this flag separate from S_DAX so that the ondisk
metadata flag would always have consistent behavior no matter what
hardware is underneath.

OTOH I guess you're also trying to check that the FS_XFLAG_DAX behavior
is the same with all the dax= mount options applied.  Since this is one
of the 'silence is golden' tests, how about dropping this requirement
and running the test_xflag_inheritance* functions once with no dax
options at all; then we see if the fs will mount with dax=always, and if
so, run all those tests again with each of the dax= mount options?

The rest looks good to me.

--D

> +_require_scratch_dax_iflag
> +_require_xfs_io_command "lsattr"
> +
> +check_xflag()
> +{
> +	local target=$1
> +	local exp_xflag=$2
> +
> +	if [ $exp_xflag -eq 0 ]; then
> +		_test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag"
> +	else
> +		_test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
> +	fi
> +}
> +
> +test_xflag_inheritance1()
> +{
> +	mkdir -p a
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c
> +	touch a/b/c/d
> +
> +	check_xflag a 1
> +	check_xflag a/b 1
> +	check_xflag a/b/c 1
> +	check_xflag a/b/c/d 1
> +
> +	rm -rf a
> +}
> +
> +test_xflag_inheritance2()
> +{
> +	mkdir -p a/b
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c a/d
> +	touch a/b/c/e a/d/f
> +
> +	check_xflag a 1
> +	check_xflag a/b 0
> +	check_xflag a/b/c 0
> +	check_xflag a/b/c/e 0
> +	check_xflag a/d 1
> +	check_xflag a/d/f 1
> +
> +	rm -rf a
> +}
> +
> +test_xflag_inheritance3()
> +{
> +	mkdir -p a/b
> +	$XFS_IO_PROG -c "chattr +x" a/b
> +	mkdir -p a/b/c a/d
> +	touch a/b/c/e a/d/f
> +
> +	check_xflag a 0
> +	check_xflag a/b 1
> +	check_xflag a/b/c 1
> +	check_xflag a/b/c/e 1
> +	check_xflag a/d 0
> +	check_xflag a/d/f 0
> +
> +	rm -rf a
> +}
> +
> +test_xflag_inheritance4()
> +{
> +	mkdir -p a
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c
> +	$XFS_IO_PROG -c "chattr -x" a/b
> +	mkdir -p a/b/c/d a/b/e
> +	touch a/b/c/d/f a/b/e/g
> +
> +	check_xflag a 1
> +	check_xflag a/b 0
> +	check_xflag a/b/c 1
> +	check_xflag a/b/c/d 1
> +	check_xflag a/b/c/d/f 1
> +	check_xflag a/b/e 0
> +	check_xflag a/b/e/g 0
> +
> +	rm -rf a
> +}
> +
> +test_xflag_inheritance5()
> +{
> +	mkdir -p a b
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/c a/d b/e b/f
> +	touch a/g b/h
> +
> +	cp -r a/c b/
> +	cp -r b/e a/
> +	cp -r a/g b/
> +	mv a/d b/
> +	mv b/f a/
> +	mv b/h a/
> +
> +	check_xflag b/c 0
> +	check_xflag b/d 1
> +	check_xflag a/e 1
> +	check_xflag a/f 0
> +	check_xflag b/g 0
> +	check_xflag a/h 0
> +
> +	rm -rf a b
> +}
> +
> +do_tests()
> +{
> +	# Mount with various dax options
> +	for dax_option in "dax=always" "dax=inode" "dax=never"; do
> +		_scratch_mount "-o $dax_option"
> +		cd $SCRATCH_MNT
> +
> +		for i in $(seq 1 5); do
> +			test_xflag_inheritance${i}
> +		done
> +
> +		cd - > /dev/null
> +		_scratch_unmount
> +	done
> +}
> +
> +_scratch_mkfs >> $seqres.full 2>&1
> +
> +do_tests
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/generic/605.out b/tests/generic/605.out
> new file mode 100644
> index 00000000..1ae20049
> --- /dev/null
> +++ b/tests/generic/605.out
> @@ -0,0 +1,2 @@
> +QA output created by 605
> +Silence is golden
> diff --git a/tests/generic/group b/tests/generic/group
> index 676e0d2e..a8451862 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -607,3 +607,4 @@
>  602 auto quick encrypt
>  603 auto attr quick dax
>  604 auto attr quick dax
> +605 auto attr quick dax
> -- 
> 2.21.0
> 
> 
> 

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

* Re: [PATCH] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
  2020-07-08 15:47 ` Darrick J. Wong
@ 2020-07-09  1:13   ` Xiao Yang
  0 siblings, 0 replies; 3+ messages in thread
From: Xiao Yang @ 2020-07-09  1:13 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: fstests, ira.weiny

On 2020/7/8 23:47, Darrick J. Wong wrote:
> On Wed, Jul 08, 2020 at 04:25:44PM +0800, Xiao Yang wrote:
>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
>> ---
>>
>> Note: this patch depends on the following patches:
>> https://www.spinics.net/lists/fstests/msg14252.html
>> https://www.spinics.net/lists/fstests/msg14272.html
> You might want to add this test onto that series then...
Hi Darrick,

Do you perfer to squash these new tests into the first patch set and 
then send the v5 patch set?
BTW: I thought the first patch set will be pushed recently so I sent new 
tests separately.

>>   tests/generic/605     | 169 ++++++++++++++++++++++++++++++++++++++++++
>>   tests/generic/605.out |   2 +
>>   tests/generic/group   |   1 +
>>   3 files changed, 172 insertions(+)
>>   create mode 100644 tests/generic/605
>>   create mode 100644 tests/generic/605.out
>>
>> diff --git a/tests/generic/605 b/tests/generic/605
>> new file mode 100644
>> index 00000000..c44271e8
>> --- /dev/null
>> +++ b/tests/generic/605
>> @@ -0,0 +1,169 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2020 Fujitsu.  All Rights Reserved.
>> +#
>> +# FS QA Test 605
>> +#
>> +# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations.
>> +# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory.
>> +# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory.
>> +# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory.
>> +# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options.
>> +
>> +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
>> +
>> +_supported_fs generic
>> +_supported_os Linux
>> +_require_scratch_dax_mountopt "dax=always"
> Do you actually need this?  I'd hate to leave this test out of reach for
> people who don't have pmem or can't simulate it reliably.  We
> deliberately left this flag separate from S_DAX so that the ondisk
> metadata flag would always have consistent behavior no matter what
> hardware is underneath.

I considered FS_XFLAG_DAX doesn't depends on pmem but not sure how to 
cover all cases.
PS: I wanted to remove_require_scratch_dax_mountopt and make user to 
specify the dax option by MOUNT_OPTIONS before.

> OTOH I guess you're also trying to check that the FS_XFLAG_DAX behavior
> is the same with all the dax= mount options applied.  Since this is one
> of the 'silence is golden' tests, how about dropping this requirement
> and running the test_xflag_inheritance* functions once with no dax
> options at all; then we see if the fs will mount with dax=always, and if
> so, run all those tests again with each of the dax= mount options?

Good suggestion, I will try to rewrite this part.

Best Regards,
Xiao Yang
> The rest looks good to me.
>
> --D
>
>> +_require_scratch_dax_iflag
>> +_require_xfs_io_command "lsattr"
>> +
>> +check_xflag()
>> +{
>> +	local target=$1
>> +	local exp_xflag=$2
>> +
>> +	if [ $exp_xflag -eq 0 ]; then
>> +		_test_inode_flag dax $target&&  echo "$target has unexpected FS_XFLAG_DAX flag"
>> +	else
>> +		_test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
>> +	fi
>> +}
>> +
>> +test_xflag_inheritance1()
>> +{
>> +	mkdir -p a
>> +	$XFS_IO_PROG -c "chattr +x" a
>> +	mkdir -p a/b/c
>> +	touch a/b/c/d
>> +
>> +	check_xflag a 1
>> +	check_xflag a/b 1
>> +	check_xflag a/b/c 1
>> +	check_xflag a/b/c/d 1
>> +
>> +	rm -rf a
>> +}
>> +
>> +test_xflag_inheritance2()
>> +{
>> +	mkdir -p a/b
>> +	$XFS_IO_PROG -c "chattr +x" a
>> +	mkdir -p a/b/c a/d
>> +	touch a/b/c/e a/d/f
>> +
>> +	check_xflag a 1
>> +	check_xflag a/b 0
>> +	check_xflag a/b/c 0
>> +	check_xflag a/b/c/e 0
>> +	check_xflag a/d 1
>> +	check_xflag a/d/f 1
>> +
>> +	rm -rf a
>> +}
>> +
>> +test_xflag_inheritance3()
>> +{
>> +	mkdir -p a/b
>> +	$XFS_IO_PROG -c "chattr +x" a/b
>> +	mkdir -p a/b/c a/d
>> +	touch a/b/c/e a/d/f
>> +
>> +	check_xflag a 0
>> +	check_xflag a/b 1
>> +	check_xflag a/b/c 1
>> +	check_xflag a/b/c/e 1
>> +	check_xflag a/d 0
>> +	check_xflag a/d/f 0
>> +
>> +	rm -rf a
>> +}
>> +
>> +test_xflag_inheritance4()
>> +{
>> +	mkdir -p a
>> +	$XFS_IO_PROG -c "chattr +x" a
>> +	mkdir -p a/b/c
>> +	$XFS_IO_PROG -c "chattr -x" a/b
>> +	mkdir -p a/b/c/d a/b/e
>> +	touch a/b/c/d/f a/b/e/g
>> +
>> +	check_xflag a 1
>> +	check_xflag a/b 0
>> +	check_xflag a/b/c 1
>> +	check_xflag a/b/c/d 1
>> +	check_xflag a/b/c/d/f 1
>> +	check_xflag a/b/e 0
>> +	check_xflag a/b/e/g 0
>> +
>> +	rm -rf a
>> +}
>> +
>> +test_xflag_inheritance5()
>> +{
>> +	mkdir -p a b
>> +	$XFS_IO_PROG -c "chattr +x" a
>> +	mkdir -p a/c a/d b/e b/f
>> +	touch a/g b/h
>> +
>> +	cp -r a/c b/
>> +	cp -r b/e a/
>> +	cp -r a/g b/
>> +	mv a/d b/
>> +	mv b/f a/
>> +	mv b/h a/
>> +
>> +	check_xflag b/c 0
>> +	check_xflag b/d 1
>> +	check_xflag a/e 1
>> +	check_xflag a/f 0
>> +	check_xflag b/g 0
>> +	check_xflag a/h 0
>> +
>> +	rm -rf a b
>> +}
>> +
>> +do_tests()
>> +{
>> +	# Mount with various dax options
>> +	for dax_option in "dax=always" "dax=inode" "dax=never"; do
>> +		_scratch_mount "-o $dax_option"
>> +		cd $SCRATCH_MNT
>> +
>> +		for i in $(seq 1 5); do
>> +			test_xflag_inheritance${i}
>> +		done
>> +
>> +		cd ->  /dev/null
>> +		_scratch_unmount
>> +	done
>> +}
>> +
>> +_scratch_mkfs>>  $seqres.full 2>&1
>> +
>> +do_tests
>> +
>> +# success, all done
>> +echo "Silence is golden"
>> +status=0
>> +exit
>> diff --git a/tests/generic/605.out b/tests/generic/605.out
>> new file mode 100644
>> index 00000000..1ae20049
>> --- /dev/null
>> +++ b/tests/generic/605.out
>> @@ -0,0 +1,2 @@
>> +QA output created by 605
>> +Silence is golden
>> diff --git a/tests/generic/group b/tests/generic/group
>> index 676e0d2e..a8451862 100644
>> --- a/tests/generic/group
>> +++ b/tests/generic/group
>> @@ -607,3 +607,4 @@
>>   602 auto quick encrypt
>>   603 auto attr quick dax
>>   604 auto attr quick dax
>> +605 auto attr quick dax
>> -- 
>> 2.21.0
>>
>>
>>
>
> .
>




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

end of thread, back to index

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-08  8:25 [PATCH] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
2020-07-08 15:47 ` Darrick J. Wong
2020-07-09  1:13   ` Xiao Yang

FSTests Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/fstests/0 fstests/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 fstests fstests/ https://lore.kernel.org/fstests \
		fstests@vger.kernel.org
	public-inbox-index fstests

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.fstests


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git