Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests: ublk: add end-to-end integrity test

Add test case loop_08 to verify the ublk integrity data flow. It uses
the kublk loop target to create a ublk device with integrity on top of
backing data and integrity files. It then writes to the whole device
with fio configured to generate integrity data. Then it reads back the
whole device with fio configured to verify the integrity data.
It also verifies that injected guard, reftag, and apptag corruptions are
correctly detected.

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Caleb Sander Mateos and committed by
Jens Axboe
78796b6b 9e9f6355

+112
+1
tools/testing/selftests/ublk/Makefile
··· 35 35 TEST_PROGS += test_loop_05.sh 36 36 TEST_PROGS += test_loop_06.sh 37 37 TEST_PROGS += test_loop_07.sh 38 + TEST_PROGS += test_loop_08.sh 38 39 TEST_PROGS += test_stripe_01.sh 39 40 TEST_PROGS += test_stripe_02.sh 40 41 TEST_PROGS += test_stripe_03.sh
+111
tools/testing/selftests/ublk/test_loop_08.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh 5 + 6 + if ! _have_program fio; then 7 + exit $UBLK_SKIP_CODE 8 + fi 9 + 10 + fio_version=$(fio --version) 11 + if [[ "$fio_version" =~ fio-[0-9]+\.[0-9]+$ ]]; then 12 + echo "Requires development fio version with https://github.com/axboe/fio/pull/1992" 13 + exit $UBLK_SKIP_CODE 14 + fi 15 + 16 + TID=loop_08 17 + 18 + _prep_test "loop" "end-to-end integrity" 19 + 20 + _create_backfile 0 256M 21 + _create_backfile 1 32M # 256M * (64 integrity bytes / 512 data bytes) 22 + integrity_params="--integrity_capable --integrity_reftag 23 + --metadata_size 64 --pi_offset 56 --csum_type t10dif" 24 + dev_id=$(_add_ublk_dev -t loop -u $integrity_params "${UBLK_BACKFILES[@]}") 25 + _check_add_dev $TID $? 26 + 27 + # 1M * (64 integrity bytes / 512 data bytes) = 128K 28 + fio_args="--ioengine io_uring --direct 1 --bsrange 512-1M --iodepth 32 29 + --md_per_io_size 128K --pi_act 0 --pi_chk GUARD,REFTAG,APPTAG 30 + --filename /dev/ublkb$dev_id" 31 + fio --name fill --rw randwrite $fio_args > /dev/null 32 + err=$? 33 + if [ $err != 0 ]; then 34 + echo "fio fill failed" 35 + _show_result $TID $err 36 + fi 37 + 38 + fio --name verify --rw randread $fio_args > /dev/null 39 + err=$? 40 + if [ $err != 0 ]; then 41 + echo "fio verify failed" 42 + _show_result $TID $err 43 + fi 44 + 45 + fio_err=$(mktemp fio_err_XXXXX) 46 + 47 + # Overwrite 4-byte reftag at offset 56 + 4 = 60 48 + dd_reftag_args="bs=1 seek=60 count=4 oflag=dsync conv=notrunc status=none" 49 + dd if=/dev/urandom "of=${UBLK_BACKFILES[1]}" $dd_reftag_args 50 + err=$? 51 + if [ $err != 0 ]; then 52 + echo "dd corrupted_reftag failed" 53 + rm -f "$fio_err" 54 + _show_result $TID $err 55 + fi 56 + if fio --name corrupted_reftag --rw randread $fio_args > /dev/null 2> "$fio_err"; then 57 + echo "fio corrupted_reftag unexpectedly succeeded" 58 + rm -f "$fio_err" 59 + _show_result $TID 255 60 + fi 61 + expected_err="REFTAG compare error: LBA: 0 Expected=0, Actual=" 62 + if ! grep -q "$expected_err" "$fio_err"; then 63 + echo "fio corrupted_reftag message not found: $expected_err" 64 + rm -f "$fio_err" 65 + _show_result $TID 255 66 + fi 67 + # Reset to 0 68 + dd if=/dev/zero "of=${UBLK_BACKFILES[1]}" $dd_reftag_args 69 + err=$? 70 + if [ $err != 0 ]; then 71 + echo "dd restore corrupted_reftag failed" 72 + rm -f "$fio_err" 73 + _show_result $TID $err 74 + fi 75 + 76 + dd_data_args="bs=512 count=1 oflag=direct,dsync conv=notrunc status=none" 77 + dd if=/dev/zero "of=${UBLK_BACKFILES[0]}" $dd_data_args 78 + err=$? 79 + if [ $err != 0 ]; then 80 + echo "dd corrupted_data failed" 81 + rm -f "$fio_err" 82 + _show_result $TID $err 83 + fi 84 + if fio --name corrupted_data --rw randread $fio_args > /dev/null 2> "$fio_err"; then 85 + echo "fio corrupted_data unexpectedly succeeded" 86 + rm -f "$fio_err" 87 + _show_result $TID 255 88 + fi 89 + expected_err="Guard compare error: LBA: 0 Expected=0, Actual=" 90 + if ! grep -q "$expected_err" "$fio_err"; then 91 + echo "fio corrupted_data message not found: $expected_err" 92 + rm -f "$fio_err" 93 + _show_result $TID 255 94 + fi 95 + 96 + if fio --name bad_apptag --rw randread $fio_args --apptag 0x4321 > /dev/null 2> "$fio_err"; then 97 + echo "fio bad_apptag unexpectedly succeeded" 98 + rm -f "$fio_err" 99 + _show_result $TID 255 100 + fi 101 + expected_err="APPTAG compare error: LBA: [0-9]* Expected=4321, Actual=1234" 102 + if ! grep -q "$expected_err" "$fio_err"; then 103 + echo "fio bad_apptag message not found: $expected_err" 104 + rm -f "$fio_err" 105 + _show_result $TID 255 106 + fi 107 + 108 + rm -f "$fio_err" 109 + 110 + _cleanup_test 111 + _show_result $TID 0