* [PATCH v7 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
2020-07-16 5:16 [PATCH v7 0/7] Make fstests support new behavior of DAX Xiao Yang
@ 2020-07-16 5:16 ` Xiao Yang
2020-07-16 5:16 ` [PATCH v7 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2020-07-16 5:16 UTC (permalink / raw)
To: fstests; +Cc: 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 f17b19f2..4427ce47 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] 8+ messages in thread
* [PATCH v7 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
2020-07-16 5:16 [PATCH v7 0/7] Make fstests support new behavior of DAX Xiao Yang
2020-07-16 5:16 ` [PATCH v7 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-07-16 5:16 ` Xiao Yang
2020-07-16 5:16 ` [PATCH v7 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2020-07-16 5:16 UTC (permalink / raw)
To: fstests; +Cc: 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 4427ce47..965b9ae9 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] 8+ messages in thread
* [PATCH v7 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom()
2020-07-16 5:16 [PATCH v7 0/7] Make fstests support new behavior of DAX Xiao Yang
2020-07-16 5:16 ` [PATCH v7 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
2020-07-16 5:16 ` [PATCH v7 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
@ 2020-07-16 5:16 ` Xiao Yang
2020-07-16 5:16 ` [PATCH v7 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2020-07-16 5:16 UTC (permalink / raw)
To: fstests; +Cc: 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 965b9ae9..1e037b4b 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] 8+ messages in thread
* [PATCH v7 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing
2020-07-16 5:16 [PATCH v7 0/7] Make fstests support new behavior of DAX Xiao Yang
` (2 preceding siblings ...)
2020-07-16 5:16 ` [PATCH v7 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
@ 2020-07-16 5:16 ` Xiao Yang
2020-07-16 5:16 ` [PATCH v7 5/7] xfs/260: Move and update xfs/260 Xiao Yang
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2020-07-16 5:16 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>
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 1e037b4b..856a7ac8 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] 8+ messages in thread
* [PATCH v7 5/7] xfs/260: Move and update xfs/260
2020-07-16 5:16 [PATCH v7 0/7] Make fstests support new behavior of DAX Xiao Yang
` (3 preceding siblings ...)
2020-07-16 5:16 ` [PATCH v7 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
@ 2020-07-16 5:16 ` Xiao Yang
2020-07-16 5:16 ` [PATCH v7 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
2020-07-16 5:16 ` [PATCH v7 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
6 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2020-07-16 5:16 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>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.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..5dabe447 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=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/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] 8+ messages in thread
* [PATCH v7 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly
2020-07-16 5:16 [PATCH v7 0/7] Make fstests support new behavior of DAX Xiao Yang
` (4 preceding siblings ...)
2020-07-16 5:16 ` [PATCH v7 5/7] xfs/260: Move and update xfs/260 Xiao Yang
@ 2020-07-16 5:16 ` Xiao Yang
2020-07-16 5:16 ` [PATCH v7 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
6 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2020-07-16 5:16 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..22779f76
--- /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()
+{
+ _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/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] 8+ messages in thread
* [PATCH v7 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
2020-07-16 5:16 [PATCH v7 0/7] Make fstests support new behavior of DAX Xiao Yang
` (5 preceding siblings ...)
2020-07-16 5:16 ` [PATCH v7 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
@ 2020-07-16 5:16 ` Xiao Yang
6 siblings, 0 replies; 8+ messages in thread
From: Xiao Yang @ 2020-07-16 5:16 UTC (permalink / raw)
To: fstests; +Cc: darrick.wong, ira.weiny, Xiao Yang
Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
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..65f8d442
--- /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
+}
+
+# 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/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] 8+ messages in thread