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@xxxxxxxxxx> > > --- > > 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@xxxxxxxxxx> > > +# > > +# 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