#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2022 Fujitsu Limited. All Rights Reserved. # # FS QA Test No. 552 # # Test memory failure mechanism when dax and reflink working together # test for partly reflinked file # . ./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_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" nr=16 blksz=$(_get_page_size) _pwrite_byte 0x61 0 $((blksz * nr)) $testdir/testfile >> $seqres.full _pwrite_byte 0x62 0 $((blksz * nr)) $testdir/poisonfile >> $seqres.full seq 0 2 $((nr - 1)) | while read i; do _reflink_range $testdir/testfile $((blksz * i)) \ $testdir/poisonfile $((blksz * i)) $blksz >> $seqres.full done _scratch_cycle_mount "dax" echo "Inject memory failure (1 page)" $here/src/t_mmap_cow_memory_failure -s1 -S1 -R $testdir/testfile -P $testdir/poisonfile echo "Inject memory failure (2 pages)" # poison on reflinked page and not reflinked page $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