All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 0/7] Make fstests support new behavior of DAX
@ 2020-08-03  8:38 Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

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.

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

V7->V8:
1) Rebase against the latest xfstests.
2) Factor out _check_s_dax() and _check_xflag().

Xiao Yang (7):
  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

 common/rc                      |  96 +++++++++++++++--
 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} |  74 +++++++------
 tests/generic/605.out          |   2 +
 tests/generic/606              |  88 ++++++++++++++++
 tests/generic/606.out          |   2 +
 tests/generic/607              | 187 +++++++++++++++++++++++++++++++++
 tests/generic/607.out          |   2 +
 tests/generic/group            |   3 +
 tests/xfs/260.out              |   2 -
 tests/xfs/group                |   1 -
 15 files changed, 413 insertions(+), 65 deletions(-)
 rename tests/{xfs/260 => generic/605} (53%)
 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
 delete mode 100644 tests/xfs/260.out

-- 
2.21.0




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
  2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
@ 2020-08-03  8:38 ` Xiao Yang
  2020-08-03 19:49   ` Ira Weiny
  2020-08-03  8:38 ` [PATCH v8 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

1) _check_scratch_dax_mountopt() checks old/new dax mount option and
   returns a value.
2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
   returns a non-zero value.
3) _require_dax_iflag() checks FS_XFLAG_DAX.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/common/rc b/common/rc
index 1b7b2575..d7926bc5 100644
--- a/common/rc
+++ b/common/rc
@@ -3188,6 +3188,48 @@ _require_scratch_dax()
 	_scratch_unmount
 }
 
+# Only accept dax/dax=always mount option becasue dax=always, dax=inode
+# and dax=never are always introduced together.
+# Return 0 if filesystem/device supports the specified dax option.
+# Return 1 if mount fails with the specified dax option.
+# Return 2 if /proc/mounts shows wrong dax option.
+# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
+# Check old dax or new dax=always by passing "dax".
+_check_scratch_dax_mountopt()
+{
+	local option=$1
+
+	_require_scratch
+	_scratch_mkfs > /dev/null 2>&1
+
+	_try_scratch_mount "-o $option" > /dev/null 2>&1 || return 1
+
+	if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
+		_scratch_unmount
+		return 0
+	else
+		_scratch_unmount
+		return 2
+	fi
+}
+
+# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
+_require_scratch_dax_mountopt()
+{
+	local mountopt=$1
+
+	_check_scratch_dax_mountopt "$mountopt"
+	local res=$?
+
+	[ $res -eq 1 ] && _notrun "mount $SCRATCH_DEV with $mountopt failed"
+	[ $res -eq 2 ] && _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
+}
+
+_require_dax_iflag()
+{
+	_require_xfs_io_command "chattr" "x"
+}
+
 # Does norecovery support by this fs?
 _require_norecovery()
 {
-- 
2.21.0




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v8 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag()
  2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-08-03  8:38 ` Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

1) Make related tests use _require_scratch_dax_mountopt() and _require_dax_iflag().
2) Remove unused _require_scratch_dax().

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 common/rc         | 15 +--------------
 tests/ext4/030    |  2 +-
 tests/ext4/031    |  4 ++--
 tests/generic/413 |  2 +-
 tests/generic/462 |  2 +-
 tests/xfs/260     |  4 ++--
 6 files changed, 8 insertions(+), 21 deletions(-)

diff --git a/common/rc b/common/rc
index d7926bc5..1f8c86c0 100644
--- a/common/rc
+++ b/common/rc
@@ -3174,20 +3174,6 @@ _require_scratch_shutdown()
 	_scratch_unmount
 }
 
-# Does dax mount option work on this dev/fs?
-_require_scratch_dax()
-{
-	_require_scratch
-	_scratch_mkfs > /dev/null 2>&1
-	_try_scratch_mount -o dax || \
-		_notrun "mount $SCRATCH_DEV with dax failed"
-	# Check options to be sure. XFS ignores dax option
-	# and goes on if dev underneath does not support dax.
-	_fs_options $SCRATCH_DEV | grep -qw "dax" || \
-		_notrun "$SCRATCH_DEV $FSTYP does not support -o dax"
-	_scratch_unmount
-}
-
 # Only accept dax/dax=always mount option becasue dax=always, dax=inode
 # and dax=never are always introduced together.
 # Return 0 if filesystem/device supports the specified dax option.
@@ -3213,6 +3199,7 @@ _check_scratch_dax_mountopt()
 	fi
 }
 
