Message ID | 20200708082544.21624-1-yangx.jy@cn.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations | expand |
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 > > >
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 >> >> >> > > . >
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
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