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 filesystem fio verify test for shmem_zc

Add test_shmemzc_03.sh which exercises shmem_zc through the full
filesystem stack: mkfs ext4 on the ublk device, mount it, then run
fio verify on a file inside the filesystem with --mem=mmaphuge.

Extend _mkfs_mount_test() to accept an optional command that runs
between mount and umount. The function cd's into the mount directory
so the command can use relative file paths. Existing callers that
pass only the device are unaffected.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://patch.msgid.link/20260331153207.3635125-10-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Ming Lei and committed by
Jens Axboe
12075992 d4866503

+82 -5
+1
tools/testing/selftests/ublk/Makefile
··· 54 54 55 55 TEST_PROGS += test_shmemzc_01.sh 56 56 TEST_PROGS += test_shmemzc_02.sh 57 + TEST_PROGS += test_shmemzc_03.sh 57 58 58 59 TEST_PROGS += test_stress_01.sh 59 60 TEST_PROGS += test_stress_02.sh
+12 -5
tools/testing/selftests/ublk/test_common.sh
··· 88 88 _mkfs_mount_test() 89 89 { 90 90 local dev=$1 91 + shift 91 92 local err_code=0 92 93 local mnt_dir; 93 94 ··· 100 99 fi 101 100 102 101 mount -t ext4 "$dev" "$mnt_dir" > /dev/null 2>&1 103 - umount "$dev" 104 - err_code=$? 105 - _remove_tmp_dir "$mnt_dir" 106 - if [ $err_code -ne 0 ]; then 107 - return $err_code 102 + if [ $# -gt 0 ]; then 103 + cd "$mnt_dir" && "$@" 104 + err_code=$? 105 + cd - > /dev/null 108 106 fi 107 + umount "$dev" 108 + if [ $err_code -eq 0 ]; then 109 + err_code=$? 110 + fi 111 + _remove_tmp_dir "$mnt_dir" 112 + return $err_code 109 113 } 110 114 111 115 _check_root() { ··· 138 132 local base_dir=${TMPDIR:-./ublktest-dir} 139 133 mkdir -p "$base_dir" 140 134 UBLK_TEST_DIR=$(mktemp -d ${base_dir}/${TID}.XXXXXX) 135 + UBLK_TEST_DIR=$(realpath ${UBLK_TEST_DIR}) 141 136 UBLK_TMP=$(mktemp ${UBLK_TEST_DIR}/ublk_test_XXXXX) 142 137 [ "$UBLK_TEST_QUIET" -eq 0 ] && echo "ublk $type: $*" 143 138 echo "ublk selftest: $TID starting at $(date '+%F %T')" | tee /dev/kmsg
+69
tools/testing/selftests/ublk/test_shmemzc_03.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + # Test: shmem_zc with fio verify over filesystem on loop target 4 + # 5 + # mkfs + mount ext4 on the ublk device, then run fio verify on a 6 + # file inside that filesystem. Exercises the full stack: 7 + # filesystem -> block layer -> ublk shmem_zc -> loop target backing file. 8 + 9 + . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh 10 + 11 + ERR_CODE=0 12 + 13 + _prep_test "shmem_zc" "loop target hugetlbfs shmem zero-copy fs verify test" 14 + 15 + if ! _have_program fio; then 16 + echo "SKIP: fio not available" 17 + exit "$UBLK_SKIP_CODE" 18 + fi 19 + 20 + if ! grep -q hugetlbfs /proc/filesystems; then 21 + echo "SKIP: hugetlbfs not supported" 22 + exit "$UBLK_SKIP_CODE" 23 + fi 24 + 25 + # Allocate hugepages 26 + OLD_NR_HP=$(cat /proc/sys/vm/nr_hugepages) 27 + echo 10 > /proc/sys/vm/nr_hugepages 28 + NR_HP=$(cat /proc/sys/vm/nr_hugepages) 29 + if [ "$NR_HP" -lt 2 ]; then 30 + echo "SKIP: cannot allocate hugepages" 31 + echo "$OLD_NR_HP" > /proc/sys/vm/nr_hugepages 32 + exit "$UBLK_SKIP_CODE" 33 + fi 34 + 35 + # Mount hugetlbfs 36 + HTLB_MNT=$(mktemp -d "${UBLK_TEST_DIR}/htlb_mnt_XXXXXX") 37 + if ! mount -t hugetlbfs none "$HTLB_MNT"; then 38 + echo "SKIP: cannot mount hugetlbfs" 39 + rmdir "$HTLB_MNT" 40 + echo "$OLD_NR_HP" > /proc/sys/vm/nr_hugepages 41 + exit "$UBLK_SKIP_CODE" 42 + fi 43 + 44 + HTLB_FILE="$HTLB_MNT/ublk_buf" 45 + fallocate -l 4M "$HTLB_FILE" 46 + 47 + _create_backfile 0 256M 48 + BACKFILE="${UBLK_BACKFILES[0]}" 49 + 50 + dev_id=$(_add_ublk_dev -t loop --shmem_zc --htlb "$HTLB_FILE" "$BACKFILE") 51 + _check_add_dev $TID $? 52 + 53 + _mkfs_mount_test /dev/ublkb"${dev_id}" \ 54 + _run_fio_verify_io --filename=testfile \ 55 + --size=128M \ 56 + --mem=mmaphuge:"$HTLB_FILE" 57 + ERR_CODE=$? 58 + 59 + # Delete device first so daemon releases the htlb mmap 60 + _ublk_del_dev "${dev_id}" 61 + 62 + rm -f "$HTLB_FILE" 63 + umount "$HTLB_MNT" 64 + rmdir "$HTLB_MNT" 65 + echo "$OLD_NR_HP" > /proc/sys/vm/nr_hugepages 66 + 67 + _cleanup_test "shmem_zc" 68 + 69 + _show_result $TID $ERR_CODE