+# Does dax mount option work on this dev/fs?
 # Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
 _require_scratch_dax_mountopt()
 {
diff --git a/tests/ext4/030 b/tests/ext4/030
index 93bbca86..fb5cf451 100755
--- a/tests/ext4/030
+++ b/tests/ext4/030
@@ -33,7 +33,7 @@ rm -f $seqres.full
 # Modify as appropriate.
 _supported_os Linux
 _supported_fs ext4
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
 _require_test_program "t_ext4_dax_journal_corruption"
 _require_command "$CHATTR_PROG" chattr
 
diff --git a/tests/ext4/031 b/tests/ext4/031
index dc58214e..20e2fab7 100755
--- a/tests/ext4/031
+++ b/tests/ext4/031
@@ -37,7 +37,7 @@ MOUNT_OPTIONS=""
 # Modify as appropriate.
 _supported_os Linux
 _supported_fs ext4
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
 _require_test_program "t_ext4_dax_inline_corruption"
 _require_scratch_ext4_feature "inline_data"
 
@@ -56,7 +56,7 @@ _scratch_unmount >> $seqres.full 2>&1
 _try_scratch_mount "-o dax" >> $seqres.full 2>&1
 
 if [[ $? != 0 ]]; then
-	# _require_scratch_dax already verified that we could mount with DAX.
+	# _require_scratch_dax_mountopt already verified that we could mount with DAX.
 	# Failure here is expected because we have inline data.
 	echo "Silence is golden"
 	status=0
diff --git a/tests/generic/413 b/tests/generic/413
index 1ce89aff..19e1b926 100755
--- a/tests/generic/413
+++ b/tests/generic/413
@@ -31,7 +31,7 @@ rm -f $seqres.full
 _supported_fs generic
 _supported_os Linux
 _require_test
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
 _require_test_program "feature"
 _require_test_program "t_mmap_dio"
 _require_xfs_io_command "falloc"
diff --git a/tests/generic/462 b/tests/generic/462
index 1ab6cadc..4a940239 100755
--- a/tests/generic/462
+++ b/tests/generic/462
@@ -37,7 +37,7 @@ rm -f $seqres.full
 _supported_fs generic
 _supported_os Linux
 _require_test
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
 _require_test_program "t_mmap_write_ro"
 # running by unpriviliged user is not necessary to reproduce
 # this bug, just trying to test more.
diff --git a/tests/xfs/260 b/tests/xfs/260
index 3464ffef..bcdc6041 100755
--- a/tests/xfs/260
+++ b/tests/xfs/260
@@ -30,10 +30,10 @@ rm -f $seqres.full
 
 _supported_fs xfs
 _supported_os Linux
-_require_scratch_dax
+_require_scratch_dax_mountopt "dax"
 _require_test_program "feature"
 _require_test_program "t_mmap_dio"
-_require_xfs_io_command "chattr" "x"
+_require_dax_iflag
 _require_xfs_io_command "falloc"
 
 prep_files()
-- 
2.21.0




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v8 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom()
  2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
@ 2020-08-03  8:38 ` Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

Current _scratch_mkfs_geom() adds geometry parameters to the end of the
MKFS_OPTIONS blindly.  ext4 can accept the last one if geometry parameters
and original MKFS_OPTION have the same mkfs options but xfs cannot accept
them and reports "xxx option is respecified" error.  Make _scratch_mkfs_geom()
override the same mkfs options in original MKFS_OPTION by geometry parameters.

With this change, generic/223 doesn't need to clear original MKFS_OPTION
before calling _scratch_mkfs_geom() and can use other mkfs options in original
MKFS_OPTION.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 common/rc         | 14 +++++++++++++-
 tests/generic/223 |  1 -
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/common/rc b/common/rc
index 1f8c86c0..0c4d02b9 100644
--- a/common/rc
+++ b/common/rc
@@ -1051,7 +1051,19 @@ _scratch_mkfs_geom()
 
     case $FSTYP in
     xfs)
-	MKFS_OPTIONS+=" -b size=$blocksize, -d su=$sunit_bytes,sw=$swidth_mult"
+	if echo "$MKFS_OPTIONS" | egrep -q "b?size="; then
+		MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r "s/(b?size=)[0-9]+/\1$blocksize/")
+	else
+		MKFS_OPTIONS+=" -b size=$blocksize"
+	fi
+
+	if echo "$MKFS_OPTIONS" | egrep -q "(su|sunit|sw|swidth)="; then
+		MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r \
+			-e "s/(su|sunit)=[0-9kmg]+/su=$sunit_bytes/" \
+			-e "s/(sw|swidth)=[0-9kmg]+/sw=$swidth_mult/")
+	else
+		MKFS_OPTIONS+=" -d su=$sunit_bytes,sw=$swidth_mult"
+	fi
 	;;
     ext4|ext4dev)
 	MKFS_OPTIONS+=" -b $blocksize -E stride=$sunit_blocks,stripe_width=$swidth_blocks"
diff --git a/tests/generic/223 b/tests/generic/223
index 6cfd00dd..ba7c9a44 100755
--- a/tests/generic/223
+++ b/tests/generic/223
@@ -41,7 +41,6 @@ for SUNIT_K in 8 16 32 64 128; do
 	let SUNIT_BLOCKS=$SUNIT_BYTES/$BLOCKSIZE
 
 	echo "=== mkfs with su $SUNIT_BLOCKS blocks x 4 ==="
-	export MKFS_OPTIONS=""
 	_scratch_mkfs_geom $SUNIT_BYTES 4 $BLOCKSIZE >> $seqres.full 2>&1
 	_scratch_mount
 
-- 
2.21.0




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v8 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing
  2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
                   ` (2 preceding siblings ...)
  2020-08-03  8:38 ` [PATCH v8 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
@ 2020-08-03  8:38 ` Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 5/7] xfs/260: Move and update xfs/260 Xiao Yang
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

1) Simple code and fix the wrong value of stripe_width by _scratch_mkfs_geom().
2) Get hugepage size by _get_hugepagesize() and replace fixed 2M with
   hugepage size because hugepage size/PMD_SIZE is not 2M on some
   arches(e.g. hugepage size/PMD_SIZE is 512M on arm64).
3) For debugging, redirect the output of mkfs to $seqres.full.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 common/rc         | 10 ++++++++++
 tests/generic/413 | 10 ++--------
 tests/xfs/260     |  4 ++--
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/common/rc b/common/rc
index 0c4d02b9..75b20f96 100644
--- a/common/rc
+++ b/common/rc
@@ -170,6 +170,16 @@ _get_filesize()
     stat -c %s "$1"
 }
 
+# Get hugepagesize in bytes
+_get_hugepagesize()
+{
+	local hugepgsz=$(awk '/Hugepagesize/ {print $2}' /proc/meminfo)
+	# Call _notrun if $hugepgsz is not a number
+	echo "$hugepgsz" | egrep -q ^[0-9]+$ || \
+		_notrun "Cannot get the value of Hugepagesize"
+	echo $((hugepgsz * 1024))
+}
+
 _mount()
 {
     $MOUNT_PROG `_mount_ops_filter $*`
diff --git a/tests/generic/413 b/tests/generic/413
index 19e1b926..dfe2912b 100755
--- a/tests/generic/413
+++ b/tests/generic/413
@@ -111,14 +111,8 @@ do_tests()
 	t_mmap_dio_dax $((64 * 1024 * 1024))
 }
 
-# make fs 2Mb aligned for PMD fault testing
-mkfs_opts=""
-if [ "$FSTYP" == "ext4" ]; then
-	mkfs_opts="-E stride=512,stripe_width=1"
-elif [ "$FSTYP" == "xfs" ]; then
-	mkfs_opts="-d su=2m,sw=1"
-fi
-_scratch_mkfs "$mkfs_opts" > /dev/null 2>&1
+# make fs aligned for PMD fault testing
+_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1
 
 # mount SCRATCH_DEV with dax option, TEST_DEV not
 export MOUNT_OPTIONS=""
diff --git a/tests/xfs/260 b/tests/xfs/260
index bcdc6041..81b42f01 100755
--- a/tests/xfs/260
+++ b/tests/xfs/260
@@ -121,8 +121,8 @@ do_tests()
 	t_dax_flag_mmap_dio $((64 * 1024 * 1024))
 }
 
-# make xfs 2Mb aligned for PMD fault testing
-_scratch_mkfs "-d su=2m,sw=1" > /dev/null 2>&1
+# make xfs aligned for PMD fault testing
+_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1
 
 # mount with dax option
 _scratch_mount "-o dax"
-- 
2.21.0




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v8 5/7] xfs/260: Move and update xfs/260
  2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
                   ` (3 preceding siblings ...)
  2020-08-03  8:38 ` [PATCH v8 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
@ 2020-08-03  8:38 ` Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
  6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

1) Both ext4 and xfs have supported FS_XFLAG_DAX so move it to generic.
2) Modifying FS_XFLAG_DAX on flies does not take effect immediately so
   make files inherit the DAX state of parent directory.
3) Setting/clearing FS_XFLAG_DAX have no chance to change S_DAX flag if
   mount with dax option so remove the related subtest.
4) Setting/clearing FS_XFLAG_DAX doesn't change S_DAX flag on older xfs
   due to commit 742d84290739 ("xfs: disable per-inode DAX flag") so
   only do test when fs supports new dax=inode option.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 tests/{xfs/260 => generic/605} | 68 +++++++++++++++++-----------------
 tests/generic/605.out          |  2 +
 tests/generic/group            |  1 +
 tests/xfs/260.out              |  2 -
 tests/xfs/group                |  1 -
 5 files changed, 36 insertions(+), 38 deletions(-)
 rename tests/{xfs/260 => generic/605} (57%)
 create mode 100644 tests/generic/605.out
 delete mode 100644 tests/xfs/260.out

diff --git a/tests/xfs/260 b/tests/generic/605
similarity index 57%
rename from tests/xfs/260
rename to tests/generic/605
index 81b42f01..00ddb1f0 100755
--- a/tests/xfs/260
+++ b/tests/generic/605
@@ -2,7 +2,7 @@
 # SPDX-License-Identifier: GPL-2.0
 # Copyright (c) 2017 Red Hat Inc.  All Rights Reserved.
 #
-# FS QA Test 260
+# FS QA Test 605
 #
 # Test per-inode DAX flag by mmap direct/buffered IO.
 #
@@ -28,76 +28,80 @@ _cleanup()
 # remove previous $seqres.full before test
 rm -f $seqres.full
 
-_supported_fs xfs
+_supported_fs generic
 _supported_os Linux
-_require_scratch_dax_mountopt "dax"
+_require_scratch_dax_mountopt "dax=always"
 _require_test_program "feature"
 _require_test_program "t_mmap_dio"
 _require_dax_iflag
 _require_xfs_io_command "falloc"
 
-prep_files()
+SRC_DIR=$SCRATCH_MNT/src
+SRC_FILE=$SRC_DIR/tf_s
+DST_DIR=$SCRATCH_MNT/dst
+DST_FILE=$DST_DIR/tf_d
+
+prep_directories()
 {
-	rm -f $SCRATCH_MNT/tf_{s,d}
+	mkdir -p $SRC_DIR $DST_DIR
+}
 
+prep_files()
+{
+	rm -f $SRC_FILE $DST_FILE
 	$XFS_IO_PROG -f -c "falloc 0 $tsize" \
-		$SCRATCH_MNT/tf_{s,d} >> $seqres.full 2>&1
+		$SRC_FILE $DST_FILE >> $seqres.full 2>&1
 }
 
 t_both_dax()
 {
+	$XFS_IO_PROG -c "chattr +x" $SRC_DIR $DST_DIR
 	prep_files
-	$XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d}
 	# with O_DIRECT first
-	$here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} $1 "dio both dax"
+	$here/src/t_mmap_dio $SRC_FILE $DST_FILE \
+		$1 "dio both dax"
 
 	prep_files
-	$XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d}
 	# again with buffered IO
-	$here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+	$here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
 		$1 "buffered both dax"
 }
 
 t_nondax_to_dax()
 {
+	$XFS_IO_PROG -c "chattr -x" $SRC_DIR
+	$XFS_IO_PROG -c "chattr +x" $DST_DIR
 	prep_files
-	$XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_s
-	$XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_d
-	$here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \
+	$here/src/t_mmap_dio $SRC_FILE $DST_FILE \
 		$1 "dio nondax to dax"
 
 	prep_files
-	$XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_s
-	$XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_d
-	$here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+	$here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
 		$1 "buffered nondax to dax"
 }
 
 t_dax_to_nondax()
 {
+	$XFS_IO_PROG -c "chattr +x" $SRC_DIR
+	$XFS_IO_PROG -c "chattr -x" $DST_DIR
 	prep_files
-	$XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_s
-	$XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_d
-	$here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \
+	$here/src/t_mmap_dio $SRC_FILE $DST_FILE \
 		$1 "dio dax to nondax"
 
 	prep_files
-	$XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_s
-	$XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_d
-	$here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+	$here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
 		$1 "buffered dax to nondax"
 }
 
 t_both_nondax()
 {
+	$XFS_IO_PROG -c "chattr -x" $SRC_DIR $DST_DIR
 	prep_files
-	$XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d}
-	$here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \
+	$here/src/t_mmap_dio $SRC_FILE $DST_FILE \
 		$1 "dio both nondax"
 
 	prep_files
-	$XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d}
-	$here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+	$here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
 		$1 "buffered both nondax"
 }
 
@@ -112,6 +116,7 @@ t_dax_flag_mmap_dio()
 
 do_tests()
 {
+	prep_directories
 	# less than page size
 	t_dax_flag_mmap_dio 1024
 	# page size
@@ -124,17 +129,10 @@ do_tests()
 # make xfs aligned for PMD fault testing
 _scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1
 
-# mount with dax option
-_scratch_mount "-o dax"
-
 tsize=$((128 * 1024 * 1024))
 
-do_tests
-_scratch_unmount
-
-# mount again without dax option
-export MOUNT_OPTIONS=""
-_scratch_mount
+# mount with dax=inode option
+_scratch_mount "-o dax=inode"
 do_tests
 
 # success, all done
diff --git a/tests/generic/605.out b/tests/generic/605.out
new file mode 100644
index 00000000..1ae20049
--- /dev/null
+++ b/tests/generic/605.out
@@ -0,0 +1,2 @@
+QA output created by 605
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index 75d56838..d06c1bf6 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -607,3 +607,4 @@
 602 auto quick encrypt
 603 auto quick quota
 604 auto quick mount
+605 auto attr quick dax
diff --git a/tests/xfs/260.out b/tests/xfs/260.out
deleted file mode 100644
index 18ca517c..00000000
--- a/tests/xfs/260.out
+++ /dev/null
@@ -1,2 +0,0 @@
-QA output created by 260
-Silence is golden
diff --git a/tests/xfs/group b/tests/xfs/group
index d6e8d1c3..ed0d389e 100644
--- a/tests/xfs/group
+++ b/tests/xfs/group
@@ -257,7 +257,6 @@
 257 auto quick clone
 258 auto quick clone
 259 auto quick
-260 auto attr quick dax
 261 auto quick quota
 262 dangerous_fuzzers dangerous_scrub dangerous_online_repair
 263 auto quick quota
-- 
2.21.0




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v8 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly
  2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
                   ` (4 preceding siblings ...)
  2020-08-03  8:38 ` [PATCH v8 5/7] xfs/260: Move and update xfs/260 Xiao Yang
@ 2020-08-03  8:38 ` Xiao Yang
  2020-08-03  8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
  6 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

1) With new kernel(e.g. v5.8-rc1), statx() can be used to qurey S_DAX flag
   on regular file, so add a test to verify the feature.
2) Factor out _check_s_dax() so that other tests can use it in future.

Reference:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=712b2698e4c024b561694cbcc1abba13eb0fd9ce

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 common/rc             | 13 +++++++
 tests/generic/606     | 88 +++++++++++++++++++++++++++++++++++++++++++
 tests/generic/606.out |  2 +
 tests/generic/group   |  1 +
 4 files changed, 104 insertions(+)
 create mode 100644 tests/generic/606
 create mode 100644 tests/generic/606.out

diff --git a/common/rc b/common/rc
index 75b20f96..a358702e 100644
--- a/common/rc
+++ b/common/rc
@@ -3196,6 +3196,19 @@ _require_scratch_shutdown()
 	_scratch_unmount
 }
 
+_check_s_dax()
+{
+	local target=$1
+	local exp_s_dax=$2
+
+	local attributes=$($XFS_IO_PROG -c 'statx -r' $target | awk '/stat.attributes / { print $3 }')
+	if [ $exp_s_dax -eq 0 ]; then
+		(( attributes & 0x2000 )) && echo "$target has unexpected S_DAX flag"
+	else
+		(( attributes & 0x2000 )) || echo "$target doen't have expected S_DAX flag"
+	fi
+}
+
 # Only accept dax/dax=always mount option becasue dax=always, dax=inode
 # and dax=never are always introduced together.
 # Return 0 if filesystem/device supports the specified dax option.
