Skip to content

Commit 1207599

Browse files
Ming Leiaxboe
authored andcommitted
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>
1 parent d486650 commit 1207599

3 files changed

Lines changed: 81 additions & 4 deletions

File tree

tools/testing/selftests/ublk/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ TEST_PROGS += test_part_02.sh
5454

5555
TEST_PROGS += test_shmemzc_01.sh
5656
TEST_PROGS += test_shmemzc_02.sh
57+
TEST_PROGS += test_shmemzc_03.sh
5758

5859
TEST_PROGS += test_stress_01.sh
5960
TEST_PROGS += test_stress_02.sh

tools/testing/selftests/ublk/test_common.sh

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ _remove_tmp_dir() {
8888
_mkfs_mount_test()
8989
{
9090
local dev=$1
91+
shift
9192
local err_code=0
9293
local mnt_dir;
9394

@@ -99,12 +100,17 @@ _mkfs_mount_test()
99100
fi
100101

101102
mount -t ext4 "$dev" "$mnt_dir" > /dev/null 2>&1
103+
if [ $# -gt 0 ]; then
104+
cd "$mnt_dir" && "$@"
105+
err_code=$?
106+
cd - > /dev/null
107+
fi
102108
umount "$dev"
103-
err_code=$?
104-
_remove_tmp_dir "$mnt_dir"
105-
if [ $err_code -ne 0 ]; then
106-
return $err_code
109+
if [ $err_code -eq 0 ]; then
110+
err_code=$?
107111
fi
112+
_remove_tmp_dir "$mnt_dir"
113+
return $err_code
108114
}
109115

110116
_check_root() {
@@ -132,6 +138,7 @@ _prep_test() {
132138
local base_dir=${TMPDIR:-./ublktest-dir}
133139
mkdir -p "$base_dir"
134140
UBLK_TEST_DIR=$(mktemp -d ${base_dir}/${TID}.XXXXXX)
141+
UBLK_TEST_DIR=$(realpath ${UBLK_TEST_DIR})
135142
UBLK_TMP=$(mktemp ${UBLK_TEST_DIR}/ublk_test_XXXXX)
136143
[ "$UBLK_TEST_QUIET" -eq 0 ] && echo "ublk $type: $*"
137144
echo "ublk selftest: $TID starting at $(date '+%F %T')" | tee /dev/kmsg
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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

0 commit comments

Comments
 (0)