2 # SPDX-License-Identifier: GPL-2.0
8 # Run random AIO/DIO activity and fallocate/punch_hole simultaneously
9 # Test will operate on huge sparsed file so ENOSPC is expected.
12 _begin_fstest auto aio enospc preallocrw stress punch
17 # Import common functions.
20 # real QA test starts here
25 _require_block_device $SCRATCH_DEV
27 # xfs_io is not required for this test, but it's the best way to verify
28 # the test system supports fallocate() for allocation and hole punching
29 _require_xfs_io_command "falloc"
30 _require_xfs_io_command "fpunch"
32 NUM_JOBS=$((4*LOAD_FACTOR))
33 BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
34 if [ $((BLK_DEV_SIZE)) -gt 1048576 ]; then
37 FS_SIZE=$((BLK_DEV_SIZE * 512))
39 cat >$fio_config <<EOF
41 # $seq test fio activity
42 # Run DIO, fallocate and punch_hole threads on a single in parallel
44 # If race exist old dio request may rewrite punched block after it was
45 # allocated to another file, we will catch that by verifying blocks content
48 directory=${SCRATCH_MNT}
51 continue_on_error=write
59 ## Perform direct aio, to files which may be truncated
63 iodepth=128*${LOAD_FACTOR}
68 runtime=100*${TIME_FACTOR}
72 # Run falloc and punch_hole threads in parallel
73 # After activity file will be highly fragmented
76 runtime=100*${TIME_FACTOR}
78 bssplit=128k/80:512k/10:32k/10
85 runtime=100*${TIME_FACTOR}
93 # Verifier thread continiously write to newly allcated blocks
94 # and veryfy written content
97 iodepth=128*${LOAD_FACTOR}
108 filename=aio-dio-verifier
111 _require_fio $fio_config
113 _scratch_mkfs_sized $FS_SIZE >> $seqres.full 2>&1
117 echo "Run fio with random aio-dio pattern"
119 cat $fio_config >> $seqres.full
120 $FIO_PROG $fio_config --output=$fio_out
121 cat $fio_out >> $seqres.full