* [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
2020-08-03 8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
@ 2020-08-03 8:38 ` Xiao Yang
2020-08-03 19:49 ` Ira Weiny
2020-08-03 8:38 ` [PATCH v8 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
` (5 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Xiao Yang @ 2020-08-03 8:38 UTC (permalink / raw)
To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang
1) _check_scratch_dax_mountopt() checks old/new dax mount option and
returns a value.
2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
returns a non-zero value.
3) _require_dax_iflag() checks FS_XFLAG_DAX.
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/common/rc b/common/rc
index 1b7b2575..d7926bc5 100644
--- a/common/rc
+++ b/common/rc
@@ -3188,6 +3188,48 @@ _require_scratch_dax()
_scratch_unmount
}
+# Only accept dax/dax=always mount option becasue dax=always, dax=inode
+# and dax=never are always introduced together.
+# Return 0 if filesystem/device supports the specified dax option.
+# Return 1 if mount fails with the specified dax option.
+# Return 2 if /proc/mounts shows wrong dax option.
+# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
+# Check old dax or new dax=always by passing "dax".
+_check_scratch_dax_mountopt()
+{
+ local option=$1
+
+ _require_scratch
+ _scratch_mkfs > /dev/null 2>&1
+
+ _try_scratch_mount "-o $option" > /dev/null 2>&1 || return 1
+
+ if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
+ _scratch_unmount
+ return 0
+ else
+ _scratch_unmount
+ return 2
+ fi
+}
+
+# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
+_require_scratch_dax_mountopt()
+{
+ local mountopt=$1
+
+ _check_scratch_dax_mountopt "$mountopt"
+ local res=$?
+
+ [ $res -eq 1 ] && _notrun "mount $SCRATCH_DEV with $mountopt failed"
+ [ $res -eq 2 ] && _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
+}
+
+_require_dax_iflag()
+{
+ _require_xfs_io_command "chattr" "x"
+}
+
# Does norecovery support by this fs?
_require_norecovery()
{
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
2020-08-03 8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-08-03 19:49 ` Ira Weiny
2020-08-03 22:26 ` Darrick J. Wong
0 siblings, 1 reply; 13+ messages in thread
From: Ira Weiny @ 2020-08-03 19:49 UTC (permalink / raw)
To: Xiao Yang; +Cc: guaneryu, fstests, darrick.wong
On Mon, Aug 03, 2020 at 04:38:32PM +0800, Xiao Yang wrote:
> 1) _check_scratch_dax_mountopt() checks old/new dax mount option and
> returns a value.
> 2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
> returns a non-zero value.
> 3) _require_dax_iflag() checks FS_XFLAG_DAX.
>
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
> common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/common/rc b/common/rc
> index 1b7b2575..d7926bc5 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3188,6 +3188,48 @@ _require_scratch_dax()
> _scratch_unmount
> }
>
> +# Only accept dax/dax=always mount option becasue dax=always, dax=inode
> +# and dax=never are always introduced together.
> +# Return 0 if filesystem/device supports the specified dax option.
> +# Return 1 if mount fails with the specified dax option.
> +# Return 2 if /proc/mounts shows wrong dax option.
> +# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
> +# Check old dax or new dax=always by passing "dax".
> +_check_scratch_dax_mountopt()
So I think I see what you are trying to say here but I'm not sure the
comment/doc is clear. How about:
# Check if dax mount options are supported
#
# $1 can be either 'dax=always' or 'dax'
#
# dax=always
# Check for the new dax options (dax=inode, dax=always or dax=never) by
# passing "dax=always".
# dax
# Check for the old dax or new dax=always by passing "dax".
#
# This only accepts 'dax=always' because dax=always, dax=inode
# and dax=never are always supported together. So if the other options are
# required checking for 'dax=always' indicates support for the other 2.
#
# Return 0 if filesystem/device supports the specified dax option.
# Return 1 if mount fails with the specified dax option.
# Return 2 if /proc/mounts shows wrong dax option.
Ira
> +{
> + local option=$1
> +
> + _require_scratch
> + _scratch_mkfs > /dev/null 2>&1
> +
> + _try_scratch_mount "-o $option" > /dev/null 2>&1 || return 1
> +
> + if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
> + _scratch_unmount
> + return 0
> + else
> + _scratch_unmount
> + return 2
> + fi
> +}
> +
> +# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
> +_require_scratch_dax_mountopt()
> +{
> + local mountopt=$1
> +
> + _check_scratch_dax_mountopt "$mountopt"
> + local res=$?
> +
> + [ $res -eq 1 ] && _notrun "mount $SCRATCH_DEV with $mountopt failed"
> + [ $res -eq 2 ] && _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
> +}
> +
> +_require_dax_iflag()
> +{
> + _require_xfs_io_command "chattr" "x"
> +}
> +
> # Does norecovery support by this fs?
> _require_norecovery()
> {
> --
> 2.21.0
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
2020-08-03 19:49 ` Ira Weiny
@ 2020-08-03 22:26 ` Darrick J. Wong
2020-08-04 1:26 ` Xiao Yang
0 siblings, 1 reply; 13+ messages in thread
From: Darrick J. Wong @ 2020-08-03 22:26 UTC (permalink / raw)
To: Ira Weiny; +Cc: Xiao Yang, guaneryu, fstests
On Mon, Aug 03, 2020 at 12:49:19PM -0700, Ira Weiny wrote:
> On Mon, Aug 03, 2020 at 04:38:32PM +0800, Xiao Yang wrote:
> > 1) _check_scratch_dax_mountopt() checks old/new dax mount option and
> > returns a value.
> > 2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
> > returns a non-zero value.
> > 3) _require_dax_iflag() checks FS_XFLAG_DAX.
> >
> > Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> > ---
> > common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 42 insertions(+)
> >
> > diff --git a/common/rc b/common/rc
> > index 1b7b2575..d7926bc5 100644
> > --- a/common/rc
> > +++ b/common/rc
> > @@ -3188,6 +3188,48 @@ _require_scratch_dax()
> > _scratch_unmount
> > }
> >
> > +# Only accept dax/dax=always mount option becasue dax=always, dax=inode
> > +# and dax=never are always introduced together.
> > +# Return 0 if filesystem/device supports the specified dax option.
> > +# Return 1 if mount fails with the specified dax option.
> > +# Return 2 if /proc/mounts shows wrong dax option.
> > +# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
> > +# Check old dax or new dax=always by passing "dax".
> > +_check_scratch_dax_mountopt()
>
> So I think I see what you are trying to say here but I'm not sure the
> comment/doc is clear. How about:
>
> # Check if dax mount options are supported
> #
> # $1 can be either 'dax=always' or 'dax'
> #
> # dax=always
> # Check for the new dax options (dax=inode, dax=always or dax=never) by
> # passing "dax=always".
> # dax
> # Check for the old dax or new dax=always by passing "dax".
> #
> # This only accepts 'dax=always' because dax=always, dax=inode
> # and dax=never are always supported together. So if the other options are
> # required checking for 'dax=always' indicates support for the other 2.
> #
> # Return 0 if filesystem/device supports the specified dax option.
> # Return 1 if mount fails with the specified dax option.
> # Return 2 if /proc/mounts shows wrong dax option.
/me likes this better.
--D
> Ira
>
> > +{
> > + local option=$1
> > +
> > + _require_scratch
> > + _scratch_mkfs > /dev/null 2>&1
> > +
> > + _try_scratch_mount "-o $option" > /dev/null 2>&1 || return 1
> > +
> > + if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
> > + _scratch_unmount
> > + return 0
> > + else
> > + _scratch_unmount
> > + return 2
> > + fi
> > +}
> > +
> > +# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
> > +_require_scratch_dax_mountopt()
> > +{
> > + local mountopt=$1
> > +
> > + _check_scratch_dax_mountopt "$mountopt"
> > + local res=$?
> > +
> > + [ $res -eq 1 ] && _notrun "mount $SCRATCH_DEV with $mountopt failed"
> > + [ $res -eq 2 ] && _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
> > +}
> > +
> > +_require_dax_iflag()
> > +{
> > + _require_xfs_io_command "chattr" "x"
> > +}
> > +
> > # Does norecovery support by this fs?
> > _require_norecovery()
> > {
> > --
> > 2.21.0
> >
> >
> >
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
2020-08-03 22:26 ` Darrick J. Wong
@ 2020-08-04 1:26 ` Xiao Yang
0 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-04 1:26 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: Ira Weiny, guaneryu, fstests
On 2020/8/4 6:26, Darrick J. Wong wrote:
> On Mon, Aug 03, 2020 at 12:49:19PM -0700, Ira Weiny wrote:
>> On Mon, Aug 03, 2020 at 04:38:32PM +0800, Xiao Yang wrote:
>>> 1) _check_scratch_dax_mountopt() checks old/new dax mount option and
>>> returns a value.
>>> 2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
>>> returns a non-zero value.
>>> 3) _require_dax_iflag() checks FS_XFLAG_DAX.
>>>
>>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
>>> ---
>>> common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 42 insertions(+)
>>>
>>> diff --git a/common/rc b/common/rc
>>> index 1b7b2575..d7926bc5 100644
>>> --- a/common/rc
>>> +++ b/common/rc
>>> @@ -3188,6 +3188,48 @@ _require_scratch_dax()
>>> _scratch_unmount
>>> }
>>>
>>> +# Only accept dax/dax=always mount option becasue dax=always, dax=inode
>>> +# and dax=never are always introduced together.
>>> +# Return 0 if filesystem/device supports the specified dax option.
>>> +# Return 1 if mount fails with the specified dax option.
>>> +# Return 2 if /proc/mounts shows wrong dax option.
>>> +# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
>>> +# Check old dax or new dax=always by passing "dax".
>>> +_check_scratch_dax_mountopt()
>> So I think I see what you are trying to say here but I'm not sure the
>> comment/doc is clear. How about:
>>
>> # Check if dax mount options are supported
>> #
>> # $1 can be either 'dax=always' or 'dax'
>> #
>> # dax=always
>> # Check for the new dax options (dax=inode, dax=always or dax=never) by
>> # passing "dax=always".
>> # dax
>> # Check for the old dax or new dax=always by passing "dax".
>> #
>> # This only accepts 'dax=always' because dax=always, dax=inode
>> # and dax=never are always supported together. So if the other options are
>> # required checking for 'dax=always' indicates support for the other 2.
>> #
>> # Return 0 if filesystem/device supports the specified dax option.
>> # Return 1 if mount fails with the specified dax option.
>> # Return 2 if /proc/mounts shows wrong dax option.
> /me likes this better.
Hi Ira, Darrick
It is clearer and better, I will update the comment in v9 patch set. :-)
Besides, could you help me review another new test which has been sent
to mail list:
"generic: Verify how to change the S_DAX flag on an existing file"
I want to squash it into v9 patch set after you review it.
Thanks,
Xiao Yang
> --D
>
>> Ira
>>
>>> +{
>>> + local option=$1
>>> +
>>> + _require_scratch
>>> + _scratch_mkfs> /dev/null 2>&1
>>> +
>>> + _try_scratch_mount "-o $option"> /dev/null 2>&1 || return 1
>>> +
>>> + if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
>>> + _scratch_unmount
>>> + return 0
>>> + else
>>> + _scratch_unmount
>>> + return 2
>>> + fi
>>> +}
>>> +
>>> +# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
>>> +_require_scratch_dax_mountopt()
>>> +{
>>> + local mountopt=$1
>>> +
>>> + _check_scratch_dax_mountopt "$mountopt"
>>> + local res=$?
>>> +
>>> + [ $res -eq 1 ]&& _notrun "mount $SCRATCH_DEV with $mountopt failed"
>>> + [ $res -eq 2 ]&& _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
>>> +}
>>> +
>>> +_require_dax_iflag()
>>> +{
>>> + _require_xfs_io_command "chattr" "x"
>>> +}
>>> +
>>> # Does norecovery support by this fs?
>>> _require_norecovery()
>>> {
>>> --
>>> 2.21.0
>>>
>>>
>>>
>
> .
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v8 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
2020-08-03 8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
2020-08-03 8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-08-03 8:38 ` Xiao Yang
2020-08-03 8:38 ` [PATCH v8 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
` (4 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03 8:38 UTC (permalink / raw)
To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang
1) Make related tests use _require_scratch_dax_mountopt() and _require_dax_iflag().
2) Remove unused _require_scratch_dax().
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
common/rc | 15 +--------------
tests/ext4/030 | 2 +-
tests/ext4/031 | 4 ++--
tests/generic/413 | 2 +-
tests/generic/462 | 2 +-
tests/xfs/260 | 4 ++--
6 files changed, 8 insertions(+), 21 deletions(-)
diff --git a/common/rc b/common/rc
index d7926bc5..1f8c86c0 100644
--- a/common/rc
+++ b/common/rc
@@ -3174,20 +3174,6 @@ _require_scratch_shutdown()
_scratch_unmount
}
-# Does dax mount option work on this dev/fs?
-_require_scratch_dax()
-{
- _require_scratch
- _scratch_mkfs > /dev/null 2>&1
- _try_scratch_mount -o dax || \
- _notrun "mount $SCRATCH_DEV with dax failed"
- # Check options to be sure. XFS ignores dax option
- # and goes on if dev underneath does not support dax.
- _fs_options $SCRATCH_DEV | grep -qw "dax" || \
- _notrun "$SCRATCH_DEV $FSTYP does not support -o dax"
- _scratch_unmount
-}
-
# Only accept dax/dax=always mount option becasue dax=always, dax=inode
# and dax=never are always introduced together.
# Return 0 if filesystem/device supports the specified dax option.
@@ -3213,6 +3199,7 @@ _check_scratch_dax_mountopt()
fi
}
+# Does dax mount option work on this dev/fs?
# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
_require_scratch_dax_mountopt()
{
diff --git a/tests/ext4/030 b/tests/ext4/030
index 93bbca86..fb5cf451 100755
--- a/tests/ext4/030
+++ b/tests/ext4/030
@@ -33,7 +33,7 @@ rm -f $seqres.full
# Modify as appropriate.
_supported_os Linux
_supported_fs ext4
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
_require_test_program "t_ext4_dax_journal_corruption"
_require_command "$CHATTR_PROG" chattr
diff --git a/tests/ext4/031 b/tests/ext4/031
index dc58214e..20e2fab7 100755
--- a/tests/ext4/031
+++ b/tests/ext4/031
@@ -37,7 +37,7 @@ MOUNT_OPTIONS=""
# Modify as appropriate.
_supported_os Linux
_supported_fs ext4
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
_require_test_program "t_ext4_dax_inline_corruption"
_require_scratch_ext4_feature "inline_data"
@@ -56,7 +56,7 @@ _scratch_unmount >> $seqres.full 2>&1
_try_scratch_mount "-o dax" >> $seqres.full 2>&1
if [[ $? != 0 ]]; then
- # _require_scratch_dax already verified that we could mount with DAX.
+ # _require_scratch_dax_mountopt already verified that we could mount with DAX.
# Failure here is expected because we have inline data.
echo "Silence is golden"
status=0
diff --git a/tests/generic/413 b/tests/generic/413
index 1ce89aff..19e1b926 100755
--- a/tests/generic/413
+++ b/tests/generic/413
@@ -31,7 +31,7 @@ rm -f $seqres.full
_supported_fs generic
_supported_os Linux
_require_test
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
_require_test_program "feature"
_require_test_program "t_mmap_dio"
_require_xfs_io_command "falloc"
diff --git a/tests/generic/462 b/tests/generic/462
index 1ab6cadc..4a940239 100755
--- a/tests/generic/462
+++ b/tests/generic/462
@@ -37,7 +37,7 @@ rm -f $seqres.full
_supported_fs generic
_supported_os Linux
_require_test
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
_require_test_program "t_mmap_write_ro"
# running by unpriviliged user is not necessary to reproduce
# this bug, just trying to test more.
diff --git a/tests/xfs/260 b/tests/xfs/260
index 3464ffef..bcdc6041 100755
--- a/tests/xfs/260
+++ b/tests/xfs/260
@@ -30,10 +30,10 @@ rm -f $seqres.full
_supported_fs xfs
_supported_os Linux
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
_require_test_program "feature"
_require_test_program "t_mmap_dio"
-_require_xfs_io_command "chattr" "x"
+_require_dax_iflag
_require_xfs_io_command "falloc"
prep_files()
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v8 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom()
2020-08-03 8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
2020-08-03 8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
2020-08-03 8:38 ` [PATCH v8 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
@ 2020-08-03 8:38 ` Xiao Yang
2020-08-03 8:38 ` [PATCH v8 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
` (3 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03 8:38 UTC (permalink / raw)
To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang
Current _scratch_mkfs_geom() adds geometry parameters to the end of the
MKFS_OPTIONS blindly. ext4 can accept the last one if geometry parameters
and original MKFS_OPTION have the same mkfs options but xfs cannot accept
them and reports "xxx option is respecified" error. Make _scratch_mkfs_geom()
override the same mkfs options in original MKFS_OPTION by geometry parameters.
With this change, generic/223 doesn't need to clear original MKFS_OPTION
before calling _scratch_mkfs_geom() and can use other mkfs options in original
MKFS_OPTION.
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
common/rc | 14 +++++++++++++-
tests/generic/223 | 1 -
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/common/rc b/common/rc
index 1f8c86c0..0c4d02b9 100644
--- a/common/rc
+++ b/common/rc
@@ -1051,7 +1051,19 @@ _scratch_mkfs_geom()
case $FSTYP in
xfs)
- MKFS_OPTIONS+=" -b size=$blocksize, -d su=$sunit_bytes,sw=$swidth_mult"
+ if echo "$MKFS_OPTIONS" | egrep -q "b?size="; then
+ MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r "s/(b?size=)[0-9]+/\1$blocksize/")
+ else
+ MKFS_OPTIONS+=" -b size=$blocksize"
+ fi
+
+ if echo "$MKFS_OPTIONS" | egrep -q "(su|sunit|sw|swidth)="; then
+ MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r \
+ -e "s/(su|sunit)=[0-9kmg]+/su=$sunit_bytes/" \
+ -e "s/(sw|swidth)=[0-9kmg]+/sw=$swidth_mult/")
+ else
+ MKFS_OPTIONS+=" -d su=$sunit_bytes,sw=$swidth_mult"
+ fi
;;
ext4|ext4dev)
MKFS_OPTIONS+=" -b $blocksize -E stride=$sunit_blocks,stripe_width=$swidth_blocks"
diff --git a/tests/generic/223 b/tests/generic/223
index 6cfd00dd..ba7c9a44 100755
--- a/tests/generic/223
+++ b/tests/generic/223
@@ -41,7 +41,6 @@ for SUNIT_K in 8 16 32 64 128; do
let SUNIT_BLOCKS=$SUNIT_BYTES/$BLOCKSIZE
echo "=== mkfs with su $SUNIT_BLOCKS blocks x 4 ==="
- export MKFS_OPTIONS=""
_scratch_mkfs_geom $SUNIT_BYTES 4 $BLOCKSIZE >> $seqres.full 2>&1
_scratch_mount
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v8 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing
2020-08-03 8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
` (2 preceding siblings ...)
2020-08-03 8:38 ` [PATCH v8 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
@ 2020-08-03 8:38 ` Xiao Yang
2020-08-03 8:38 ` [PATCH v8 5/7] xfs/260: Move and update xfs/260 Xiao Yang
` (2 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03 8:38 UTC (permalink / raw)
To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang
1) Simple code and fix the wrong value of stripe_width by _scratch_mkfs_geom().
2) Get hugepage size by _get_hugepagesize() and replace fixed 2M with
hugepage size because hugepage size/PMD_SIZE is not 2M on some
arches(e.g. hugepage size/PMD_SIZE is 512M on arm64).
3) For debugging, redirect the output of mkfs to $seqres.full.
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
common/rc | 10 ++++++++++
tests/generic/413 | 10 ++--------
tests/xfs/260 | 4 ++--
3 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/common/rc b/common/rc
index 0c4d02b9..75b20f96 100644
--- a/common/rc
+++ b/common/rc
@@ -170,6 +170,16 @@ _get_filesize()
stat -c %s "$1"
}
+# Get hugepagesize in bytes
+_get_hugepagesize()
+{
+ local hugepgsz=$(awk '/Hugepagesize/ {print $2}' /proc/meminfo)
+ # Call _notrun if $hugepgsz is not a number
+ echo "$hugepgsz" | egrep -q ^[0-9]+$ || \
+ _notrun "Cannot get the value of Hugepagesize"
+ echo $((hugepgsz * 1024))
+}
+
_mount()
{
$MOUNT_PROG `_mount_ops_filter $*`
diff --git a/tests/generic/413 b/tests/generic/413
index 19e1b926..dfe2912b 100755
--- a/tests/generic/413
+++ b/tests/generic/413
@@ -111,14 +111,8 @@ do_tests()
t_mmap_dio_dax $((64 * 1024 * 1024))
}
-# make fs 2Mb aligned for PMD fault testing
-mkfs_opts=""
-if [ "$FSTYP" == "ext4" ]; then
- mkfs_opts="-E stride=512,stripe_width=1"
-elif [ "$FSTYP" == "xfs" ]; then
- mkfs_opts="-d su=2m,sw=1"
-fi
-_scratch_mkfs "$mkfs_opts" > /dev/null 2>&1
+# make fs aligned for PMD fault testing
+_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1
# mount SCRATCH_DEV with dax option, TEST_DEV not
export MOUNT_OPTIONS=""
diff --git a/tests/xfs/260 b/tests/xfs/260
index bcdc6041..81b42f01 100755
--- a/tests/xfs/260
+++ b/tests/xfs/260
@@ -121,8 +121,8 @@ do_tests()
t_dax_flag_mmap_dio $((64 * 1024 * 1024))
}
-# make xfs 2Mb aligned for PMD fault testing
-_scratch_mkfs "-d su=2m,sw=1" > /dev/null 2>&1
+# make xfs aligned for PMD fault testing
+_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1
# mount with dax option
_scratch_mount "-o dax"
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v8 5/7] xfs/260: Move and update xfs/260
2020-08-03 8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
` (3 preceding siblings ...)
2020-08-03 8:38 ` [PATCH v8 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
@ 2020-08-03 8:38 ` Xiao Yang
2020-08-03 8:38 ` [PATCH v8 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
2020-08-03 8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03 8:38 UTC (permalink / raw)
To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang
1) Both ext4 and xfs have supported FS_XFLAG_DAX so move it to generic.
2) Modifying FS_XFLAG_DAX on flies does not take effect immediately so
make files inherit the DAX state of parent directory.
3) Setting/clearing FS_XFLAG_DAX have no chance to change S_DAX flag if
mount with dax option so remove the related subtest.
4) Setting/clearing FS_XFLAG_DAX doesn't change S_DAX flag on older xfs
due to commit 742d84290739 ("xfs: disable per-inode DAX flag") so
only do test when fs supports new dax=inode option.
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
tests/{xfs/260 => generic/605} | 68 +++++++++++++++++-----------------
tests/generic/605.out | 2 +
tests/generic/group | 1 +
tests/xfs/260.out | 2 -
tests/xfs/group | 1 -
5 files changed, 36 insertions(+), 38 deletions(-)
rename tests/{xfs/260 => generic/605} (57%)
create mode 100644 tests/generic/605.out
delete mode 100644 tests/xfs/260.out
diff --git a/tests/xfs/260 b/tests/generic/605
similarity index 57%
rename from tests/xfs/260
rename to tests/generic/605
index 81b42f01..00ddb1f0 100755
--- a/tests/xfs/260
+++ b/tests/generic/605
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2017 Red Hat Inc. All Rights Reserved.
#
-# FS QA Test 260
+# FS QA Test 605
#
# Test per-inode DAX flag by mmap direct/buffered IO.
#
@@ -28,76 +28,80 @@ _cleanup()
# remove previous $seqres.full before test
rm -f $seqres.full
-_supported_fs xfs
+_supported_fs generic
_supported_os Linux
-_require_scratch_dax_mountopt "dax"
+_require_scratch_dax_mountopt "dax=always"
_require_test_program "feature"
_require_test_program "t_mmap_dio"
_require_dax_iflag
_require_xfs_io_command "falloc"
-prep_files()
+SRC_DIR=$SCRATCH_MNT/src
+SRC_FILE=$SRC_DIR/tf_s
+DST_DIR=$SCRATCH_MNT/dst
+DST_FILE=$DST_DIR/tf_d
+
+prep_directories()
{
- rm -f $SCRATCH_MNT/tf_{s,d}
+ mkdir -p $SRC_DIR $DST_DIR
+}
+prep_files()
+{
+ rm -f $SRC_FILE $DST_FILE
$XFS_IO_PROG -f -c "falloc 0 $tsize" \
- $SCRATCH_MNT/tf_{s,d} >> $seqres.full 2>&1
+ $SRC_FILE $DST_FILE >> $seqres.full 2>&1
}
t_both_dax()
{
+ $XFS_IO_PROG -c "chattr +x" $SRC_DIR $DST_DIR
prep_files
- $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d}
# with O_DIRECT first
- $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} $1 "dio both dax"
+ $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
+ $1 "dio both dax"
prep_files
- $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d}
# again with buffered IO
- $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+ $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
$1 "buffered both dax"
}
t_nondax_to_dax()
{
+ $XFS_IO_PROG -c "chattr -x" $SRC_DIR
+ $XFS_IO_PROG -c "chattr +x" $DST_DIR
prep_files
- $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_s
- $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_d
- $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \
+ $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
$1 "dio nondax to dax"
prep_files
- $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_s
- $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_d
- $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+ $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
$1 "buffered nondax to dax"
}
t_dax_to_nondax()
{
+ $XFS_IO_PROG -c "chattr +x" $SRC_DIR
+ $XFS_IO_PROG -c "chattr -x" $DST_DIR
prep_files
- $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_s
- $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_d
- $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \
+ $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
$1 "dio dax to nondax"
prep_files
- $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_s
- $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_d
- $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+ $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
$1 "buffered dax to nondax"
}
t_both_nondax()
{
+ $XFS_IO_PROG -c "chattr -x" $SRC_DIR $DST_DIR
prep_files
- $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d}
- $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \
+ $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
$1 "dio both nondax"
prep_files
- $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d}
- $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+ $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
$1 "buffered both nondax"
}
@@ -112,6 +116,7 @@ t_dax_flag_mmap_dio()
do_tests()
{
+ prep_directories
# less than page size
t_dax_flag_mmap_dio 1024
# page size
@@ -124,17 +129,10 @@ do_tests()
# make xfs aligned for PMD fault testing
_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1
-# mount with dax option
-_scratch_mount "-o dax"
-
tsize=$((128 * 1024 * 1024))
-do_tests
-_scratch_unmount
-
-# mount again without dax option
-export MOUNT_OPTIONS=""
-_scratch_mount
+# mount with dax=inode option
+_scratch_mount "-o dax=inode"
do_tests
# success, all done
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 75d56838..d06c1bf6 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -607,3 +607,4 @@
602 auto quick encrypt
603 auto quick quota
604 auto quick mount
+605 auto attr quick dax
diff --git a/tests/xfs/260.out b/tests/xfs/260.out
deleted file mode 100644
index 18ca517c..00000000
--- a/tests/xfs/260.out
+++ /dev/null
@@ -1,2 +0,0 @@
-QA output created by 260
-Silence is golden
diff --git a/tests/xfs/group b/tests/xfs/group
index d6e8d1c3..ed0d389e 100644
--- a/tests/xfs/group
+++ b/tests/xfs/group
@@ -257,7 +257,6 @@
257 auto quick clone
258 auto quick clone
259 auto quick
-260 auto attr quick dax
261 auto quick quota
262 dangerous_fuzzers dangerous_scrub dangerous_online_repair
263 auto quick quota
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v8 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly
2020-08-03 8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
` (4 preceding siblings ...)
2020-08-03 8:38 ` [PATCH v8 5/7] xfs/260: Move and update xfs/260 Xiao Yang
@ 2020-08-03 8:38 ` Xiao Yang
2020-08-03 8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03 8:38 UTC (permalink / raw)
To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang
1) With new kernel(e.g. v5.8-rc1), statx() can be used to qurey S_DAX flag
on regular file, so add a test to verify the feature.
2) Factor out _check_s_dax() so that other tests can use it in future.
Reference:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=712b2698e4c024b561694cbcc1abba13eb0fd9ce
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
common/rc | 13 +++++++
tests/generic/606 | 88 +++++++++++++++++++++++++++++++++++++++++++
tests/generic/606.out | 2 +
tests/generic/group | 1 +
4 files changed, 104 insertions(+)
create mode 100644 tests/generic/606
create mode 100644 tests/generic/606.out
diff --git a/common/rc b/common/rc
index 75b20f96..a358702e 100644
--- a/common/rc
+++ b/common/rc
@@ -3196,6 +3196,19 @@ _require_scratch_shutdown()
_scratch_unmount
}
+_check_s_dax()
+{
+ local target=$1
+ local exp_s_dax=$2
+
+ local attributes=$($XFS_IO_PROG -c 'statx -r' $target | awk '/stat.attributes / { print $3 }')
+ if [ $exp_s_dax -eq 0 ]; then
+ (( attributes & 0x2000 )) && echo "$target has unexpected S_DAX flag"
+ else
+ (( attributes & 0x2000 )) || echo "$target doen't have expected S_DAX flag"
+ fi
+}
+
# Only accept dax/dax=always mount option becasue dax=always, dax=inode
# and dax=never are always introduced together.
# Return 0 if filesystem/device supports the specified dax option.
diff --git a/tests/generic/606 b/tests/generic/606
new file mode 100644
index 00000000..6257ab6c
--- /dev/null
+++ b/tests/generic/606
@@ -0,0 +1,88 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu. All Rights Reserved.
+#
+# FS QA Test 606
+#
+# By the following cases, verify if statx() can query S_DAX flag
+# on regular file correctly.
+# 1) With dax=always option, FS_XFLAG_DAX is ignored and S_DAX flag
+# always exists on regular file.
+# 2) With dax=inode option, setting/clearing FS_XFLAG_DAX can change
+# S_DAX flag on regular file.
+# 3) With dax=never option, FS_XFLAG_DAX is ignored and S_DAX flag
+# never exists on regular file.
+#
+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_dax_iflag
+_require_xfs_io_command "statx" "-r"
+
+PARENT_DIR=$SCRATCH_MNT/testdir
+TEST_FILE=$PARENT_DIR/testfile
+
+test_s_dax()
+{
+ local dax_option=$1
+ local exp_s_dax1=$2
+ local exp_s_dax2=$3
+
+ # Mount with specified dax option
+ _scratch_mount "-o $dax_option"
+
+ # Prepare directory
+ mkdir -p $PARENT_DIR
+
+ rm -f $TEST_FILE
+ $XFS_IO_PROG -c "chattr +x" $PARENT_DIR
+ touch $TEST_FILE
+ # Check if setting FS_XFLAG_DAX changes S_DAX flag
+ _check_s_dax $TEST_FILE $exp_s_dax1
+
+ rm -f $TEST_FILE
+ $XFS_IO_PROG -c "chattr -x" $PARENT_DIR
+ touch $TEST_FILE
+ # Check if clearing FS_XFLAG_DAX changes S_DAX flag
+ _check_s_dax $TEST_FILE $exp_s_dax2
+
+ _scratch_unmount
+}
+
+do_tests()
+{
+ _scratch_mkfs >> $seqres.full 2>&1
+
+ test_s_dax "dax=always" 1 1
+ test_s_dax "dax=inode" 1 0
+ test_s_dax "dax=never" 0 0
+}
+
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/606.out b/tests/generic/606.out
new file mode 100644
index 00000000..09bf888e
--- /dev/null
+++ b/tests/generic/606.out
@@ -0,0 +1,2 @@
+QA output created by 606
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index d06c1bf6..05c6b02d 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -608,3 +608,4 @@
603 auto quick quota
604 auto quick mount
605 auto attr quick dax
+606 auto attr quick dax
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
2020-08-03 8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
` (5 preceding siblings ...)
2020-08-03 8:38 ` [PATCH v8 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
@ 2020-08-03 8:38 ` Xiao Yang
2020-08-03 19:54 ` Ira Weiny
2020-08-03 22:25 ` Darrick J. Wong
6 siblings, 2 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03 8:38 UTC (permalink / raw)
To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang
Also factor out _check_xflag() so that other tests can use it in future.
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
common/rc | 12 +++
tests/generic/607 | 187 ++++++++++++++++++++++++++++++++++++++++++
tests/generic/607.out | 2 +
tests/generic/group | 1 +
4 files changed, 202 insertions(+)
create mode 100644 tests/generic/607
create mode 100644 tests/generic/607.out
diff --git a/common/rc b/common/rc
index a358702e..9af0aa72 100644
--- a/common/rc
+++ b/common/rc
@@ -3209,6 +3209,18 @@ _check_s_dax()
fi
}
+_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
+}
+
# Only accept dax/dax=always mount option becasue dax=always, dax=inode
# and dax=never are always introduced together.
# Return 0 if filesystem/device supports the specified dax option.
diff --git a/tests/generic/607 b/tests/generic/607
new file mode 100644
index 00000000..f7e17cb3
--- /dev/null
+++ b/tests/generic/607
@@ -0,0 +1,187 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu. All Rights Reserved.
+#
+# FS QA Test 607
+#
+# 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
+_require_dax_iflag
+_require_xfs_io_command "lsattr" "-v"
+
+# If a/ is +x, check that a's new children
+# inherit +x from a/.
+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
+}
+
+# If a/ is +x and b/ is -x, check that:
+# 1) b's new children inherit -x from b/.
+# 2) a's new children(b/ is old) inherit +x from 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
+}
+
+# If a/ is -x and b/ is +x, check that:
+# 1) b's new children inherit +x from b/.
+# 2) a's new children(b/ is old) inherit -x from 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
+}
+
+# If a/, c/ are +x and b/ is -x, check that:
+# 1) c's new children inherit +x from c/.
+# 2) b's new children(c/ is old) inherit -x from b/.
+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
+}
+
+# If a/ is +x and b/ is -x, check that:
+# 1) new b/c and b/g inherit -x from b/ by cp.
+# 2) new a/e inherits +x from a/ by cp.
+# 3) new b/d preserves +x from a/ by mv.
+# 4) new a/f and a/h preserve -x from b/ by mv.
+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_xflag_tests()
+{
+ local option=$1
+
+ _scratch_mkfs >> $seqres.full 2>&1
+ _scratch_mount "$option"
+ cd $SCRATCH_MNT
+
+ for i in $(seq 1 5); do
+ test_xflag_inheritance${i}
+ done
+
+ cd - > /dev/null
+ _scratch_unmount
+}
+
+do_tests()
+{
+ # Mount without dax option
+ do_xflag_tests
+
+ # Mount with 'dax' or 'dax=always' option if fs supports it.
+ _check_scratch_dax_mountopt "dax" && do_xflag_tests "-o dax"
+
+ # Mount with 'dax=inode' and 'dax=never' options if fs supports them.
+ if _check_scratch_dax_mountopt "dax=always"; then
+ for dax_option in "dax=inode" "dax=never"; do
+ do_xflag_tests "-o $dax_option"
+ done
+ fi
+}
+
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/607.out b/tests/generic/607.out
new file mode 100644
index 00000000..d02de53b
--- /dev/null
+++ b/tests/generic/607.out
@@ -0,0 +1,2 @@
+QA output created by 607
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index 05c6b02d..5bd289c3 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -609,3 +609,4 @@
604 auto quick mount
605 auto attr quick dax
606 auto attr quick dax
+607 auto attr quick dax
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
2020-08-03 8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
@ 2020-08-03 19:54 ` Ira Weiny
2020-08-03 22:25 ` Darrick J. Wong
1 sibling, 0 replies; 13+ messages in thread
From: Ira Weiny @ 2020-08-03 19:54 UTC (permalink / raw)
To: Xiao Yang; +Cc: guaneryu, fstests, darrick.wong
On Mon, Aug 03, 2020 at 04:38:38PM +0800, Xiao Yang wrote:
> Also factor out _check_xflag() so that other tests can use it in future.
>
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
> ---
> common/rc | 12 +++
> tests/generic/607 | 187 ++++++++++++++++++++++++++++++++++++++++++
> tests/generic/607.out | 2 +
> tests/generic/group | 1 +
> 4 files changed, 202 insertions(+)
> create mode 100644 tests/generic/607
> create mode 100644 tests/generic/607.out
>
> diff --git a/common/rc b/common/rc
> index a358702e..9af0aa72 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3209,6 +3209,18 @@ _check_s_dax()
> fi
> }
>
> +_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
> +}
> +
> # Only accept dax/dax=always mount option becasue dax=always, dax=inode
> # and dax=never are always introduced together.
> # Return 0 if filesystem/device supports the specified dax option.
> diff --git a/tests/generic/607 b/tests/generic/607
> new file mode 100644
> index 00000000..f7e17cb3
> --- /dev/null
> +++ b/tests/generic/607
> @@ -0,0 +1,187 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Fujitsu. All Rights Reserved.
> +#
> +# FS QA Test 607
> +#
> +# 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
> +_require_dax_iflag
> +_require_xfs_io_command "lsattr" "-v"
> +
> +# If a/ is +x, check that a's new children
> +# inherit +x from a/.
> +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
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) b's new children inherit -x from b/.
> +# 2) a's new children(b/ is old) inherit +x from 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
> +}
> +
> +# If a/ is -x and b/ is +x, check that:
> +# 1) b's new children inherit +x from b/.
> +# 2) a's new children(b/ is old) inherit -x from 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
> +}
> +
> +# If a/, c/ are +x and b/ is -x, check that:
> +# 1) c's new children inherit +x from c/.
> +# 2) b's new children(c/ is old) inherit -x from b/.
> +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
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) new b/c and b/g inherit -x from b/ by cp.
> +# 2) new a/e inherits +x from a/ by cp.
> +# 3) new b/d preserves +x from a/ by mv.
> +# 4) new a/f and a/h preserve -x from b/ by mv.
> +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_xflag_tests()
> +{
> + local option=$1
> +
> + _scratch_mkfs >> $seqres.full 2>&1
> + _scratch_mount "$option"
> + cd $SCRATCH_MNT
> +
> + for i in $(seq 1 5); do
> + test_xflag_inheritance${i}
> + done
> +
> + cd - > /dev/null
> + _scratch_unmount
> +}
> +
> +do_tests()
> +{
> + # Mount without dax option
> + do_xflag_tests
> +
> + # Mount with 'dax' or 'dax=always' option if fs supports it.
> + _check_scratch_dax_mountopt "dax" && do_xflag_tests "-o dax"
> +
> + # Mount with 'dax=inode' and 'dax=never' options if fs supports them.
> + if _check_scratch_dax_mountopt "dax=always"; then
> + for dax_option in "dax=inode" "dax=never"; do
> + do_xflag_tests "-o $dax_option"
> + done
> + fi
> +}
> +
> +do_tests
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/generic/607.out b/tests/generic/607.out
> new file mode 100644
> index 00000000..d02de53b
> --- /dev/null
> +++ b/tests/generic/607.out
> @@ -0,0 +1,2 @@
> +QA output created by 607
> +Silence is golden
> diff --git a/tests/generic/group b/tests/generic/group
> index 05c6b02d..5bd289c3 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -609,3 +609,4 @@
> 604 auto quick mount
> 605 auto attr quick dax
> 606 auto attr quick dax
> +607 auto attr quick dax
> --
> 2.21.0
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
2020-08-03 8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
2020-08-03 19:54 ` Ira Weiny
@ 2020-08-03 22:25 ` Darrick J. Wong
1 sibling, 0 replies; 13+ messages in thread
From: Darrick J. Wong @ 2020-08-03 22:25 UTC (permalink / raw)
To: Xiao Yang; +Cc: guaneryu, fstests, ira.weiny
On Mon, Aug 03, 2020 at 04:38:38PM +0800, Xiao Yang wrote:
> Also factor out _check_xflag() so that other tests can use it in future.
>
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> common/rc | 12 +++
> tests/generic/607 | 187 ++++++++++++++++++++++++++++++++++++++++++
> tests/generic/607.out | 2 +
> tests/generic/group | 1 +
> 4 files changed, 202 insertions(+)
> create mode 100644 tests/generic/607
> create mode 100644 tests/generic/607.out
>
> diff --git a/common/rc b/common/rc
> index a358702e..9af0aa72 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3209,6 +3209,18 @@ _check_s_dax()
> fi
> }
>
> +_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
> +}
> +
> # Only accept dax/dax=always mount option becasue dax=always, dax=inode
> # and dax=never are always introduced together.
> # Return 0 if filesystem/device supports the specified dax option.
> diff --git a/tests/generic/607 b/tests/generic/607
> new file mode 100644
> index 00000000..f7e17cb3
> --- /dev/null
> +++ b/tests/generic/607
> @@ -0,0 +1,187 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Fujitsu. All Rights Reserved.
> +#
> +# FS QA Test 607
> +#
> +# 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
> +_require_dax_iflag
> +_require_xfs_io_command "lsattr" "-v"
> +
> +# If a/ is +x, check that a's new children
> +# inherit +x from a/.
> +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
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) b's new children inherit -x from b/.
> +# 2) a's new children(b/ is old) inherit +x from 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
> +}
> +
> +# If a/ is -x and b/ is +x, check that:
> +# 1) b's new children inherit +x from b/.
> +# 2) a's new children(b/ is old) inherit -x from 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
> +}
> +
> +# If a/, c/ are +x and b/ is -x, check that:
> +# 1) c's new children inherit +x from c/.
> +# 2) b's new children(c/ is old) inherit -x from b/.
> +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
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) new b/c and b/g inherit -x from b/ by cp.
> +# 2) new a/e inherits +x from a/ by cp.
> +# 3) new b/d preserves +x from a/ by mv.
> +# 4) new a/f and a/h preserve -x from b/ by mv.
> +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_xflag_tests()
> +{
> + local option=$1
> +
> + _scratch_mkfs >> $seqres.full 2>&1
> + _scratch_mount "$option"
> + cd $SCRATCH_MNT
> +
> + for i in $(seq 1 5); do
> + test_xflag_inheritance${i}
> + done
> +
> + cd - > /dev/null
> + _scratch_unmount
> +}
> +
> +do_tests()
> +{
> + # Mount without dax option
> + do_xflag_tests
> +
> + # Mount with 'dax' or 'dax=always' option if fs supports it.
> + _check_scratch_dax_mountopt "dax" && do_xflag_tests "-o dax"
> +
> + # Mount with 'dax=inode' and 'dax=never' options if fs supports them.
> + if _check_scratch_dax_mountopt "dax=always"; then
> + for dax_option in "dax=inode" "dax=never"; do
> + do_xflag_tests "-o $dax_option"
> + done
> + fi
> +}
> +
> +do_tests
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/generic/607.out b/tests/generic/607.out
> new file mode 100644
> index 00000000..d02de53b
> --- /dev/null
> +++ b/tests/generic/607.out
> @@ -0,0 +1,2 @@
> +QA output created by 607
> +Silence is golden
> diff --git a/tests/generic/group b/tests/generic/group
> index 05c6b02d..5bd289c3 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -609,3 +609,4 @@
> 604 auto quick mount
> 605 auto attr quick dax
> 606 auto attr quick dax
> +607 auto attr quick dax
> --
> 2.21.0
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread