Commit 7e3dc2ba authored by Nir Soffer's avatar Nir Soffer Committed by Max Reitz
Browse files

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: default avatarNir Soffer <nsoffer@redhat.com>
Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
Message-id: 20190827010528.8818-3-nsoffer@redhat.com
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
parent 3a20013f
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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
+8 −0
Original line number Diff line number Diff line
@@ -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