Message ID | 20190304081501.3068-1-ming.lei@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | blktests: add userspace IO test | expand |
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!
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
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
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