diff --git a/tests/generic/606 b/tests/generic/606
new file mode 100644
index 00000000..6257ab6c
--- /dev/null
+++ b/tests/generic/606
@@ -0,0 +1,88 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu.  All Rights Reserved.
+#
+# FS QA Test 606
+#
+# By the following cases, verify if statx() can query S_DAX flag
+# on regular file correctly.
+# 1) With dax=always option, FS_XFLAG_DAX is ignored and S_DAX flag
+#    always exists on regular file.
+# 2) With dax=inode option, setting/clearing FS_XFLAG_DAX can change
+#    S_DAX flag on regular file.
+# 3) With dax=never option, FS_XFLAG_DAX is ignored and S_DAX flag
+#    never exists on regular file.
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1        # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+_supported_fs generic
+_supported_os Linux
+_require_scratch_dax_mountopt "dax=always"
+_require_dax_iflag
+_require_xfs_io_command "statx" "-r"
+
+PARENT_DIR=$SCRATCH_MNT/testdir
+TEST_FILE=$PARENT_DIR/testfile
+
+test_s_dax()
+{
+	local dax_option=$1
+	local exp_s_dax1=$2
+	local exp_s_dax2=$3
+
+	# Mount with specified dax option
+	_scratch_mount "-o $dax_option"
+
+	# Prepare directory
+	mkdir -p $PARENT_DIR
+
+	rm -f $TEST_FILE
+	$XFS_IO_PROG -c "chattr +x" $PARENT_DIR
+	touch $TEST_FILE
+	# Check if setting FS_XFLAG_DAX changes S_DAX flag
+	_check_s_dax $TEST_FILE $exp_s_dax1
+
+	rm -f $TEST_FILE
+	$XFS_IO_PROG -c "chattr -x" $PARENT_DIR
+	touch $TEST_FILE
+	# Check if clearing FS_XFLAG_DAX changes S_DAX flag
+	_check_s_dax $TEST_FILE $exp_s_dax2
+
+	_scratch_unmount
+}
+
+do_tests()
+{
+	_scratch_mkfs >> $seqres.full 2>&1
+
+	test_s_dax "dax=always" 1 1
+	test_s_dax "dax=inode" 1 0
+	test_s_dax "dax=never" 0 0
+}
+
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/606.out b/tests/generic/606.out
new file mode 100644
index 00000000..09bf888e
--- /dev/null
+++ b/tests/generic/606.out
@@ -0,0 +1,2 @@
+QA output created by 606
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index d06c1bf6..05c6b02d 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -608,3 +608,4 @@
 603 auto quick quota
 604 auto quick mount
 605 auto attr quick dax
