From 99b14df4fcbb6ae27fe4875b7b63482679cb5d0f Mon Sep 17 00:00:00 2001 From: Ming Lei Date: Tue, 5 Mar 2019 09:50:26 +0800 Subject: [PATCH] blktests: add userspace IO test Add one test to cover changes on block passthrough IO interface, such as blk_rq_map_user(), blk_rq_map_user_iov(), blk_rq_unmap_user() and blk_rq_map_kern(). Signed-off-by: Ming Lei --- tests/nvme/029 | 99 ++++++++++++++++++++++++++++++++++++++++++++++ tests/nvme/029.out | 4 ++ 2 files changed, 103 insertions(+) create mode 100755 tests/nvme/029 create mode 100644 tests/nvme/029.out diff --git a/tests/nvme/029 b/tests/nvme/029 new file mode 100755 index 0000000..e63dfc1 --- /dev/null +++ b/tests/nvme/029 @@ -0,0 +1,99 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0+ +# Copyright (c) 2019 Ming Lei +# +# Test userspace IO on NVMe loop device. Regression test for patch "block: fix +# segment calculation for passthrough IO". + +. tests/nvme/rc + +DESCRIPTION="test userspace IO via nvme-cli read/write interface" +QUICK=1 + +requires() { + _have_program nvme && _have_modules loop nvme-loop nvmet && \ + _have_configfs +} + +test_user_io() +{ + local disk="$1" + local start=$2 + local cnt=$3 + local bs, size, img, img1 + + bs="$(blockdev --getss "$disk")" + size=$((cnt * bs)) + img="$(mktemp /tmp/blk_img_XXXXXX)" + img1="$(mktemp /tmp/blk_img_XXXXXX)" + + dd if=/dev/urandom of="$img" bs="$bs" count="$cnt" status=none + + ((cnt--)) + + if ! nvme write --start-block="$start" --block-count="$cnt" \ + --data-size="$size" --data="$img" "$disk"; then + return 1 + fi + if ! nvme read --start-block="$start" --block-count="$cnt" \ + --data-size="$size" --data="$img1" "$disk"; then + return 1 + fi + + diff -q -u "$img" "$img1" + local res=$? + + rm -f "$img" "$img1" + return $res +} + +test() { + echo "Running ${TEST_NAME}" + + modprobe nvmet + modprobe nvme-loop + + local port + local nvmedev + local loop_dev + local file_path="$TMPDIR/img" + local subsys_name="blktests-subsystem-1" + + truncate -s 1G "${file_path}" + + loop_dev="$(losetup -f --show "${file_path}")" + + _create_nvmet_subsystem "${subsys_name}" "${loop_dev}" \ + "91fdba0d-f87b-4c25-b80f-db7be1418b9e" + port="$(_create_nvmet_port "loop")" + _add_nvmet_subsys_to_port "${port}" "${subsys_name}" + + nvme connect -t loop -n "${subsys_name}" + + nvmedev="$(_find_nvme_loop_dev)" + cat "/sys/block/${nvmedev}n1/uuid" + cat "/sys/block/${nvmedev}n1/wwid" + + local dev="/dev/${nvmedev}n1" + test_user_io "$dev" 1 512 > "$FULL" 2>&1 || echo FAIL + test_user_io "$dev" 1 511 > "$FULL" 2>&1 || echo FAIL + test_user_io "$dev" 1 513 > "$FULL" 2>&1 || echo FAIL + test_user_io "$dev" 511 1024 > "$FULL" 2>&1 || echo FAIL + test_user_io "$dev" 511 1023 > "$FULL" 2>&1 || echo FAIL + test_user_io "$dev" 511 1025 > "$FULL" 2>&1 || echo FAIL + + nvme disconnect -n "${subsys_name}" >> "$FULL" 2>&1 + + _remove_nvmet_subsystem_from_port "${port}" "${subsys_name}" + _remove_nvmet_subsystem "${subsys_name}" + _remove_nvmet_port "${port}" + + losetup -d "${loop_dev}" + + rm "${file_path}" + + modprobe -r nvme-loop + modprobe -r nvmet + + echo "Test complete" +} diff --git a/tests/nvme/029.out b/tests/nvme/029.out new file mode 100644 index 0000000..0021003 --- /dev/null +++ b/tests/nvme/029.out @@ -0,0 +1,4 @@ +Running nvme/029 +91fdba0d-f87b-4c25-b80f-db7be1418b9e +uuid.91fdba0d-f87b-4c25-b80f-db7be1418b9e +Test complete -- 2.50.1