#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2017 Red Hat Inc.  All Rights Reserved.
#
# FS QA Test 413
#
# mmap direct/buffered io between DAX and non-DAX mountpoints.
#
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
_require_test
_require_scratch_dax_mountopt "dax"
_require_test_program "feature"
_require_test_program "t_mmap_dio"
_require_xfs_io_command "falloc"

prep_files()
{
	rm -f $SCRATCH_MNT/tf_{s,d}
	rm -f $TEST_DIR/tf_{s,d}

	$XFS_IO_PROG -f -c "falloc 0 $tsize" \
		$SCRATCH_MNT/tf_{s,d} >> $seqres.full 2>&1
	$XFS_IO_PROG -f -c "falloc 0 $tsize" \
		$TEST_DIR/tf_{s,d} >> $seqres.full 2>&1
}

t_both_dax()
{
	prep_files
	# with O_DIRECT first
	$here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} $1 "dio both dax"

	prep_files
	# 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
	$here/src/t_mmap_dio $TEST_DIR/tf_s \
		$SCRATCH_MNT/tf_d $1 "dio nondax to dax"

	prep_files
	$here/src/t_mmap_dio -b $TEST_DIR/tf_s \
		$SCRATCH_MNT/tf_d $1 "buffered nondax to dax"
}

t_dax_to_nondax()
{
	prep_files
	$here/src/t_mmap_dio $SCRATCH_MNT/tf_s \
		$TEST_DIR/tf_d $1 "dio dax to nondax"

	prep_files
	$here/src/t_mmap_dio -b $SCRATCH_MNT/tf_s \
		$TEST_DIR/tf_d $1 "buffered dax to nondax"
}

t_both_nondax()
{
	prep_files
	$here/src/t_mmap_dio $TEST_DIR/tf_{s,d} $1 "dio both nondax"

	prep_files
	$here/src/t_mmap_dio -b $TEST_DIR/tf_{s,d} \
		$1 "buffered both nondax"
}

# $1 mmap read/write size
t_mmap_dio_dax()
{
	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_mmap_dio_dax 1024
	# page size
	t_mmap_dio_dax `$here/src/feature -s`
	# bigger sizes, for PMD faults
	t_mmap_dio_dax $((16 * 1024 * 1024))
	t_mmap_dio_dax $((64 * 1024 * 1024))
}

# 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=""
export TEST_FS_MOUNT_OPTS=""
_test_cycle_mount
_fs_options $TEST_DEV | grep -qw "dax" && \
	_notrun "we need $TEST_DEV mount without dax"
_scratch_mount "-o dax"

tsize=$((128 * 1024 * 1024))

do_tests

# success, all done
echo "Silence is golden"
status=0
exit
