* [PATCH v9 1/8] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-06 15:16 ` Darrick J. Wong
2020-08-06 2:13 ` [PATCH v9 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
` (7 subsequent siblings)
8 siblings, 1 reply; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, 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 | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/common/rc b/common/rc
index 1b7b2575..fa70453d 100644
--- a/common/rc
+++ b/common/rc
@@ -3188,6 +3188,58 @@ _require_scratch_dax()
_scratch_unmount
}
+# 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.
+_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 v9 1/8] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
2020-08-06 2:13 ` [PATCH v9 1/8] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-08-06 15:16 ` Darrick J. Wong
0 siblings, 0 replies; 13+ messages in thread
From: Darrick J. Wong @ 2020-08-06 15:16 UTC (permalink / raw)
To: Xiao Yang; +Cc: fstests, ira.weiny, guaneryu
On Thu, Aug 06, 2020 at 10:13:35AM +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>
Looks good to me now,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> common/rc | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
> diff --git a/common/rc b/common/rc
> index 1b7b2575..fa70453d 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3188,6 +3188,58 @@ _require_scratch_dax()
> _scratch_unmount
> }
>
> +# 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.
> +_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 [flat|nested] 13+ messages in thread
* [PATCH v9 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
2020-08-06 2:13 ` [PATCH v9 1/8] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-06 2:13 ` [PATCH v9 3/8] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
` (6 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, 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 | 14 --------------
tests/ext4/030 | 2 +-
tests/ext4/031 | 4 ++--
tests/generic/413 | 2 +-
tests/generic/462 | 2 +-
tests/xfs/260 | 4 ++--
6 files changed, 7 insertions(+), 21 deletions(-)
diff --git a/common/rc b/common/rc
index fa70453d..359d03ad 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
-}
-
# Check if dax mount options are supported
#
# $1 can be either 'dax=always' or 'dax'
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 v9 3/8] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom()
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
2020-08-06 2:13 ` [PATCH v9 1/8] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
2020-08-06 2:13 ` [PATCH v9 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-06 2:13 ` [PATCH v9 4/8] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
` (5 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, 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 359d03ad..ad4d080d 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 v9 4/8] generic/413, xfs/260: Improve format operation for PMD fault testing
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
` (2 preceding siblings ...)
2020-08-06 2:13 ` [PATCH v9 3/8] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-06 2:13 ` [PATCH v9 5/8] xfs/260: Move and update xfs/260 Xiao Yang
` (4 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, 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 ad4d080d..98bb1454 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 v9 5/8] xfs/260: Move and update xfs/260
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
` (3 preceding siblings ...)
2020-08-06 2:13 ` [PATCH v9 4/8] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-06 2:13 ` [PATCH v9 6/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
` (3 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, 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} | 73 +++++++++++++++++++---------------
tests/generic/605.out | 2 +
tests/generic/group | 1 +
tests/xfs/260.out | 2 -
tests/xfs/group | 1 -
5 files changed, 43 insertions(+), 36 deletions(-)
rename tests/{xfs/260 => generic/605} (58%)
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 58%
rename from tests/xfs/260
rename to tests/generic/605
index 81b42f01..b2471f02 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,11 @@ t_dax_flag_mmap_dio()
do_tests()
{
+ local mount_option=$1
+
+ _scratch_mount "$mount_option"
+
+ prep_directories
# less than page size
t_dax_flag_mmap_dio 1024
# page size
@@ -119,22 +128,20 @@ do_tests()
# bigger sizes, for PMD faults
t_dax_flag_mmap_dio $((16 * 1024 * 1024))
t_dax_flag_mmap_dio $((64 * 1024 * 1024))
+
+ _scratch_unmount
}
# 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 with dax=inode option
+do_tests "-o dax=inode"
-# mount again without dax option
+# mount without dax option
export MOUNT_OPTIONS=""
-_scratch_mount
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 v9 6/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
` (4 preceding siblings ...)
2020-08-06 2:13 ` [PATCH v9 5/8] xfs/260: Move and update xfs/260 Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-06 2:13 ` [PATCH v9 7/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
` (2 subsequent siblings)
8 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, 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 | 92 +++++++++++++++++++++++++++++++++++++++++++
tests/generic/606.out | 2 +
tests/generic/group | 1 +
4 files changed, 108 insertions(+)
create mode 100644 tests/generic/606
create mode 100644 tests/generic/606.out
diff --git a/common/rc b/common/rc
index 98bb1454..de431c7a 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
+}
+
# Check if dax mount options are supported
#
# $1 can be either 'dax=always' or 'dax'
diff --git a/tests/generic/606 b/tests/generic/606
new file mode 100644
index 00000000..bf7d822d
--- /dev/null
+++ b/tests/generic/606
@@ -0,0 +1,92 @@
+#! /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 "$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
+
+ # Mount with specified dax option
+ test_s_dax "-o dax=always" 1 1
+ test_s_dax "-o dax=never" 0 0
+ test_s_dax "-o dax=inode" 1 0
+ # Mount without dax option
+ export MOUNT_OPTIONS=""
+ test_s_dax "" 1 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 v9 7/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
` (5 preceding siblings ...)
2020-08-06 2:13 ` [PATCH v9 6/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-06 2:13 ` [PATCH v9 8/8] generic: Verify how to change the S_DAX flag on an existing file Xiao Yang
2020-08-07 18:14 ` [PATCH v9 0/8] Make fstests support new behavior of DAX Ira Weiny
8 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, 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>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
common/rc | 12 +++
tests/generic/607 | 189 ++++++++++++++++++++++++++++++++++++++++++
tests/generic/607.out | 2 +
tests/generic/group | 1 +
4 files changed, 204 insertions(+)
create mode 100644 tests/generic/607
create mode 100644 tests/generic/607.out
diff --git a/common/rc b/common/rc
index de431c7a..062eb6ba 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
+}
+
# Check if dax mount options are supported
#
# $1 can be either 'dax=always' or 'dax'
diff --git a/tests/generic/607 b/tests/generic/607
new file mode 100644
index 00000000..b15085ea
--- /dev/null
+++ b/tests/generic/607
@@ -0,0 +1,189 @@
+#! /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_mount "$option"
+ cd $SCRATCH_MNT
+
+ for i in $(seq 1 5); do
+ test_xflag_inheritance${i}
+ done
+
+ cd - > /dev/null
+ _scratch_unmount
+}
+
+do_tests()
+{
+ _scratch_mkfs >> $seqres.full 2>&1
+
+ # Mount without dax option
+ export MOUNT_OPTIONS=""
+ 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
* [PATCH v9 8/8] generic: Verify how to change the S_DAX flag on an existing file
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
` (6 preceding siblings ...)
2020-08-06 2:13 ` [PATCH v9 7/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
@ 2020-08-06 2:13 ` Xiao Yang
2020-08-07 1:45 ` Xiao Yang
2020-08-07 18:14 ` [PATCH v9 0/8] Make fstests support new behavior of DAX Ira Weiny
8 siblings, 1 reply; 13+ messages in thread
From: Xiao Yang @ 2020-08-06 2:13 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, guaneryu, Xiao Yang
Change FS_XFLAG_DAX on an existing file and check if S_DAX on the
file can take effect immediately by the following steps:
1) Stop all applications which are using the file.
2) Do drop_caches or umount & mount cycle.
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
tests/generic/608 | 121 ++++++++++++++++++++++++++++++++++++++++++
tests/generic/608.out | 2 +
tests/generic/group | 1 +
3 files changed, 124 insertions(+)
create mode 100644 tests/generic/608
create mode 100644 tests/generic/608.out
diff --git a/tests/generic/608 b/tests/generic/608
new file mode 100644
index 00000000..a06fc016
--- /dev/null
+++ b/tests/generic/608
@@ -0,0 +1,121 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu. All Rights Reserved.
+#
+# FS QA Test 608
+# Change FS_XFLAG_DAX on an existing file and check if S_DAX on
+# the file can take effect immediately by the following steps:
+# 1) Stop all applications which are using the file.
+# 2) Do drop_caches or umount & mount cycle.
+
+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 "lsattr" "-v"
+_require_xfs_io_command "statx" "-r"
+
+test_drop_caches()
+{
+ local t_file=$SCRATCH_MNT/testfile
+
+ rm -f $t_file
+ touch $t_file
+ _check_xflag $t_file 0
+ _check_s_dax $t_file 0
+
+ exec 3< $t_file
+
+ $XFS_IO_PROG -c 'chattr +x' $t_file
+ _check_xflag $t_file 1
+ _check_s_dax $t_file 0
+
+ # One application is using test file and check if S_DAX on
+ # the file doesn't take effect immediately by drop_caches
+ echo 2 > /proc/sys/vm/drop_caches
+ _check_s_dax $t_file 0
+
+ exec 3<&-
+
+ # No application is using test file and check if S_DAX on
+ # the file takes effect immediately by drop_caches
+ echo 2 > /proc/sys/vm/drop_caches
+ _check_s_dax $t_file 1
+}
+
+test_cycle_mount()
+{
+ local option=$1
+ local t_dir=$SCRATCH_MNT/testdir
+ local t_file=$t_dir/testfile
+
+ mkdir -p $t_dir
+ $XFS_IO_PROG -c 'chattr +x' $t_dir
+ rm -f $t_file
+ touch $t_file
+ _check_xflag $t_file 1
+ _check_s_dax $t_file 1
+
+ exec 3< $t_file
+
+ $XFS_IO_PROG -c 'chattr -x' $t_file
+ _check_xflag $t_file 0
+ _check_s_dax $t_file 1
+
+ exec 3<&-
+
+ # No application is using test file and check if S_DAX on
+ # the file takes effect immediately by umount & mount
+ _scratch_cycle_mount "$option"
+ _check_s_dax $t_file 0
+}
+
+do_tests()
+{
+ local mount_option=$1
+ local cycle_mount_option=$2
+
+ _scratch_mount "$mount_option"
+
+ test_drop_caches
+
+ test_cycle_mount "$cycle_mount_option"
+
+ _scratch_unmount
+}
+
+_scratch_mkfs >> $seqres.full 2>&1
+
+# Mount with dax option
+do_tests "-o dax=inode" "dax=inode"
+
+# Mount without dax option
+export MOUNT_OPTIONS=""
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/608.out b/tests/generic/608.out
new file mode 100644
index 00000000..1e534458
--- /dev/null
+++ b/tests/generic/608.out
@@ -0,0 +1,2 @@
+QA output created by 608
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index 5bd289c3..aa969bcb 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -610,3 +610,4 @@
605 auto attr quick dax
606 auto attr quick dax
607 auto attr quick dax
+608 auto attr quick dax
--
2.21.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v9 8/8] generic: Verify how to change the S_DAX flag on an existing file
2020-08-06 2:13 ` [PATCH v9 8/8] generic: Verify how to change the S_DAX flag on an existing file Xiao Yang
@ 2020-08-07 1:45 ` Xiao Yang
0 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-07 1:45 UTC (permalink / raw)
To: Xiao Yang; +Cc: fstests, darrick.wong, ira.weiny, guaneryu
On 2020/8/6 10:13, Xiao Yang wrote:
> Change FS_XFLAG_DAX on an existing file and check if S_DAX on the
> file can take effect immediately by the following steps:
> 1) Stop all applications which are using the file.
> 2) Do drop_caches or umount & mount cycle.
>
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Hi,
Add Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Thanks,
Xiao Yang
> ---
> tests/generic/608 | 121 ++++++++++++++++++++++++++++++++++++++++++
> tests/generic/608.out | 2 +
> tests/generic/group | 1 +
> 3 files changed, 124 insertions(+)
> create mode 100644 tests/generic/608
> create mode 100644 tests/generic/608.out
>
> diff --git a/tests/generic/608 b/tests/generic/608
> new file mode 100644
> index 00000000..a06fc016
> --- /dev/null
> +++ b/tests/generic/608
> @@ -0,0 +1,121 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Fujitsu. All Rights Reserved.
> +#
> +# FS QA Test 608
> +# Change FS_XFLAG_DAX on an existing file and check if S_DAX on
> +# the file can take effect immediately by the following steps:
> +# 1) Stop all applications which are using the file.
> +# 2) Do drop_caches or umount & mount cycle.
> +
> +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 "lsattr" "-v"
> +_require_xfs_io_command "statx" "-r"
> +
> +test_drop_caches()
> +{
> + local t_file=$SCRATCH_MNT/testfile
> +
> + rm -f $t_file
> + touch $t_file
> + _check_xflag $t_file 0
> + _check_s_dax $t_file 0
> +
> + exec 3< $t_file
> +
> + $XFS_IO_PROG -c 'chattr +x' $t_file
> + _check_xflag $t_file 1
> + _check_s_dax $t_file 0
> +
> + # One application is using test file and check if S_DAX on
> + # the file doesn't take effect immediately by drop_caches
> + echo 2 > /proc/sys/vm/drop_caches
> + _check_s_dax $t_file 0
> +
> + exec 3<&-
> +
> + # No application is using test file and check if S_DAX on
> + # the file takes effect immediately by drop_caches
> + echo 2 > /proc/sys/vm/drop_caches
> + _check_s_dax $t_file 1
> +}
> +
> +test_cycle_mount()
> +{
> + local option=$1
> + local t_dir=$SCRATCH_MNT/testdir
> + local t_file=$t_dir/testfile
> +
> + mkdir -p $t_dir
> + $XFS_IO_PROG -c 'chattr +x' $t_dir
> + rm -f $t_file
> + touch $t_file
> + _check_xflag $t_file 1
> + _check_s_dax $t_file 1
> +
> + exec 3< $t_file
> +
> + $XFS_IO_PROG -c 'chattr -x' $t_file
> + _check_xflag $t_file 0
> + _check_s_dax $t_file 1
> +
> + exec 3<&-
> +
> + # No application is using test file and check if S_DAX on
> + # the file takes effect immediately by umount & mount
> + _scratch_cycle_mount "$option"
> + _check_s_dax $t_file 0
> +}
> +
> +do_tests()
> +{
> + local mount_option=$1
> + local cycle_mount_option=$2
> +
> + _scratch_mount "$mount_option"
> +
> + test_drop_caches
> +
> + test_cycle_mount "$cycle_mount_option"
> +
> + _scratch_unmount
> +}
> +
> +_scratch_mkfs >> $seqres.full 2>&1
> +
> +# Mount with dax option
> +do_tests "-o dax=inode" "dax=inode"
> +
> +# Mount without dax option
> +export MOUNT_OPTIONS=""
> +do_tests
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/generic/608.out b/tests/generic/608.out
> new file mode 100644
> index 00000000..1e534458
> --- /dev/null
> +++ b/tests/generic/608.out
> @@ -0,0 +1,2 @@
> +QA output created by 608
> +Silence is golden
> diff --git a/tests/generic/group b/tests/generic/group
> index 5bd289c3..aa969bcb 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -610,3 +610,4 @@
> 605 auto attr quick dax
> 606 auto attr quick dax
> 607 auto attr quick dax
> +608 auto attr quick dax
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v9 0/8] Make fstests support new behavior of DAX
2020-08-06 2:13 [PATCH v9 0/8] Make fstests support new behavior of DAX Xiao Yang
` (7 preceding siblings ...)
2020-08-06 2:13 ` [PATCH v9 8/8] generic: Verify how to change the S_DAX flag on an existing file Xiao Yang
@ 2020-08-07 18:14 ` Ira Weiny
2020-08-09 17:12 ` Eryu Guan
8 siblings, 1 reply; 13+ messages in thread
From: Ira Weiny @ 2020-08-07 18:14 UTC (permalink / raw)
To: Xiao Yang; +Cc: fstests, darrick.wong, guaneryu
On Thu, Aug 06, 2020 at 10:13:34AM +0800, Xiao Yang wrote:
> The new behavior of DAX on xfs/ext4 has been merged into main kernel
> so it is time for fstests to support new behavior of DAX.
In case it helps...
I think this series has enough review to be applied. Further tests/changes can
be applied on top of this... so I'm going to add
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
For the entire series even though I think Xiao has already put a reviewed by on
all of the individual patches already.
Ira
>
> 1) Refactor common functions and take use of them.
> 2) Move and update xfs/260.
> 3) Add three new tests to verify some features.
>
> References:
> https://lkml.org/lkml/2019/10/20/96
> https://lkml.org/lkml/2020/5/28/949
>
> V7->V8:
> 1) Rebase against the latest xfstests.
> 2) Factor out _check_s_dax() and _check_xflag().
>
> V8->V9:
> 1) Squash a new test(generic/608) into the patch set.
> 2) Add a new combination(without dax option) for all related tests(generic/605,
> generic/606, generic/608).
> 3) In generic/607, factor out _scratch_mkfs() and export MOUNT_OPTIONS=""
> for a combination(without dax option).
>
> Xiao Yang (8):
> common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
> fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
> generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom()
> generic/413, xfs/260: Improve format operation for PMD fault testing
> xfs/260: Move and update xfs/260
> generic: Verify if statx() can qurey S_DAX flag on regular file correctly
> generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
> generic: Verify how to change the S_DAX flag on an existing file
>
> common/rc | 105 ++++++++++++++++--
> tests/ext4/030 | 2 +-
> tests/ext4/031 | 4 +-
> tests/generic/223 | 1 -
> tests/generic/413 | 12 +--
> tests/generic/462 | 2 +-
> tests/{xfs/260 => generic/605} | 79 +++++++-------
> tests/generic/605.out | 2 +
> tests/generic/606 | 92 ++++++++++++++++
> tests/generic/606.out | 2 +
> tests/generic/607 | 189 +++++++++++++++++++++++++++++++++
> tests/generic/607.out | 2 +
> tests/generic/608 | 121 +++++++++++++++++++++
> tests/generic/608.out | 2 +
> tests/generic/group | 4 +
> tests/xfs/260.out | 2 -
> tests/xfs/group | 1 -
> 17 files changed, 559 insertions(+), 63 deletions(-)
> rename tests/{xfs/260 => generic/605} (54%)
> create mode 100644 tests/generic/605.out
> create mode 100644 tests/generic/606
> create mode 100644 tests/generic/606.out
> create mode 100644 tests/generic/607
> create mode 100644 tests/generic/607.out
> create mode 100644 tests/generic/608
> create mode 100644 tests/generic/608.out
> delete mode 100644 tests/xfs/260.out
>
> --
> 2.21.0
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v9 0/8] Make fstests support new behavior of DAX
2020-08-07 18:14 ` [PATCH v9 0/8] Make fstests support new behavior of DAX Ira Weiny
@ 2020-08-09 17:12 ` Eryu Guan
0 siblings, 0 replies; 13+ messages in thread
From: Eryu Guan @ 2020-08-09 17:12 UTC (permalink / raw)
To: Ira Weiny, Xiao Yang; +Cc: Xiao Yang, fstests, darrick.wong, guaneryu
On Fri, Aug 07, 2020 at 11:14:39AM -0700, Ira Weiny wrote:
> On Thu, Aug 06, 2020 at 10:13:34AM +0800, Xiao Yang wrote:
> > The new behavior of DAX on xfs/ext4 has been merged into main kernel
> > so it is time for fstests to support new behavior of DAX.
>
> In case it helps...
>
> I think this series has enough review to be applied. Further tests/changes can
> be applied on top of this... so I'm going to add
>
> Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Thanks a lot for the reviews! Also many thanks to Darrick for his
review!
>
> For the entire series even though I think Xiao has already put a reviewed by on
> all of the individual patches already.
Xiao, thank you so much for the great patchset!
Thanks,
Eryu
>
> Ira
>
> >
> > 1) Refactor common functions and take use of them.
> > 2) Move and update xfs/260.
> > 3) Add three new tests to verify some features.
> >
> > References:
> > https://lkml.org/lkml/2019/10/20/96
> > https://lkml.org/lkml/2020/5/28/949
> >
> > V7->V8:
> > 1) Rebase against the latest xfstests.
> > 2) Factor out _check_s_dax() and _check_xflag().
> >
> > V8->V9:
> > 1) Squash a new test(generic/608) into the patch set.
> > 2) Add a new combination(without dax option) for all related tests(generic/605,
> > generic/606, generic/608).
> > 3) In generic/607, factor out _scratch_mkfs() and export MOUNT_OPTIONS=""
> > for a combination(without dax option).
> >
> > Xiao Yang (8):
> > common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
> > fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
> > generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom()
> > generic/413, xfs/260: Improve format operation for PMD fault testing
> > xfs/260: Move and update xfs/260
> > generic: Verify if statx() can qurey S_DAX flag on regular file correctly
> > generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
> > generic: Verify how to change the S_DAX flag on an existing file
> >
> > common/rc | 105 ++++++++++++++++--
> > tests/ext4/030 | 2 +-
> > tests/ext4/031 | 4 +-
> > tests/generic/223 | 1 -
> > tests/generic/413 | 12 +--
> > tests/generic/462 | 2 +-
> > tests/{xfs/260 => generic/605} | 79 +++++++-------
> > tests/generic/605.out | 2 +
> > tests/generic/606 | 92 ++++++++++++++++
> > tests/generic/606.out | 2 +
> > tests/generic/607 | 189 +++++++++++++++++++++++++++++++++
> > tests/generic/607.out | 2 +
> > tests/generic/608 | 121 +++++++++++++++++++++
> > tests/generic/608.out | 2 +
> > tests/generic/group | 4 +
> > tests/xfs/260.out | 2 -
> > tests/xfs/group | 1 -
> > 17 files changed, 559 insertions(+), 63 deletions(-)
> > rename tests/{xfs/260 => generic/605} (54%)
> > create mode 100644 tests/generic/605.out
> > create mode 100644 tests/generic/606
> > create mode 100644 tests/generic/606.out
> > create mode 100644 tests/generic/607
> > create mode 100644 tests/generic/607.out
> > create mode 100644 tests/generic/608
> > create mode 100644 tests/generic/608.out
> > delete mode 100644 tests/xfs/260.out
> >
> > --
> > 2.21.0
> >
> >
> >
^ permalink raw reply [flat|nested] 13+ messages in thread