xfs/260: Move and update xfs/260
authorXiao Yang <yangx.jy@cn.fujitsu.com>
Thu, 6 Aug 2020 02:13:39 +0000 (10:13 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 9 Aug 2020 17:04:19 +0000 (01:04 +0800)
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>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/generic/605 [new file with mode: 0755]
tests/generic/605.out [new file with mode: 0644]
tests/generic/group
tests/xfs/260 [deleted file]
tests/xfs/260.out [deleted file]
tests/xfs/group

diff --git a/tests/generic/605 b/tests/generic/605
new file mode 100755 (executable)
index 0000000..b2471f0
--- /dev/null
@@ -0,0 +1,150 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2017 Red Hat Inc.  All Rights Reserved.
+#
+# FS QA Test 605
+#
+# Test per-inode DAX flag by mmap direct/buffered IO.
+#
+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_test_program "feature"
+_require_test_program "t_mmap_dio"
+_require_dax_iflag
+_require_xfs_io_command "falloc"
+
+SRC_DIR=$SCRATCH_MNT/src
+SRC_FILE=$SRC_DIR/tf_s
+DST_DIR=$SCRATCH_MNT/dst
+DST_FILE=$DST_DIR/tf_d
+
+prep_directories()
+{
+       mkdir -p $SRC_DIR $DST_DIR
+}
+
+prep_files()
+{
+       rm -f $SRC_FILE $DST_FILE
+       $XFS_IO_PROG -f -c "falloc 0 $tsize" \
+               $SRC_FILE $DST_FILE >> $seqres.full 2>&1
+}
+
+t_both_dax()
+{
+       $XFS_IO_PROG -c "chattr +x" $SRC_DIR $DST_DIR
+       prep_files
+       # with O_DIRECT first
+       $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
+               $1 "dio both dax"
+
+       prep_files
+       # again with buffered IO
+       $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
+       $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
+               $1 "dio nondax to dax"
+
+       prep_files
+       $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
+       $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
+               $1 "dio dax to nondax"
+
+       prep_files
+       $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
+       $here/src/t_mmap_dio $SRC_FILE $DST_FILE \
+               $1 "dio both nondax"
+
+       prep_files
+       $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \
+               $1 "buffered both nondax"
+}
+
+# $1 mmap read/write size
+t_dax_flag_mmap_dio()
+{
+       t_both_dax $1
+       t_dax_to_nondax $1
+       t_nondax_to_dax $1
+       t_both_nondax $1
+}
+
+do_tests()
+{
+       local mount_option=$1
+
+       _scratch_mount "$mount_option"
+
+       prep_directories
+       # less than page size
+       t_dax_flag_mmap_dio 1024
+       # page size
+       t_dax_flag_mmap_dio `$here/src/feature -s`
+       # bigger sizes, for PMD faults
+       t_dax_flag_mmap_dio $((16 * 1024 * 1024))
+       t_dax_flag_mmap_dio $((64 * 1024 * 1024))
+
+       _scratch_unmount
+}
+
+# make xfs aligned for PMD fault testing
+_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1
+
+tsize=$((128 * 1024 * 1024))
+
+# mount with dax=inode option
+do_tests "-o dax=inode"
+
+# mount without dax option
+export MOUNT_OPTIONS=""
+do_tests
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/generic/605.out b/tests/generic/605.out
new file mode 100644 (file)
index 0000000..1ae2004
--- /dev/null
@@ -0,0 +1,2 @@
+QA output created by 605
+Silence is golden
index 75d56838af4b603bc1d1ba590058357b85ff8098..d06c1bf64cfe3db5c8dbfea7c60811345b7f5c2b 100644 (file)
 602 auto quick encrypt
 603 auto quick quota
 604 auto quick mount
+605 auto attr quick dax
diff --git a/tests/xfs/260 b/tests/xfs/260
deleted file mode 100755 (executable)
index 81b42f0..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-#! /bin/bash
-# SPDX-License-Identifier: GPL-2.0
-# Copyright (c) 2017 Red Hat Inc.  All Rights Reserved.
-#
-# FS QA Test 260
-#
-# Test per-inode DAX flag by mmap direct/buffered IO.
-#
-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 xfs
-_supported_os Linux
-_require_scratch_dax_mountopt "dax"
-_require_test_program "feature"
-_require_test_program "t_mmap_dio"
-_require_dax_iflag
-_require_xfs_io_command "falloc"
-
-prep_files()
-{
-       rm -f $SCRATCH_MNT/tf_{s,d}
-
-       $XFS_IO_PROG -f -c "falloc 0 $tsize" \
-               $SCRATCH_MNT/tf_{s,d} >> $seqres.full 2>&1
-}
-
-t_both_dax()
-{
-       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"
-
-       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} \
-               $1 "buffered both dax"
-}
-
-t_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 $SCRATCH_MNT/tf_{s,d} \
-               $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} \
-               $1 "buffered nondax to dax"
-}
-
-t_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 $SCRATCH_MNT/tf_{s,d} \
-               $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} \
-               $1 "buffered dax to nondax"
-}
-
-t_both_nondax()
-{
-       prep_files
-       $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d}
-       $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \
-               $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} \
-               $1 "buffered both nondax"
-}
-
-# $1 mmap read/write size
-t_dax_flag_mmap_dio()
-{
-       t_both_dax $1
-       t_dax_to_nondax $1
-       t_nondax_to_dax $1
-       t_both_nondax $1
-}
-
-do_tests()
-{
-       # less than page size
-       t_dax_flag_mmap_dio 1024
-       # page size
-       t_dax_flag_mmap_dio `$here/src/feature -s`
-       # bigger sizes, for PMD faults
-       t_dax_flag_mmap_dio $((16 * 1024 * 1024))
-       t_dax_flag_mmap_dio $((64 * 1024 * 1024))
-}
-
-# 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
-do_tests
-
-# success, all done
-echo "Silence is golden"
-status=0
-exit
diff --git a/tests/xfs/260.out b/tests/xfs/260.out
deleted file mode 100644 (file)
index 18ca517..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-QA output created by 260
-Silence is golden
index d6e8d1c3d5e929cd68488bde647337a9f8ac07b0..ed0d389e02197743a023dc7c54d94d088f3eba05 100644 (file)
 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