iotests: Test allocate_first_block() with O_DIRECT
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. Signed-off-by: Nir Soffer <nsoffer@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-id: 20190827010528.8818-3-nsoffer@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
3a20013fbb
commit
7e3dc2ba9a
@ -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
|
||||
@ -57,6 +74,9 @@ _supported_fmt raw
|
||||
_supported_proto file
|
||||
_supported_os Linux
|
||||
|
||||
_default_cache_mode none
|
||||
_supported_cache_modes none directsync
|
||||
|
||||
size=$((1 * 1024 * 1024))
|
||||
|
||||
touch "$TEST_DIR/empty"
|
||||
@ -79,6 +99,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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user