#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2016 Jaegeuk Kim.  All Rights Reserved.
#
# FS QA Test 392
#
# Test inode's metadata after fsync or fdatasync calls.
# In the case of fsync, filesystem should recover all the inode metadata, while
# recovering i_blocks and i_size at least for fdatasync.
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=0	# failure will be detected in runtime!
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
	cd /
	rm -f $tmp.*
}

# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/punch

# real QA test starts here
_supported_fs generic

rm -f $seqres.full
_require_scratch
_require_scratch_shutdown
_require_xfs_io_command "fpunch"

_scratch_mkfs >/dev/null 2>&1
_require_metadata_journaling $SCRATCH_DEV
_scratch_mount

testfile=$SCRATCH_MNT/testfile

# check inode metadata after shutdown
check_inode_metadata()
{
	sync_mode=$1

	# fsync or fdatasync
	if [ $sync_mode = "fsync" ]; then
		stat_opt='-c "b: %b s: %s a: %x m: %y c: %z"'
	else
		stat_opt='-c "b: %b s: %s"'
	fi

	before=`stat "$stat_opt" $testfile`

	$XFS_IO_PROG -c "$sync_mode" $testfile | _filter_xfs_io
	_scratch_shutdown | tee -a $seqres.full
	_scratch_cycle_mount

	after=`stat "$stat_opt" $testfile`

	if [ "$before" != "$after" ]; then
		echo "Before: $before"
		echo "After : $after"
		status=1;	# this is a failure!
	fi
	echo "Before: $before" >> $seqres.full
	echo "After : $after" >> $seqres.full
	rm $testfile
}

# append XX KB with f{data}sync, followed by power-cut
test_i_size()
{
	echo "==== i_size $2 test with $1 ====" | tee -a $seqres.full
	$XFS_IO_PROG -f -c "truncate 4M"	\
			-c "pwrite 0 4M"	\
			-c "fsync"		\
			-c "pwrite 4M $2"	\
			$testfile >/dev/null
	check_inode_metadata $1
}

# update times with f{data}sync, followed by power-cut
test_i_time()
{
	echo "==== i_time test with $1 ====" | tee -a $seqres.full
	$XFS_IO_PROG -f -c "truncate 4M"	\
			-c "pwrite 0 4M"	\
			-c "fsync"		\
			$testfile >/dev/null
	sleep 1
	touch $testfile
	check_inode_metadata $1
}

# punch XX KB with f{data}sync, followed by power-cut
test_punch()
{
	echo "==== fpunch $2 test with $1 ====" | tee -a $seqres.full
	$XFS_IO_PROG -f -c "truncate 4202496"	\
			-c "pwrite 0 4202496"	\
			-c "fsync"		\
			-c "fpunch 4194304 $2"\
			$testfile >/dev/null
	check_inode_metadata $1
}

for i in fsync fdatasync; do
	test_i_size $i 1024
	test_i_size $i 4096
	test_i_time $i
	test_punch $i 1024
	test_punch $i 4096
done

exit
