+_require_scratch_dax
+_require_test_program "feature"
+_require_test_program "t_mmap_dio"
+_require_xfs_io_command "chattr" "x"
+_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
+ 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
+ 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
+ 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
+ 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
+ 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
+ src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \
+ $1 "buffered dax to nondax"
+}