* [PATCH v5 0/8] Make fstests support new behavior of DAX
@ 2020-07-09 9:49 Xiao Yang
2020-07-09 9:49 ` [PATCH v5 1/8] common/rc: Introduce new helpers for DAX mount options and FS_XFLAG_DAX Xiao Yang
` (7 more replies)
0 siblings, 8 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
The new behavior of DAX on xfs/ext4 has been merged into main kernel
tree/ext4-dax branch so it is time for fstests to support new behavior
of DAX.
1) Refactor common functions and take use of them.
2) Move and update xfs/260.
3) Add two new tests to verify some features.
References:
https://lkml.org/lkml/2019/10/20/96
https://lkml.org/lkml/2020/5/28/949
Xiao Yang (8):
common/rc: Introduce new helpers for DAX mount options and
FS_XFLAG_DAX
fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
common/rc: Remove unused _require_scratch_dax()
generic/223: Don't clear all mkfs options for _scratch_mkfs_geom()
roughly
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
common/rc | 60 ++++++++--
tests/ext4/030 | 2 +-
tests/ext4/031 | 4 +-
tests/generic/223 | 1 -
tests/generic/413 | 12 +-
tests/generic/462 | 2 +-
tests/{xfs/260 => generic/603} | 74 ++++++------
tests/generic/603.out | 2 +
tests/generic/604 | 100 +++++++++++++++++
tests/generic/604.out | 2 +
tests/generic/605 | 199 +++++++++++++++++++++++++++++++++
tests/generic/605.out | 2 +
tests/generic/group | 3 +
tests/xfs/260.out | 2 -
tests/xfs/group | 1 -
15 files changed, 403 insertions(+), 63 deletions(-)
rename tests/{xfs/260 => generic/603} (53%)
create mode 100644 tests/generic/603.out
create mode 100644 tests/generic/604
create mode 100644 tests/generic/604.out
create mode 100644 tests/generic/605
create mode 100644 tests/generic/605.out
delete mode 100644 tests/xfs/260.out
--
2.21.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v5 1/8] common/rc: Introduce new helpers for DAX mount options and FS_XFLAG_DAX
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
2020-07-14 7:23 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
` (6 subsequent siblings)
7 siblings, 1 reply; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
1) _require_scratch_dax_mountopt() checks both old and new DAX mount option
2) _require_dax_iflag() checks FS_XFLAG_DAX
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
---
V4->V5:
1) Rename _require_scratch_dax_iflag to _require_dax_iflag
2) Redirect the output of _try_scratch_mount to /dev/null
common/rc | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/common/rc b/common/rc
index f17b19f2..498ce230 100644
--- a/common/rc
+++ b/common/rc
@@ -3188,6 +3188,41 @@ _require_scratch_dax()
_scratch_unmount
}
+_require_scratch_dax_mountopt()
+{
+ local mountopt=$1
+ local output
+
+ _require_scratch
+ _scratch_mkfs > /dev/null 2>&1
+ _try_scratch_mount "-o $mountopt" > /dev/null 2>&1 || \
+ _notrun "mount $SCRATCH_DEV with $mountopt failed"
+
+ output=$(_fs_options $SCRATCH_DEV)
+
+ # For new dax mount option, /proc/mounts shows different outputs if we
+ # mount with -o dax=inode on ext4 and xfs so skip checking it.
+ # /proc/mounts shows 'dax=inode' on ext4 but shows nothing on xfs.
+ if [ "$mountopt" != "dax=inode" ]; then
+ echo $output | grep -qw "$mountopt" || \
+ _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
+ fi
+
+ # For new dax mount option, /proc/mounts shows "dax=never" if we
+ # mount with -o dax on xfs and underlying device doesn't support dax.
+ if [ "$mountopt" = "dax" ]; then
+ echo $output | grep -qw "dax=never" && \
+ _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
+ fi
+
+ _scratch_unmount
+}
+
+_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] 10+ messages in thread
* [PATCH v5 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
2020-07-09 9:49 ` [PATCH v5 1/8] common/rc: Introduce new helpers for DAX mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 3/8] common/rc: Remove unused _require_scratch_dax() Xiao Yang
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
Make related tests use _require_scratch_dax_mountopt() and _require_dax_iflag()
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
---
tests/ext4/030 | 2 +-
tests/ext4/031 | 4 ++--
tests/generic/413 | 2 +-
tests/generic/462 | 2 +-
tests/xfs/260 | 4 ++--
5 files changed, 7 insertions(+), 7 deletions(-)
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] 10+ messages in thread
* [PATCH v5 3/8] common/rc: Remove unused _require_scratch_dax()
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
2020-07-09 9:49 ` [PATCH v5 1/8] common/rc: Introduce new helpers for DAX mount options and FS_XFLAG_DAX Xiao Yang
2020-07-09 9:49 ` [PATCH v5 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 4/8] generic/223: Don't clear all mkfs options for _scratch_mkfs_geom() roughly Xiao Yang
` (4 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
---
common/rc | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/common/rc b/common/rc
index 498ce230..3e47f935 100644
--- a/common/rc
+++ b/common/rc
@@ -3175,19 +3175,6 @@ _require_scratch_shutdown()
}
# 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
-}
-
_require_scratch_dax_mountopt()
{
local mountopt=$1
--
2.21.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v5 4/8] generic/223: Don't clear all mkfs options for _scratch_mkfs_geom() roughly
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
` (2 preceding siblings ...)
2020-07-09 9:49 ` [PATCH v5 3/8] common/rc: Remove unused _require_scratch_dax() Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 5/8] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
` (3 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
ext4 can accept the last one if the same mkfs options are passed but xfs cannot
accept the same mkfs options and reports "xxx option is respecified" error. I
prefer to override the same mkfs option which is defined in MKFS_OPTION so that
we can have a chance to pass other mkfs options to _scratch_mkfs_geom().
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
common/rc | 14 +++++++++++++-
tests/generic/223 | 1 -
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/common/rc b/common/rc
index 3e47f935..dbfe92b4 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] 10+ messages in thread
* [PATCH v5 5/8] generic/413, xfs/260: Improve format operation for PMD fault testing
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
` (3 preceding siblings ...)
2020-07-09 9:49 ` [PATCH v5 4/8] generic/223: Don't clear all mkfs options for _scratch_mkfs_geom() roughly Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 6/8] xfs/260: Move and update xfs/260 Xiao Yang
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: 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>
---
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 dbfe92b4..8dbebcda 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] 10+ messages in thread
* [PATCH v5 6/8] xfs/260: Move and update xfs/260
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
` (4 preceding siblings ...)
2020-07-09 9:49 ` [PATCH v5 5/8] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 7/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
2020-07-09 9:49 ` [PATCH v5 8/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
7 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: 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>
---
tests/{xfs/260 => generic/603} | 68 +++++++++++++++++-----------------
tests/generic/603.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/603} (57%)
create mode 100644 tests/generic/603.out
delete mode 100644 tests/xfs/260.out
diff --git a/tests/xfs/260 b/tests/generic/603
similarity index 57%
rename from tests/xfs/260
rename to tests/generic/603
index 81b42f01..1f6a2d45 100755
--- a/tests/xfs/260
+++ b/tests/generic/603
@@ -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 603
#
# 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=inode"
_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/603.out b/tests/generic/603.out
new file mode 100644
index 00000000..6810da89
--- /dev/null
+++ b/tests/generic/603.out
@@ -0,0 +1,2 @@
+QA output created by 603
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index d9ab9a31..1d0d5606 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -605,3 +605,4 @@
600 auto quick quota
601 auto quick quota
602 auto quick encrypt
+603 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 daf54add..71c30898 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] 10+ messages in thread
* [PATCH v5 7/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
` (5 preceding siblings ...)
2020-07-09 9:49 ` [PATCH v5 6/8] xfs/260: Move and update xfs/260 Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 8/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
7 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
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.
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>
---
tests/generic/604 | 100 ++++++++++++++++++++++++++++++++++++++++++
tests/generic/604.out | 2 +
tests/generic/group | 1 +
3 files changed, 103 insertions(+)
create mode 100644 tests/generic/604
create mode 100644 tests/generic/604.out
diff --git a/tests/generic/604 b/tests/generic/604
new file mode 100644
index 00000000..59963dbc
--- /dev/null
+++ b/tests/generic/604
@@ -0,0 +1,100 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu. All Rights Reserved.
+#
+# FS QA Test 604
+#
+# 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
+
+check_s_dax()
+{
+ local exp_s_dax=$1
+
+ local attributes=$($XFS_IO_PROG -c 'statx -r' $TEST_FILE | awk '/stat.attributes / { print $3 }')
+ if [ $exp_s_dax -eq 0 ]; then
+ (( attributes & 0x2000 )) && echo "$TEST_FILE has unexpected S_DAX flag"
+ else
+ (( attributes & 0x2000 )) || echo "$TEST_FILE doen't have expected S_DAX flag"
+ fi
+}
+
+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 $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 $exp_s_dax2
+
+ _scratch_unmount
+}
+
+do_tests()
+{
+ test_s_dax "dax=always" 1 1
+ test_s_dax "dax=inode" 1 0
+ test_s_dax "dax=never" 0 0
+}
+
+_scratch_mkfs >> $seqres.full 2>&1
+
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/604.out b/tests/generic/604.out
new file mode 100644
index 00000000..c06a1c7f
--- /dev/null
+++ b/tests/generic/604.out
@@ -0,0 +1,2 @@
+QA output created by 604
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index 1d0d5606..676e0d2e 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -606,3 +606,4 @@
601 auto quick quota
602 auto quick encrypt
603 auto attr quick dax
+604 auto attr quick dax
--
2.21.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v5 8/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
` (6 preceding siblings ...)
2020-07-09 9:49 ` [PATCH v5 7/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
@ 2020-07-09 9:49 ` Xiao Yang
7 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-09 9:49 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
V1->V5:
Run test with more mount options(i.e. without dax option and with old
dax option).
tests/generic/605 | 199 ++++++++++++++++++++++++++++++++++++++++++
tests/generic/605.out | 2 +
tests/generic/group | 1 +
3 files changed, 202 insertions(+)
create mode 100644 tests/generic/605
create mode 100644 tests/generic/605.out
diff --git a/tests/generic/605 b/tests/generic/605
new file mode 100644
index 00000000..6924223a
--- /dev/null
+++ b/tests/generic/605
@@ -0,0 +1,199 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu. All Rights Reserved.
+#
+# FS QA Test 605
+#
+# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations.
+# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory.
+# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory.
+# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory.
+# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options.
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1 # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+ cd /
+ rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_dax_iflag
+_require_xfs_io_command "lsattr" "-v"
+
+check_xflag()
+{
+ local target=$1
+ local exp_xflag=$2
+
+ if [ $exp_xflag -eq 0 ]; then
+ _test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag"
+ else
+ _test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
+ fi
+}
+
+test_xflag_inheritance1()
+{
+ mkdir -p a
+ $XFS_IO_PROG -c "chattr +x" a
+ mkdir -p a/b/c
+ touch a/b/c/d
+
+ check_xflag a 1
+ check_xflag a/b 1
+ check_xflag a/b/c 1
+ check_xflag a/b/c/d 1
+
+ rm -rf a
+}
+
+test_xflag_inheritance2()
+{
+ mkdir -p a/b
+ $XFS_IO_PROG -c "chattr +x" a
+ mkdir -p a/b/c a/d
+ touch a/b/c/e a/d/f
+
+ check_xflag a 1
+ check_xflag a/b 0
+ check_xflag a/b/c 0
+ check_xflag a/b/c/e 0
+ check_xflag a/d 1
+ check_xflag a/d/f 1
+
+ rm -rf a
+}
+
+test_xflag_inheritance3()
+{
+ mkdir -p a/b
+ $XFS_IO_PROG -c "chattr +x" a/b
+ mkdir -p a/b/c a/d
+ touch a/b/c/e a/d/f
+
+ check_xflag a 0
+ check_xflag a/b 1
+ check_xflag a/b/c 1
+ check_xflag a/b/c/e 1
+ check_xflag a/d 0
+ check_xflag a/d/f 0
+
+ rm -rf a
+}
+
+test_xflag_inheritance4()
+{
+ mkdir -p a
+ $XFS_IO_PROG -c "chattr +x" a
+ mkdir -p a/b/c
+ $XFS_IO_PROG -c "chattr -x" a/b
+ mkdir -p a/b/c/d a/b/e
+ touch a/b/c/d/f a/b/e/g
+
+ check_xflag a 1
+ check_xflag a/b 0
+ check_xflag a/b/c 1
+ check_xflag a/b/c/d 1
+ check_xflag a/b/c/d/f 1
+ check_xflag a/b/e 0
+ check_xflag a/b/e/g 0
+
+ rm -rf a
+}
+
+test_xflag_inheritance5()
+{
+ mkdir -p a b
+ $XFS_IO_PROG -c "chattr +x" a
+ mkdir -p a/c a/d b/e b/f
+ touch a/g b/h
+
+ cp -r a/c b/
+ cp -r b/e a/
+ cp -r a/g b/
+ mv a/d b/
+ mv b/f a/
+ mv b/h a/
+
+ check_xflag b/c 0
+ check_xflag b/d 1
+ check_xflag a/e 1
+ check_xflag a/f 0
+ check_xflag b/g 0
+ check_xflag a/h 0
+
+ rm -rf a b
+}
+
+do_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
+}
+
+check_dax_mountopt()
+{
+ local option=$1
+ local ret=0
+
+ _try_scratch_mount "-o $option" >> $seqres.full 2>&1 || return 1
+
+ # Match option name exactly
+ _fs_options $SCRATCH_DEV | egrep -q "$option(,|$)" || ret=1
+
+ _scratch_unmount
+
+ return $ret
+}
+
+do_tests()
+{
+ # Mount without dax option
+ do_xflag_tests
+
+ # Mount with old dax option if fs only supports it.
+ check_dax_mountopt "dax" && do_xflag_tests "-o dax"
+
+ # Mount with new dax options if fs supports them.
+ if check_dax_mountopt "dax=always"; then
+ for dax_option in "dax=always" "dax=inode" "dax=never"; do
+ do_xflag_tests "-o $dax_option"
+ done
+ fi
+}
+
+_scratch_mkfs >> $seqres.full 2>&1
+
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/605.out b/tests/generic/605.out
new file mode 100644
index 00000000..1ae20049
--- /dev/null
+++ b/tests/generic/605.out
@@ -0,0 +1,2 @@
+QA output created by 605
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index 676e0d2e..a8451862 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -607,3 +607,4 @@
602 auto quick encrypt
603 auto attr quick dax
604 auto attr quick dax
+605 auto attr quick dax
--
2.21.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v5 1/8] common/rc: Introduce new helpers for DAX mount options and FS_XFLAG_DAX
2020-07-09 9:49 ` [PATCH v5 1/8] common/rc: Introduce new helpers for DAX mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-07-14 7:23 ` Xiao Yang
0 siblings, 0 replies; 10+ messages in thread
From: Xiao Yang @ 2020-07-14 7:23 UTC (permalink / raw)
To: Xiao Yang; +Cc: fstests, darrick.wong, ira.weiny
On 2020/7/9 17:49, Xiao Yang wrote:
> 1) _require_scratch_dax_mountopt() checks both old and new DAX mount option
> 2) _require_dax_iflag() checks FS_XFLAG_DAX
>
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> Reviewed-by: Ira Weiny <ira.weiny@intel.com>
> ---
>
> V4->V5:
> 1) Rename _require_scratch_dax_iflag to _require_dax_iflag
> 2) Redirect the output of _try_scratch_mount to /dev/null
>
> common/rc | 35 +++++++++++++++++++++++++++++++++++
> 1 file changed, 35 insertions(+)
>
> diff --git a/common/rc b/common/rc
> index f17b19f2..498ce230 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3188,6 +3188,41 @@ _require_scratch_dax()
> _scratch_unmount
> }
>
> +_require_scratch_dax_mountopt()
> +{
> + local mountopt=$1
> + local output
> +
> + _require_scratch
> + _scratch_mkfs > /dev/null 2>&1
> + _try_scratch_mount "-o $mountopt" > /dev/null 2>&1 || \
> + _notrun "mount $SCRATCH_DEV with $mountopt failed"
> +
> + output=$(_fs_options $SCRATCH_DEV)
> +
> + # For new dax mount option, /proc/mounts shows different outputs if we
> + # mount with -o dax=inode on ext4 and xfs so skip checking it.
> + # /proc/mounts shows 'dax=inode' on ext4 but shows nothing on xfs.
> + if [ "$mountopt" != "dax=inode" ]; then
> + echo $output | grep -qw "$mountopt" || \
> + _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
> + fi
> +
> + # For new dax mount option, /proc/mounts shows "dax=never" if we
> + # mount with -o dax on xfs and underlying device doesn't support dax.
> + if [ "$mountopt" = "dax" ]; then
> + echo $output | grep -qw "dax=never" && \
> + _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
> + fi
> +
> + _scratch_unmount
> +}
Hi Darrick, Ira
I wonder if we just need to check two dax options(i.e. old 'dax' option
and new 'dax=always' option)
because of the following reasons:
1) we cannot detect if underlying device supports dax by mounting
dax=inode or dax=never.
2) dax=always, dax=inode, dax=never are always introduced together on
all distros.
Best Regards,
Xiao Yang
> +
> +_require_dax_iflag()
> +{
> + _require_xfs_io_command "chattr" "x"
> +}
> +
> # Does norecovery support by this fs?
> _require_norecovery()
> {
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-07-14 7:23 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-09 9:49 [PATCH v5 0/8] Make fstests support new behavior of DAX Xiao Yang
2020-07-09 9:49 ` [PATCH v5 1/8] common/rc: Introduce new helpers for DAX mount options and FS_XFLAG_DAX Xiao Yang
2020-07-14 7:23 ` Xiao Yang
2020-07-09 9:49 ` [PATCH v5 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
2020-07-09 9:49 ` [PATCH v5 3/8] common/rc: Remove unused _require_scratch_dax() Xiao Yang
2020-07-09 9:49 ` [PATCH v5 4/8] generic/223: Don't clear all mkfs options for _scratch_mkfs_geom() roughly Xiao Yang
2020-07-09 9:49 ` [PATCH v5 5/8] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
2020-07-09 9:49 ` [PATCH v5 6/8] xfs/260: Move and update xfs/260 Xiao Yang
2020-07-09 9:49 ` [PATCH v5 7/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
2020-07-09 9:49 ` [PATCH v5 8/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).