+606 auto attr quick dax
-- 
2.21.0




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
  2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
                   ` (5 preceding siblings ...)
  2020-08-03  8:38 ` [PATCH v8 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
@ 2020-08-03  8:38 ` Xiao Yang
  2020-08-03 19:54   ` Ira Weiny
  2020-08-03 22:25   ` Darrick J. Wong
  6 siblings, 2 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-03  8:38 UTC (permalink / raw)
  To: guaneryu; +Cc: fstests, darrick.wong, ira.weiny, Xiao Yang

Also factor out _check_xflag() so that other tests can use it in future.

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
---
 common/rc             |  12 +++
 tests/generic/607     | 187 ++++++++++++++++++++++++++++++++++++++++++
 tests/generic/607.out |   2 +
 tests/generic/group   |   1 +
 4 files changed, 202 insertions(+)
 create mode 100644 tests/generic/607
 create mode 100644 tests/generic/607.out

diff --git a/common/rc b/common/rc
index a358702e..9af0aa72 100644
--- a/common/rc
+++ b/common/rc
@@ -3209,6 +3209,18 @@ _check_s_dax()
 	fi
 }
 
+_check_xflag()
+{
+	local target=$1
+	local exp_xflag=$2
+
+	if [ $exp_xflag -eq 0 ]; then
+		_test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag"
+	else
+		_test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
+	fi
+}
+
 # Only accept dax/dax=always mount option becasue dax=always, dax=inode
 # and dax=never are always introduced together.
 # Return 0 if filesystem/device supports the specified dax option.
diff --git a/tests/generic/607 b/tests/generic/607
new file mode 100644
index 00000000..f7e17cb3
--- /dev/null
+++ b/tests/generic/607
@@ -0,0 +1,187 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Fujitsu.  All Rights Reserved.
+#
+# FS QA Test 607
+#
+# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations.
+# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory.
+# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory.
+# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory.
+# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options.
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1        # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_dax_iflag
+_require_xfs_io_command "lsattr" "-v"
+
+# If a/ is +x, check that a's new children
+# inherit +x from a/.
+test_xflag_inheritance1()
+{
+	mkdir -p a
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/b/c
+	touch a/b/c/d
+
+	_check_xflag a 1
+	_check_xflag a/b 1
+	_check_xflag a/b/c 1
+	_check_xflag a/b/c/d 1
+
+	rm -rf a
+}
+
+# If a/ is +x and b/ is -x, check that:
+# 1) b's new children inherit -x from b/.
+# 2) a's new children(b/ is old) inherit +x from a/.
+test_xflag_inheritance2()
+{
+	mkdir -p a/b
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/b/c a/d
+	touch a/b/c/e a/d/f
+
+	_check_xflag a 1
+	_check_xflag a/b 0
+	_check_xflag a/b/c 0
+	_check_xflag a/b/c/e 0
+	_check_xflag a/d 1
+	_check_xflag a/d/f 1
+
+	rm -rf a
+}
+
+# If a/ is -x and b/ is +x, check that:
+# 1) b's new children inherit +x from b/.
+# 2) a's new children(b/ is old) inherit -x from a/.
+test_xflag_inheritance3()
+{
+	mkdir -p a/b
+	$XFS_IO_PROG -c "chattr +x" a/b
+	mkdir -p a/b/c a/d
+	touch a/b/c/e a/d/f
+
+	_check_xflag a 0
+	_check_xflag a/b 1
+	_check_xflag a/b/c 1
+	_check_xflag a/b/c/e 1
+	_check_xflag a/d 0
+	_check_xflag a/d/f 0
+
+	rm -rf a
+}
+
+# If a/, c/ are +x and b/ is -x, check that:
+# 1) c's new children inherit +x from c/.
+# 2) b's new children(c/ is old) inherit -x from b/.
+test_xflag_inheritance4()
+{
+	mkdir -p a
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/b/c
+	$XFS_IO_PROG -c "chattr -x" a/b
+	mkdir -p a/b/c/d a/b/e
+	touch a/b/c/d/f a/b/e/g
+
+	_check_xflag a 1
+	_check_xflag a/b 0
+	_check_xflag a/b/c 1
+	_check_xflag a/b/c/d 1
+	_check_xflag a/b/c/d/f 1
+	_check_xflag a/b/e 0
+	_check_xflag a/b/e/g 0
+
+	rm -rf a
+}
+
+# If a/ is +x and b/ is -x, check that:
+# 1) new b/c and b/g inherit -x from b/ by cp.
+# 2) new a/e inherits +x from a/ by cp.
+# 3) new b/d preserves +x from a/ by mv.
+# 4) new a/f and a/h preserve -x from b/ by mv.
+test_xflag_inheritance5()
+{
+	mkdir -p a b
+	$XFS_IO_PROG -c "chattr +x" a
+	mkdir -p a/c a/d b/e b/f
+	touch a/g b/h
+
+	cp -r a/c b/
+	cp -r b/e a/
+	cp -r a/g b/
+	mv a/d b/
+	mv b/f a/
+	mv b/h a/
+
+	_check_xflag b/c 0
+	_check_xflag b/d 1
+	_check_xflag a/e 1
+	_check_xflag a/f 0
+	_check_xflag b/g 0
+	_check_xflag a/h 0
+
+	rm -rf a b
+}
+
+do_xflag_tests()
+{
+	local option=$1
+
+	_scratch_mkfs >> $seqres.full 2>&1
+	_scratch_mount "$option"
+	cd $SCRATCH_MNT
+
+	for i in $(seq 1 5); do
+		test_xflag_inheritance${i}
+	done
+
+	cd - > /dev/null
+	_scratch_unmount
+}
+
+do_tests()
+{
+	# Mount without dax option
+	do_xflag_tests
+
+	# Mount with 'dax' or 'dax=always' option if fs supports it.
+	_check_scratch_dax_mountopt "dax" && do_xflag_tests "-o dax"
+
+	# Mount with 'dax=inode' and 'dax=never' options if fs supports them.
+	if _check_scratch_dax_mountopt "dax=always"; then
+		for dax_option in "dax=inode" "dax=never"; do
+			do_xflag_tests "-o $dax_option"
+		done
+	fi
+}
+
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/607.out b/tests/generic/607.out
new file mode 100644
index 00000000..d02de53b
--- /dev/null
+++ b/tests/generic/607.out
@@ -0,0 +1,2 @@
+QA output created by 607
+Silence is golden
diff --git a/tests/generic/group b/tests/generic/group
index 05c6b02d..5bd289c3 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -609,3 +609,4 @@
 604 auto quick mount
 605 auto attr quick dax
 606 auto attr quick dax
+607 auto attr quick dax
-- 
2.21.0




^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
  2020-08-03  8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
@ 2020-08-03 19:49   ` Ira Weiny
  2020-08-03 22:26     ` Darrick J. Wong
  0 siblings, 1 reply; 13+ messages in thread
From: Ira Weiny @ 2020-08-03 19:49 UTC (permalink / raw)
  To: Xiao Yang; +Cc: guaneryu, fstests, darrick.wong

On Mon, Aug 03, 2020 at 04:38:32PM +0800, Xiao Yang wrote:
> 1) _check_scratch_dax_mountopt() checks old/new dax mount option and
>    returns a value.
> 2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
>    returns a non-zero value.
> 3) _require_dax_iflag() checks FS_XFLAG_DAX.
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> ---
>  common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
> 
> diff --git a/common/rc b/common/rc
> index 1b7b2575..d7926bc5 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3188,6 +3188,48 @@ _require_scratch_dax()
>  	_scratch_unmount
>  }
>  
> +# Only accept dax/dax=always mount option becasue dax=always, dax=inode
> +# and dax=never are always introduced together.
> +# Return 0 if filesystem/device supports the specified dax option.
> +# Return 1 if mount fails with the specified dax option.
> +# Return 2 if /proc/mounts shows wrong dax option.
> +# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
> +# Check old dax or new dax=always by passing "dax".
> +_check_scratch_dax_mountopt()

So I think I see what you are trying to say here but I'm not sure the
comment/doc is clear.  How about:

# Check if dax mount options are supported
#
# $1 can be either 'dax=always' or 'dax'
#
# dax=always
#      Check for the new dax options (dax=inode, dax=always or dax=never) by
#      passing "dax=always".
# dax
#      Check for the old dax or new dax=always by passing "dax".
#
# This only accepts 'dax=always' because dax=always, dax=inode
# and dax=never are always supported together.  So if the other options are
# required checking for 'dax=always' indicates support for the other 2.
#
# Return 0 if filesystem/device supports the specified dax option.
# Return 1 if mount fails with the specified dax option.
# Return 2 if /proc/mounts shows wrong dax option.

Ira

> +{
> +	local option=$1
> +
> +	_require_scratch
> +	_scratch_mkfs > /dev/null 2>&1
> +
> +	_try_scratch_mount "-o $option" > /dev/null 2>&1 || return 1
> +
> +	if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
> +		_scratch_unmount
> +		return 0
> +	else
> +		_scratch_unmount
> +		return 2
> +	fi
> +}
> +
> +# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
> +_require_scratch_dax_mountopt()
> +{
> +	local mountopt=$1
> +
> +	_check_scratch_dax_mountopt "$mountopt"
> +	local res=$?
> +
> +	[ $res -eq 1 ] && _notrun "mount $SCRATCH_DEV with $mountopt failed"
> +	[ $res -eq 2 ] && _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
> +}
> +
> +_require_dax_iflag()
> +{
> +	_require_xfs_io_command "chattr" "x"
> +}
> +
>  # Does norecovery support by this fs?
>  _require_norecovery()
>  {
> -- 
> 2.21.0
> 
> 
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
  2020-08-03  8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
@ 2020-08-03 19:54   ` Ira Weiny
  2020-08-03 22:25   ` Darrick J. Wong
  1 sibling, 0 replies; 13+ messages in thread
From: Ira Weiny @ 2020-08-03 19:54 UTC (permalink / raw)
  To: Xiao Yang; +Cc: guaneryu, fstests, darrick.wong

On Mon, Aug 03, 2020 at 04:38:38PM +0800, Xiao Yang wrote:
> Also factor out _check_xflag() so that other tests can use it in future.
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>

Reviewed-by: Ira Weiny <ira.weiny@intel.com>

> ---
>  common/rc             |  12 +++
>  tests/generic/607     | 187 ++++++++++++++++++++++++++++++++++++++++++
>  tests/generic/607.out |   2 +
>  tests/generic/group   |   1 +
>  4 files changed, 202 insertions(+)
>  create mode 100644 tests/generic/607
>  create mode 100644 tests/generic/607.out
> 
> diff --git a/common/rc b/common/rc
> index a358702e..9af0aa72 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3209,6 +3209,18 @@ _check_s_dax()
>  	fi
>  }
>  
> +_check_xflag()
> +{
> +	local target=$1
> +	local exp_xflag=$2
> +
> +	if [ $exp_xflag -eq 0 ]; then
> +		_test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag"
> +	else
> +		_test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
> +	fi
> +}
> +
>  # Only accept dax/dax=always mount option becasue dax=always, dax=inode
>  # and dax=never are always introduced together.
>  # Return 0 if filesystem/device supports the specified dax option.
> diff --git a/tests/generic/607 b/tests/generic/607
> new file mode 100644
> index 00000000..f7e17cb3
> --- /dev/null
> +++ b/tests/generic/607
> @@ -0,0 +1,187 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Fujitsu.  All Rights Reserved.
> +#
> +# FS QA Test 607
> +#
> +# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations.
> +# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory.
> +# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory.
> +# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory.
> +# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options.
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1        # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +_supported_fs generic
> +_supported_os Linux
> +_require_scratch
> +_require_dax_iflag
> +_require_xfs_io_command "lsattr" "-v"
> +
> +# If a/ is +x, check that a's new children
> +# inherit +x from a/.
> +test_xflag_inheritance1()
> +{
> +	mkdir -p a
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c
> +	touch a/b/c/d
> +
> +	_check_xflag a 1
> +	_check_xflag a/b 1
> +	_check_xflag a/b/c 1
> +	_check_xflag a/b/c/d 1
> +
> +	rm -rf a
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) b's new children inherit -x from b/.
> +# 2) a's new children(b/ is old) inherit +x from a/.
> +test_xflag_inheritance2()
> +{
> +	mkdir -p a/b
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c a/d
> +	touch a/b/c/e a/d/f
> +
> +	_check_xflag a 1
> +	_check_xflag a/b 0
> +	_check_xflag a/b/c 0
> +	_check_xflag a/b/c/e 0
> +	_check_xflag a/d 1
> +	_check_xflag a/d/f 1
> +
> +	rm -rf a
> +}
> +
> +# If a/ is -x and b/ is +x, check that:
> +# 1) b's new children inherit +x from b/.
> +# 2) a's new children(b/ is old) inherit -x from a/.
> +test_xflag_inheritance3()
> +{
> +	mkdir -p a/b
> +	$XFS_IO_PROG -c "chattr +x" a/b
> +	mkdir -p a/b/c a/d
> +	touch a/b/c/e a/d/f
> +
> +	_check_xflag a 0
> +	_check_xflag a/b 1
> +	_check_xflag a/b/c 1
> +	_check_xflag a/b/c/e 1
> +	_check_xflag a/d 0
> +	_check_xflag a/d/f 0
> +
> +	rm -rf a
> +}
> +
> +# If a/, c/ are +x and b/ is -x, check that:
> +# 1) c's new children inherit +x from c/.
> +# 2) b's new children(c/ is old) inherit -x from b/.
> +test_xflag_inheritance4()
> +{
> +	mkdir -p a
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c
> +	$XFS_IO_PROG -c "chattr -x" a/b
> +	mkdir -p a/b/c/d a/b/e
> +	touch a/b/c/d/f a/b/e/g
> +
> +	_check_xflag a 1
> +	_check_xflag a/b 0
> +	_check_xflag a/b/c 1
> +	_check_xflag a/b/c/d 1
> +	_check_xflag a/b/c/d/f 1
> +	_check_xflag a/b/e 0
> +	_check_xflag a/b/e/g 0
> +
> +	rm -rf a
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) new b/c and b/g inherit -x from b/ by cp.
> +# 2) new a/e inherits +x from a/ by cp.
> +# 3) new b/d preserves +x from a/ by mv.
> +# 4) new a/f and a/h preserve -x from b/ by mv.
> +test_xflag_inheritance5()
> +{
> +	mkdir -p a b
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/c a/d b/e b/f
> +	touch a/g b/h
> +
> +	cp -r a/c b/
> +	cp -r b/e a/
> +	cp -r a/g b/
> +	mv a/d b/
> +	mv b/f a/
> +	mv b/h a/
> +
> +	_check_xflag b/c 0
> +	_check_xflag b/d 1
> +	_check_xflag a/e 1
> +	_check_xflag a/f 0
> +	_check_xflag b/g 0
> +	_check_xflag a/h 0
> +
> +	rm -rf a b
> +}
> +
> +do_xflag_tests()
> +{
> +	local option=$1
> +
> +	_scratch_mkfs >> $seqres.full 2>&1
> +	_scratch_mount "$option"
> +	cd $SCRATCH_MNT
> +
> +	for i in $(seq 1 5); do
> +		test_xflag_inheritance${i}
> +	done
> +
> +	cd - > /dev/null
> +	_scratch_unmount
> +}
> +
> +do_tests()
> +{
> +	# Mount without dax option
> +	do_xflag_tests
> +
> +	# Mount with 'dax' or 'dax=always' option if fs supports it.
> +	_check_scratch_dax_mountopt "dax" && do_xflag_tests "-o dax"
> +
> +	# Mount with 'dax=inode' and 'dax=never' options if fs supports them.
> +	if _check_scratch_dax_mountopt "dax=always"; then
> +		for dax_option in "dax=inode" "dax=never"; do
> +			do_xflag_tests "-o $dax_option"
> +		done
> +	fi
> +}
> +
> +do_tests
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/generic/607.out b/tests/generic/607.out
> new file mode 100644
> index 00000000..d02de53b
> --- /dev/null
> +++ b/tests/generic/607.out
> @@ -0,0 +1,2 @@
> +QA output created by 607
> +Silence is golden
> diff --git a/tests/generic/group b/tests/generic/group
> index 05c6b02d..5bd289c3 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -609,3 +609,4 @@
>  604 auto quick mount
>  605 auto attr quick dax
>  606 auto attr quick dax
> +607 auto attr quick dax
> -- 
> 2.21.0
> 
> 
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations
  2020-08-03  8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
  2020-08-03 19:54   ` Ira Weiny
@ 2020-08-03 22:25   ` Darrick J. Wong
  1 sibling, 0 replies; 13+ messages in thread
From: Darrick J. Wong @ 2020-08-03 22:25 UTC (permalink / raw)
  To: Xiao Yang; +Cc: guaneryu, fstests, ira.weiny

On Mon, Aug 03, 2020 at 04:38:38PM +0800, Xiao Yang wrote:
> Also factor out _check_xflag() so that other tests can use it in future.
> 
> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>

Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> ---
>  common/rc             |  12 +++
>  tests/generic/607     | 187 ++++++++++++++++++++++++++++++++++++++++++
>  tests/generic/607.out |   2 +
>  tests/generic/group   |   1 +
>  4 files changed, 202 insertions(+)
>  create mode 100644 tests/generic/607
>  create mode 100644 tests/generic/607.out
> 
> diff --git a/common/rc b/common/rc
> index a358702e..9af0aa72 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3209,6 +3209,18 @@ _check_s_dax()
>  	fi
>  }
>  
> +_check_xflag()
> +{
> +	local target=$1
> +	local exp_xflag=$2
> +
> +	if [ $exp_xflag -eq 0 ]; then
> +		_test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag"
> +	else
> +		_test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
> +	fi
> +}
> +
>  # Only accept dax/dax=always mount option becasue dax=always, dax=inode
>  # and dax=never are always introduced together.
>  # Return 0 if filesystem/device supports the specified dax option.
> diff --git a/tests/generic/607 b/tests/generic/607
> new file mode 100644
> index 00000000..f7e17cb3
> --- /dev/null
> +++ b/tests/generic/607
> @@ -0,0 +1,187 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Fujitsu.  All Rights Reserved.
> +#
> +# FS QA Test 607
> +#
> +# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations.
> +# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory.
> +# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory.
> +# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory.
> +# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options.
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1        # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
> +
> +_cleanup()
> +{
> +	cd /
> +	rm -f $tmp.*
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +_supported_fs generic
> +_supported_os Linux
> +_require_scratch
> +_require_dax_iflag
> +_require_xfs_io_command "lsattr" "-v"
> +
> +# If a/ is +x, check that a's new children
> +# inherit +x from a/.
> +test_xflag_inheritance1()
> +{
> +	mkdir -p a
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c
> +	touch a/b/c/d
> +
> +	_check_xflag a 1
> +	_check_xflag a/b 1
> +	_check_xflag a/b/c 1
> +	_check_xflag a/b/c/d 1
> +
> +	rm -rf a
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) b's new children inherit -x from b/.
> +# 2) a's new children(b/ is old) inherit +x from a/.
> +test_xflag_inheritance2()
> +{
> +	mkdir -p a/b
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c a/d
> +	touch a/b/c/e a/d/f
> +
> +	_check_xflag a 1
> +	_check_xflag a/b 0
> +	_check_xflag a/b/c 0
> +	_check_xflag a/b/c/e 0
> +	_check_xflag a/d 1
> +	_check_xflag a/d/f 1
> +
> +	rm -rf a
> +}
> +
> +# If a/ is -x and b/ is +x, check that:
> +# 1) b's new children inherit +x from b/.
> +# 2) a's new children(b/ is old) inherit -x from a/.
> +test_xflag_inheritance3()
> +{
> +	mkdir -p a/b
> +	$XFS_IO_PROG -c "chattr +x" a/b
> +	mkdir -p a/b/c a/d
> +	touch a/b/c/e a/d/f
> +
> +	_check_xflag a 0
> +	_check_xflag a/b 1
> +	_check_xflag a/b/c 1
> +	_check_xflag a/b/c/e 1
> +	_check_xflag a/d 0
> +	_check_xflag a/d/f 0
> +
> +	rm -rf a
> +}
> +
> +# If a/, c/ are +x and b/ is -x, check that:
> +# 1) c's new children inherit +x from c/.
> +# 2) b's new children(c/ is old) inherit -x from b/.
> +test_xflag_inheritance4()
> +{
> +	mkdir -p a
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/b/c
> +	$XFS_IO_PROG -c "chattr -x" a/b
> +	mkdir -p a/b/c/d a/b/e
> +	touch a/b/c/d/f a/b/e/g
> +
> +	_check_xflag a 1
> +	_check_xflag a/b 0
> +	_check_xflag a/b/c 1
> +	_check_xflag a/b/c/d 1
> +	_check_xflag a/b/c/d/f 1
> +	_check_xflag a/b/e 0
> +	_check_xflag a/b/e/g 0
> +
> +	rm -rf a
> +}
> +
> +# If a/ is +x and b/ is -x, check that:
> +# 1) new b/c and b/g inherit -x from b/ by cp.
> +# 2) new a/e inherits +x from a/ by cp.
> +# 3) new b/d preserves +x from a/ by mv.
> +# 4) new a/f and a/h preserve -x from b/ by mv.
> +test_xflag_inheritance5()
> +{
> +	mkdir -p a b
> +	$XFS_IO_PROG -c "chattr +x" a
> +	mkdir -p a/c a/d b/e b/f
> +	touch a/g b/h
> +
> +	cp -r a/c b/
> +	cp -r b/e a/
> +	cp -r a/g b/
> +	mv a/d b/
> +	mv b/f a/
> +	mv b/h a/
> +
> +	_check_xflag b/c 0
> +	_check_xflag b/d 1
> +	_check_xflag a/e 1
> +	_check_xflag a/f 0
> +	_check_xflag b/g 0
> +	_check_xflag a/h 0
> +
> +	rm -rf a b
> +}
> +
> +do_xflag_tests()
> +{
> +	local option=$1
> +
> +	_scratch_mkfs >> $seqres.full 2>&1
> +	_scratch_mount "$option"
> +	cd $SCRATCH_MNT
> +
> +	for i in $(seq 1 5); do
> +		test_xflag_inheritance${i}
> +	done
> +
> +	cd - > /dev/null
> +	_scratch_unmount
> +}
> +
> +do_tests()
> +{
> +	# Mount without dax option
> +	do_xflag_tests
> +
> +	# Mount with 'dax' or 'dax=always' option if fs supports it.
> +	_check_scratch_dax_mountopt "dax" && do_xflag_tests "-o dax"
> +
> +	# Mount with 'dax=inode' and 'dax=never' options if fs supports them.
> +	if _check_scratch_dax_mountopt "dax=always"; then
> +		for dax_option in "dax=inode" "dax=never"; do
> +			do_xflag_tests "-o $dax_option"
> +		done
> +	fi
> +}
> +
> +do_tests
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/generic/607.out b/tests/generic/607.out
> new file mode 100644
> index 00000000..d02de53b
> --- /dev/null
> +++ b/tests/generic/607.out
> @@ -0,0 +1,2 @@
> +QA output created by 607
> +Silence is golden
> diff --git a/tests/generic/group b/tests/generic/group
> index 05c6b02d..5bd289c3 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -609,3 +609,4 @@
>  604 auto quick mount
>  605 auto attr quick dax
>  606 auto attr quick dax
> +607 auto attr quick dax
> -- 
> 2.21.0
> 
> 
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
  2020-08-03 19:49   ` Ira Weiny
@ 2020-08-03 22:26     ` Darrick J. Wong
  2020-08-04  1:26       ` Xiao Yang
  0 siblings, 1 reply; 13+ messages in thread
From: Darrick J. Wong @ 2020-08-03 22:26 UTC (permalink / raw)
  To: Ira Weiny; +Cc: Xiao Yang, guaneryu, fstests

On Mon, Aug 03, 2020 at 12:49:19PM -0700, Ira Weiny wrote:
> On Mon, Aug 03, 2020 at 04:38:32PM +0800, Xiao Yang wrote:
> > 1) _check_scratch_dax_mountopt() checks old/new dax mount option and
> >    returns a value.
> > 2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
> >    returns a non-zero value.
> > 3) _require_dax_iflag() checks FS_XFLAG_DAX.
> > 
> > Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
> > ---
> >  common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 42 insertions(+)
> > 
> > diff --git a/common/rc b/common/rc
> > index 1b7b2575..d7926bc5 100644
> > --- a/common/rc
> > +++ b/common/rc
> > @@ -3188,6 +3188,48 @@ _require_scratch_dax()
> >  	_scratch_unmount
> >  }
> >  
> > +# Only accept dax/dax=always mount option becasue dax=always, dax=inode
> > +# and dax=never are always introduced together.
> > +# Return 0 if filesystem/device supports the specified dax option.
> > +# Return 1 if mount fails with the specified dax option.
> > +# Return 2 if /proc/mounts shows wrong dax option.
> > +# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
> > +# Check old dax or new dax=always by passing "dax".
> > +_check_scratch_dax_mountopt()
> 
> So I think I see what you are trying to say here but I'm not sure the
> comment/doc is clear.  How about:
> 
> # Check if dax mount options are supported
> #
> # $1 can be either 'dax=always' or 'dax'
> #
> # dax=always
> #      Check for the new dax options (dax=inode, dax=always or dax=never) by
> #      passing "dax=always".
> # dax
> #      Check for the old dax or new dax=always by passing "dax".
> #
> # This only accepts 'dax=always' because dax=always, dax=inode
> # and dax=never are always supported together.  So if the other options are
> # required checking for 'dax=always' indicates support for the other 2.
> #
> # Return 0 if filesystem/device supports the specified dax option.
> # Return 1 if mount fails with the specified dax option.
> # Return 2 if /proc/mounts shows wrong dax option.

