Message ID | 20190825220329.7942-3-nsoffer@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Optimize alignment probing | expand |
On Mon, Aug 26, 2019 at 1:03 AM Nir Soffer <nirsof@gmail.com> wrote: > Using block_resize we can test allocate_first_block() with file > descriptor opened with O_DIRECT, ensuring that it works for any size > larger than 4096 bytes. > > Testing smaller sizes is tricky as the result depends on the filesystem > used for testing. For example on NFS any size will work since O_DIRECT > does not require any alignment. > Forgot to add: Signed-off-by: Nir Soffer <nsoffer@redhat.com> --- > tests/qemu-iotests/175 | 25 +++++++++++++++++++++++++ > tests/qemu-iotests/175.out | 8 ++++++++ > 2 files changed, 33 insertions(+) > > diff --git a/tests/qemu-iotests/175 b/tests/qemu-iotests/175 > index d54cb43c39..60cc251eb2 100755 > --- a/tests/qemu-iotests/175 > +++ b/tests/qemu-iotests/175 > @@ -49,6 +49,23 @@ _filter_blocks() > -e "s/blocks=$((extra_blocks + img_size / > 512))\\(\$\\|[^0-9]\\)/max allocation/" > } > > +# Resize image using block_resize. > +# Parameter 1: image path > +# Parameter 2: new size > +_block_resize() > +{ > + local path=$1 > + local size=$2 > + > + $QEMU -qmp stdio -nographic -nodefaults \ > + -blockdev file,node-name=file,filename=$path,cache.direct=on \ > + <<EOF > +{'execute': 'qmp_capabilities'} > +{'execute': 'block_resize', 'arguments': {'node-name': 'file', 'size': > $size}} > +{'execute': 'quit'} > +EOF > +} > + > # get standard environment, filters and checks > . ./common.rc > . ./common.filter > @@ -79,6 +96,14 @@ for mode in off full falloc; do > stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks > $min_blocks $size > done > > +for new_size in 4096 1048576; do > + echo > + echo "== resize empty image with block_resize ==" > + _make_test_img 0 | _filter_imgfmt > + _block_resize $TEST_IMG $new_size >/dev/null > + stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks > $min_blocks $new_size > +done > + > # success, all done > echo "*** done" > rm -f $seq.full > diff --git a/tests/qemu-iotests/175.out b/tests/qemu-iotests/175.out > index 263e521262..39c2ee0f62 100644 > --- a/tests/qemu-iotests/175.out > +++ b/tests/qemu-iotests/175.out > @@ -15,4 +15,12 @@ size=1048576, max allocation > == creating image with preallocation falloc == > Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 > preallocation=falloc > size=1048576, max allocation > + > +== resize empty image with block_resize == > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0 > +size=4096, min allocation > + > +== resize empty image with block_resize == > +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0 > +size=1048576, min allocation > *** done > -- > 2.20.1 > >
On 26.08.19 00:03, Nir Soffer wrote: > Using block_resize we can test allocate_first_block() with file > descriptor opened with O_DIRECT, ensuring that it works for any size > larger than 4096 bytes. > > Testing smaller sizes is tricky as the result depends on the filesystem > used for testing. For example on NFS any size will work since O_DIRECT > does not require any alignment. > --- > tests/qemu-iotests/175 | 25 +++++++++++++++++++++++++ > tests/qemu-iotests/175.out | 8 ++++++++ > 2 files changed, 33 insertions(+) Thanks for the test! There’s just one thing: 175 now needs _default_cache_mode none _supported_cache_modes none directsync somewhere near the top (where the rest of _supported*) is. (Otherwise, it will fail when the iotests should be run with some other cache mode instead of being skipped.) With that added: Reviewed-by: Max Reitz <mreitz@redhat.com>
diff --git a/tests/qemu-iotests/175 b/tests/qemu-iotests/175 index d54cb43c39..60cc251eb2 100755 --- a/tests/qemu-iotests/175 +++ b/tests/qemu-iotests/175 @@ -49,6 +49,23 @@ _filter_blocks() -e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/max allocation/" } +# Resize image using block_resize. +# Parameter 1: image path +# Parameter 2: new size +_block_resize() +{ + local path=$1 + local size=$2 + + $QEMU -qmp stdio -nographic -nodefaults \ + -blockdev file,node-name=file,filename=$path,cache.direct=on \ + <<EOF +{'execute': 'qmp_capabilities'} +{'execute': 'block_resize', 'arguments': {'node-name': 'file', 'size': $size}} +{'execute': 'quit'} +EOF +} + # get standard environment, filters and checks . ./common.rc . ./common.filter @@ -79,6 +96,14 @@ for mode in off full falloc; do stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size done +for new_size in 4096 1048576; do + echo + echo "== resize empty image with block_resize ==" + _make_test_img 0 | _filter_imgfmt + _block_resize $TEST_IMG $new_size >/dev/null + stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $new_size +done + # success, all done echo "*** done" rm -f $seq.full diff --git a/tests/qemu-iotests/175.out b/tests/qemu-iotests/175.out index 263e521262..39c2ee0f62 100644 --- a/tests/qemu-iotests/175.out +++ b/tests/qemu-iotests/175.out @@ -15,4 +15,12 @@ size=1048576, max allocation == creating image with preallocation falloc == Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 preallocation=falloc size=1048576, max allocation + +== resize empty image with block_resize == +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0 +size=4096, min allocation + +== resize empty image with block_resize == +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=0 +size=1048576, min allocation *** done