#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2017 Red Hat Inc., All Rights Reserved. # # FS QA Test 469 # # Test that mmap read doesn't see non-zero data past EOF on truncate down. # # This is inspired by an XFS bug that truncate down fails to zero page cache # beyond new EOF and causes stale data written to disk unexpectedly and a # subsequent mmap reads and sees non-zeros post EOF. # # Patch "xfs: truncate pagecache before writeback in xfs_setattr_size()" fixed # the bug on XFS. # seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ file=$TEST_DIR/$seq.fsx status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / rm -f $file $tmp.* } # get standard environment, filters and checks . ./common/rc . ./common/filter # remove previous $seqres.full before test rm -f $seqres.full # real QA test starts here _supported_fs generic _supported_os Linux _require_test run_fsx() { $here/ltp/fsx $2 --replay-ops $1 $file 2>&1 | tee -a $seqres.full >$tmp.fsx if [ ${PIPESTATUS[0]} -ne 0 ]; then cat $tmp.fsx exit 1 fi } # run fsx with and without fsync(2) after write to get more coverage test_fsx() { echo "fsx --replay-ops ${1#*.}" | tee -a $seqres.full run_fsx $1 echo "fsx -y --replay-ops ${1#*.}" | tee -a $seqres.full run_fsx $1 -y } # simplified fsx operations that work on small & not blocksize-aligned offsets, # so filesystems with small block size could reproduce too cat >$tmp.fsxops.0 <$tmp.fsxops.1 <$tmp.fsxops.2 <$tmp.fsxops.3 <