* [PATCH] blktests: add userspace IO test
@ 2019-03-04 8:15 Ming Lei
2019-03-04 22:54 ` Omar Sandoval
0 siblings, 1 reply; 3+ messages in thread
From: Ming Lei @ 2019-03-04 8:15 UTC (permalink / raw)
To: Omar Sandoval; +Cc: linux-block, Ming Lei
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 <ming.lei@redhat.com>
---
tests/block/029 | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/block/029.out | 5 +++
2 files changed, 116 insertions(+)
create mode 100755 tests/block/029
create mode 100644 tests/block/029.out
diff --git a/tests/block/029 b/tests/block/029
new file mode 100755
index 000000000000..89d2de70833a
--- /dev/null
+++ b/tests/block/029
@@ -0,0 +1,111 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (c) 2019 Ming Lei <ming.lei@redhat.com>
+#
+# Test userspace IO on NVMe loop device
+
+. 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()
+{
+ DISK=$1
+ START=$2
+ CNT=$3
+
+ 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
+
+ let CNT--
+
+ nvme write --start-block=$START --block-count=$CNT --data-size=$SIZE --data=$IMG $DISK
+ [ $? -ne 0 ] && return -1
+ nvme read --start-block=$START --block-count=$CNT --data-size=$SIZE --data=$IMG1 $DISK
+ [ $? -ne 0 ] && return -1
+
+ diff -q -u $IMG $IMG1
+ RES=$?
+
+ rm -f $IMG $IMG1
+ return $RES
+}
+
+test_user_io()
+{
+ DEV=$1
+
+ __test_user_io $DEV 1 512 > /dev/null 2>&1
+ [ -$? -ne 0 ] && echo "FAIL"
+
+ __test_user_io $DEV 1 511 > /dev/null 2>&1
+ [ -$? -ne 0 ] && echo "FAIL"
+
+ __test_user_io $DEV 1 513 > /dev/null 2>&1
+ [ -$? -ne 0 ] && echo "FAIL"
+
+ __test_user_io $DEV 511 1024 > /dev/null 2>&1
+ [ -$? -ne 0 ] && echo "FAIL"
+
+ __test_user_io $DEV 511 1023 > /dev/null 2>&1
+ [ -$? -ne 0 ] && echo "FAIL"
+
+ __test_user_io $DEV 511 1025 > /dev/null 2>&1
+ [ -$? -ne 0 ] && echo "FAIL"
+}
+
+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"
+
+ test_user_io "/dev/${nvmedev}n1"
+
+ nvme disconnect -n "${subsys_name}"
+
+ _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/block/029.out b/tests/block/029.out
new file mode 100644
index 000000000000..89fc2313a723
--- /dev/null
+++ b/tests/block/029.out
@@ -0,0 +1,5 @@
+Running block/029
+91fdba0d-f87b-4c25-b80f-db7be1418b9e
+uuid.91fdba0d-f87b-4c25-b80f-db7be1418b9e
+NQN:blktests-subsystem-1 disconnected 1 controller(s)
+Test complete
--
2.9.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] blktests: add userspace IO test
2019-03-04 8:15 [PATCH] blktests: add userspace IO test Ming Lei
@ 2019-03-04 22:54 ` Omar Sandoval
2019-03-05 1:53 ` Ming Lei
0 siblings, 1 reply; 3+ messages in thread
From: Omar Sandoval @ 2019-03-04 22:54 UTC (permalink / raw)
To: Ming Lei; +Cc: Omar Sandoval, linux-block
On Mon, Mar 04, 2019 at 04:15:01PM +0800, Ming Lei wrote:
> 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 <ming.lei@redhat.com>
> ---
> tests/block/029 | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/block/029.out | 5 +++
> 2 files changed, 116 insertions(+)
> create mode 100755 tests/block/029
> create mode 100644 tests/block/029.out
>
> diff --git a/tests/block/029 b/tests/block/029
> new file mode 100755
> index 000000000000..89d2de70833a
> --- /dev/null
> +++ b/tests/block/029
> @@ -0,0 +1,111 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0+
> +# Copyright (c) 2019 Ming Lei <ming.lei@redhat.com>
> +#
> +# Test userspace IO on NVMe loop device
Is this a regression test for one of your recent patches?
> +. 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()
> +{
> + DISK=$1
> + START=$2
> + CNT=$3
> +
> + BS=`blockdev --getss $DISK`
$() instead of `` here and everywhere else, please. Also, $DISK needs to
quoted, as do several other variables. Please run `make check`.
> + SIZE=$(($CNT * $BS))
> +
> + IMG=`mktemp /tmp/blk_img_XXXXXX`
> + IMG1=`mktemp /tmp/blk_img_XXXXXX`
Please make all of these variables local and lowercase.
> + dd if=/dev/urandom of=$IMG bs=$BS count=$CNT status=none
> +
> + let CNT--
$((CNT--))
> + nvme write --start-block=$START --block-count=$CNT --data-size=$SIZE --data=$IMG $DISK
> + [ $? -ne 0 ] && return -1
> + nvme read --start-block=$START --block-count=$CNT --data-size=$SIZE --data=$IMG1 $DISK
> + [ $? -ne 0 ] && return -1
> +
> + diff -q -u $IMG $IMG1
> + RES=$?
> +
> + rm -f $IMG $IMG1
> + return $RES
> +}
> +
> +test_user_io()
> +{
> + DEV=$1
> +
> + __test_user_io $DEV 1 512 > /dev/null 2>&1
> + [ -$? -ne 0 ] && echo "FAIL"
> +
> + __test_user_io $DEV 1 511 > /dev/null 2>&1
> + [ -$? -ne 0 ] && echo "FAIL"
> +
> + __test_user_io $DEV 1 513 > /dev/null 2>&1
> + [ -$? -ne 0 ] && echo "FAIL"
> +
> + __test_user_io $DEV 511 1024 > /dev/null 2>&1
> + [ -$? -ne 0 ] && echo "FAIL"
> +
> + __test_user_io $DEV 511 1023 > /dev/null 2>&1
> + [ -$? -ne 0 ] && echo "FAIL"
> +
> + __test_user_io $DEV 511 1025 > /dev/null 2>&1
> + [ -$? -ne 0 ] && echo "FAIL"
> +}
> +
> +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"
> +
> + test_user_io "/dev/${nvmedev}n1"
> +
> + nvme disconnect -n "${subsys_name}"
We just changed the other nvme tests to redirect the output of
disconnect like so:
nvme disconnect -n "${subsys_name}" >> "$FULL" 2>&1
Let's do that for this one, too.
Thanks for the test!
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] blktests: add userspace IO test
2019-03-04 22:54 ` Omar Sandoval
@ 2019-03-05 1:53 ` Ming Lei
0 siblings, 0 replies; 3+ messages in thread
From: Ming Lei @ 2019-03-05 1:53 UTC (permalink / raw)
To: Omar Sandoval; +Cc: Omar Sandoval, linux-block
On Mon, Mar 04, 2019 at 02:54:54PM -0800, Omar Sandoval wrote:
> On Mon, Mar 04, 2019 at 04:15:01PM +0800, Ming Lei wrote:
> > 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 <ming.lei@redhat.com>
> > ---
> > tests/block/029 | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > tests/block/029.out | 5 +++
> > 2 files changed, 116 insertions(+)
> > create mode 100755 tests/block/029
> > create mode 100644 tests/block/029.out
> >
> > diff --git a/tests/block/029 b/tests/block/029
> > new file mode 100755
> > index 000000000000..89d2de70833a
> > --- /dev/null
> > +++ b/tests/block/029
> > @@ -0,0 +1,111 @@
> > +#!/bin/bash
> > +# SPDX-License-Identifier: GPL-2.0+
> > +# Copyright (c) 2019 Ming Lei <ming.lei@redhat.com>
> > +#
> > +# Test userspace IO on NVMe loop device
>
> Is this a regression test for one of your recent patches?
Yeah, it is for the following patch:
https://marc.info/?l=linux-block&m=155161907811128&w=2
Also it will serve regression test for the following(not posted yet) patch
of 'enabling multi-bvec 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()
> > +{
> > + DISK=$1
> > + START=$2
> > + CNT=$3
> > +
> > + BS=`blockdev --getss $DISK`
>
> $() instead of `` here and everywhere else, please. Also, $DISK needs to
> quoted, as do several other variables. Please run `make check`.
>
> > + SIZE=$(($CNT * $BS))
> > +
> > + IMG=`mktemp /tmp/blk_img_XXXXXX`
> > + IMG1=`mktemp /tmp/blk_img_XXXXXX`
>
> Please make all of these variables local and lowercase.
>
> > + dd if=/dev/urandom of=$IMG bs=$BS count=$CNT status=none
> > +
> > + let CNT--
>
> $((CNT--))
>
> > + nvme write --start-block=$START --block-count=$CNT --data-size=$SIZE --data=$IMG $DISK
> > + [ $? -ne 0 ] && return -1
> > + nvme read --start-block=$START --block-count=$CNT --data-size=$SIZE --data=$IMG1 $DISK
> > + [ $? -ne 0 ] && return -1
> > +
> > + diff -q -u $IMG $IMG1
> > + RES=$?
> > +
> > + rm -f $IMG $IMG1
> > + return $RES
> > +}
> > +
> > +test_user_io()
> > +{
> > + DEV=$1
> > +
> > + __test_user_io $DEV 1 512 > /dev/null 2>&1
> > + [ -$? -ne 0 ] && echo "FAIL"
> > +
> > + __test_user_io $DEV 1 511 > /dev/null 2>&1
> > + [ -$? -ne 0 ] && echo "FAIL"
> > +
> > + __test_user_io $DEV 1 513 > /dev/null 2>&1
> > + [ -$? -ne 0 ] && echo "FAIL"
> > +
> > + __test_user_io $DEV 511 1024 > /dev/null 2>&1
> > + [ -$? -ne 0 ] && echo "FAIL"
> > +
> > + __test_user_io $DEV 511 1023 > /dev/null 2>&1
> > + [ -$? -ne 0 ] && echo "FAIL"
> > +
> > + __test_user_io $DEV 511 1025 > /dev/null 2>&1
> > + [ -$? -ne 0 ] && echo "FAIL"
> > +}
> > +
> > +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"
> > +
> > + test_user_io "/dev/${nvmedev}n1"
> > +
> > + nvme disconnect -n "${subsys_name}"
>
> We just changed the other nvme tests to redirect the output of
> disconnect like so:
>
> nvme disconnect -n "${subsys_name}" >> "$FULL" 2>&1
>
> Let's do that for this one, too.
>
> Thanks for the test!
All have been addressed in V2.
Thanks,
Ming
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-03-05 1:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-04 8:15 [PATCH] blktests: add userspace IO test Ming Lei
2019-03-04 22:54 ` Omar Sandoval
2019-03-05 1:53 ` Ming Lei
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).