/me likes this better.

--D

> Ira
> 
> > +{
> > +	local option=$1
> > +
> > +	_require_scratch
> > +	_scratch_mkfs > /dev/null 2>&1
> > +
> > +	_try_scratch_mount "-o $option" > /dev/null 2>&1 || return 1
> > +
> > +	if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
> > +		_scratch_unmount
> > +		return 0
> > +	else
> > +		_scratch_unmount
> > +		return 2
> > +	fi
> > +}
> > +
> > +# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
> > +_require_scratch_dax_mountopt()
> > +{
> > +	local mountopt=$1
> > +
> > +	_check_scratch_dax_mountopt "$mountopt"
> > +	local res=$?
> > +
> > +	[ $res -eq 1 ] && _notrun "mount $SCRATCH_DEV with $mountopt failed"
> > +	[ $res -eq 2 ] && _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
> > +}
> > +
> > +_require_dax_iflag()
> > +{
> > +	_require_xfs_io_command "chattr" "x"
> > +}
> > +
> >  # Does norecovery support by this fs?
> >  _require_norecovery()
> >  {
> > -- 
> > 2.21.0
> > 
> > 
> > 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX
  2020-08-03 22:26     ` Darrick J. Wong
@ 2020-08-04  1:26       ` Xiao Yang
  0 siblings, 0 replies; 13+ messages in thread
From: Xiao Yang @ 2020-08-04  1:26 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: Ira Weiny, guaneryu, fstests

On 2020/8/4 6:26, Darrick J. Wong wrote:
> On Mon, Aug 03, 2020 at 12:49:19PM -0700, Ira Weiny wrote:
>> On Mon, Aug 03, 2020 at 04:38:32PM +0800, Xiao Yang wrote:
>>> 1) _check_scratch_dax_mountopt() checks old/new dax mount option and
>>>     returns a value.
>>> 2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt()
>>>     returns a non-zero value.
>>> 3) _require_dax_iflag() checks FS_XFLAG_DAX.
>>>
>>> Signed-off-by: Xiao Yang<yangx.jy@cn.fujitsu.com>
>>> ---
>>>   common/rc | 42 ++++++++++++++++++++++++++++++++++++++++++
>>>   1 file changed, 42 insertions(+)
>>>
>>> diff --git a/common/rc b/common/rc
>>> index 1b7b2575..d7926bc5 100644
>>> --- a/common/rc
>>> +++ b/common/rc
>>> @@ -3188,6 +3188,48 @@ _require_scratch_dax()
>>>   	_scratch_unmount
>>>   }
>>>
>>> +# Only accept dax/dax=always mount option becasue dax=always, dax=inode
>>> +# and dax=never are always introduced together.
>>> +# Return 0 if filesystem/device supports the specified dax option.
>>> +# Return 1 if mount fails with the specified dax option.
>>> +# Return 2 if /proc/mounts shows wrong dax option.
>>> +# Check new dax=inode, dax=always or dax=never option by passing "dax=always".
>>> +# Check old dax or new dax=always by passing "dax".
>>> +_check_scratch_dax_mountopt()
>> So I think I see what you are trying to say here but I'm not sure the
>> comment/doc is clear.  How about:
>>
>> # Check if dax mount options are supported
>> #
>> # $1 can be either 'dax=always' or 'dax'
>> #
>> # dax=always
>> #      Check for the new dax options (dax=inode, dax=always or dax=never) by
>> #      passing "dax=always".
>> # dax
>> #      Check for the old dax or new dax=always by passing "dax".
>> #
>> # This only accepts 'dax=always' because dax=always, dax=inode
>> # and dax=never are always supported together.  So if the other options are
>> # required checking for 'dax=always' indicates support for the other 2.
>> #
>> # Return 0 if filesystem/device supports the specified dax option.
>> # Return 1 if mount fails with the specified dax option.
>> # Return 2 if /proc/mounts shows wrong dax option.
> /me likes this better.
Hi Ira, Darrick

