-#! /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