#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2022 Fujitsu Limited. All Rights Reserved. # # FS QA Test No. 551 # # Test memory failure mechanism when dax and reflink working together # . ./common/preamble _begin_fstest auto quick clone dax # Import common functions. . ./common/filter . ./common/reflink # real QA test starts here _require_check_dmesg _require_scratch_reflink _require_cp_reflink _require_xfs_scratch_rmapbt _require_scratch_dax_mountopt "dax" _require_test_program "t_mmap_cow_memory_failure" echo "Format and mount" _scratch_mkfs > $seqres.full 2>&1 _scratch_mount "-o dax" >> $seqres.full 2>&1 testdir=$SCRATCH_MNT/test-$seq mkdir $testdir echo "Create the original files" filesize=65536 _pwrite_byte 0x61 0 $filesize $testdir/testfile >> $seqres.full _cp_reflink $testdir/testfile $testdir/poisonfile >> $seqres.full _scratch_cycle_mount "dax" echo "Inject memory failure (1 page)" # create two processes: # process1: mread 1 page to cause page fault, and wait # process2: mread 1 page to cause page fault, then inject poison on this page $here/src/t_mmap_cow_memory_failure -s1 -S1 -R $testdir/testfile -P $testdir/poisonfile echo "Inject memory failure (2 pages)" $here/src/t_mmap_cow_memory_failure -s2 -S2 -R $testdir/testfile -P $testdir/poisonfile _check_dmesg_for "Sending SIGBUS to t_mmap_cow_memo" || echo "Memory failure didn't kill the process" _check_dmesg_for "recovery action for dax page: Recovered" || echo "Failured page didn't recovered" # success, all done status=0 exit