From: "Ritesh Harjani (IBM)" <ritesh.list@xxxxxxxxx> This adds atomic write test using fio based on it's crc check verifier. fio adds a crc for each data block. If the underlying device supports atomic write then it is guaranteed that we will never have a mix data from two threads writing on the same physical block. Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx> Signed-off-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx> --- tests/generic/1226 | 66 ++++++++++++++++++++++++++++++++++++++++++ tests/generic/1226.out | 2 ++ 2 files changed, 68 insertions(+) create mode 100755 tests/generic/1226 create mode 100644 tests/generic/1226.out diff --git a/tests/generic/1226 b/tests/generic/1226 new file mode 100755 index 00000000..a5ce8556 --- /dev/null +++ b/tests/generic/1226 @@ -0,0 +1,66 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 IBM Corporation. All Rights Reserved. +# +# FS QA Test 1226 +# +# Validate FS atomic write using fio crc check verifier. +# +. ./common/preamble +. ./common/atomicwrites + +_begin_fstest auto aio rw atomicwrites + +_require_scratch_write_atomic +_require_odirect +_require_aio + +_scratch_mkfs >> $seqres.full 2>&1 +_scratch_mount + +touch "$SCRATCH_MNT/f1" +awu_min_write=$(_get_atomic_write_unit_min "$SCRATCH_MNT/f1") +awu_max_write=$(_get_atomic_write_unit_max "$SCRATCH_MNT/f1") +blocksize=$(_max "$awu_min_write" "$((awu_max_write/2))") + +# XFS can have high awu_max_write due to software fallback. Cap it at 64k +blocksize=$(_min "$blocksize" "65536") + +fio_config=$tmp.fio +fio_out=$tmp.fio.out + +FIO_LOAD=$(($(nproc) * 2 * LOAD_FACTOR)) +SIZE=$((100 * 1024 * 1024)) + +cat >$fio_config <<EOF +[aio-dio-aw-verify] +direct=1 +ioengine=libaio +rw=randwrite +bs=$blocksize +fallocate=native +filename=$SCRATCH_MNT/test-file +size=$SIZE +iodepth=$FIO_LOAD +numjobs=$FIO_LOAD +group_reporting=1 +verify_state_save=0 +verify=crc32c +verify_fatal=1 +verify_dump=0 +verify_backlog=1024 +verify_async=4 +verify_write_sequence=0 +atomic=1 +EOF + +_require_fio $fio_config + +cat $fio_config >> $seqres.full +$FIO_PROG $fio_config --output=$fio_out +cat $fio_out >> $seqres.full + +# success, all done +echo Silence is golden +status=0 +exit diff --git a/tests/generic/1226.out b/tests/generic/1226.out new file mode 100644 index 00000000..6dce0ea5 --- /dev/null +++ b/tests/generic/1226.out @@ -0,0 +1,2 @@ +QA output created by 1226 +Silence is golden -- 2.49.0