It is clearer and better, I will update the comment in v9 patch set. :-)
Besides,  could you help me review another new test which has been sent 
to mail list:
"generic: Verify how to change the S_DAX flag on an existing file"
I want to squash it into v9 patch set after you review it.

Thanks,
Xiao Yang
> --D
>
>> Ira
>>
>>> +{
>>> +	local option=$1
>>> +
>>> +	_require_scratch
>>> +	_scratch_mkfs>  /dev/null 2>&1
>>> +
>>> +	_try_scratch_mount "-o $option">  /dev/null 2>&1 || return 1
>>> +
>>> +	if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then
>>> +		_scratch_unmount
>>> +		return 0
>>> +	else
>>> +		_scratch_unmount
>>> +		return 2
>>> +	fi
>>> +}
>>> +
>>> +# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value.
>>> +_require_scratch_dax_mountopt()
>>> +{
>>> +	local mountopt=$1
>>> +
>>> +	_check_scratch_dax_mountopt "$mountopt"
>>> +	local res=$?
>>> +
>>> +	[ $res -eq 1 ]&&  _notrun "mount $SCRATCH_DEV with $mountopt failed"
>>> +	[ $res -eq 2 ]&&  _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt"
>>> +}
>>> +
>>> +_require_dax_iflag()
>>> +{
>>> +	_require_xfs_io_command "chattr" "x"
>>> +}
>>> +
>>>   # Does norecovery support by this fs?
>>>   _require_norecovery()
>>>   {
>>> -- 
>>> 2.21.0
>>>
>>>
>>>
>
> .
>




^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-08-04  1:26 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-03  8:38 [PATCH v8 0/7] Make fstests support new behavior of DAX Xiao Yang
2020-08-03  8:38 ` [PATCH v8 1/7] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Xiao Yang
2020-08-03 19:49   ` Ira Weiny
2020-08-03 22:26     ` Darrick J. Wong
2020-08-04  1:26       ` Xiao Yang
2020-08-03  8:38 ` [PATCH v8 2/7] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Xiao Yang
2020-08-03  8:38 ` [PATCH v8 3/7] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Xiao Yang
2020-08-03  8:38 ` [PATCH v8 4/7] generic/413, xfs/260: Improve format operation for PMD fault testing Xiao Yang
2020-08-03  8:38 ` [PATCH v8 5/7] xfs/260: Move and update xfs/260 Xiao Yang
2020-08-03  8:38 ` [PATCH v8 6/7] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Xiao Yang
2020-08-03  8:38 ` [PATCH v8 7/7] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Xiao Yang
2020-08-03 19:54   ` Ira Weiny
2020-08-03 22:25   ` Darrick J. Wong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.