提交 2fab30c8 编写于 作者: M Max Reitz 提交者: Kevin Wolf

iotests: Test unaligned raw images with O_DIRECT

We already have 221 for accesses through the page cache, but it is
better to create a new file for O_DIRECT instead of integrating those
test cases into 221.  This way, we can make use of
_supported_cache_modes (and _default_cache_mode) so the test is
automatically skipped on filesystems that do not support O_DIRECT.

As part of the split, add _supported_cache_modes to 221.  With that, it
no longer fails when run with -c none or -c directsync.
Signed-off-by: NMax Reitz <mreitz@redhat.com>
Reviewed-by: NEric Blake <eblake@redhat.com>
Signed-off-by: NKevin Wolf <kwolf@redhat.com>
上级 9c3db310
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# Test qemu-img vs. unaligned images # Test qemu-img vs. unaligned images
# (See also 253, which is the O_DIRECT version)
# #
# Copyright (C) 2018-2019 Red Hat, Inc. # Copyright (C) 2018-2019 Red Hat, Inc.
# #
...@@ -37,6 +38,9 @@ _supported_fmt raw ...@@ -37,6 +38,9 @@ _supported_fmt raw
_supported_proto file _supported_proto file
_supported_os Linux _supported_os Linux
_default_cache_mode writeback
_supported_cache_modes writeback writethrough unsafe
echo echo
echo "=== Check mapping of unaligned raw image ===" echo "=== Check mapping of unaligned raw image ==="
echo echo
......
#!/usr/bin/env bash
#
# Test qemu-img vs. unaligned images; O_DIRECT version
# (Originates from 221)
#
# Copyright (C) 2019 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
seq="$(basename $0)"
echo "QA output created by $seq"
status=1 # failure is the default!
_cleanup()
{
_cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common.rc
. ./common.filter
_supported_fmt raw
_supported_proto file
_supported_os Linux
_default_cache_mode none
_supported_cache_modes none directsync
echo
echo "=== Check mapping of unaligned raw image ==="
echo
# We do not know how large a physical sector is, but it is certainly
# going to be a factor of 1 MB
size=$((1 * 1024 * 1024 - 1))
# qemu-img create rounds size up to BDRV_SECTOR_SIZE
_make_test_img $size
$QEMU_IMG map --output=json --image-opts \
"driver=$IMGFMT,file.driver=file,file.filename=$TEST_IMG,cache.direct=on" \
| _filter_qemu_img_map
# so we resize it and check again
truncate --size=$size "$TEST_IMG"
$QEMU_IMG map --output=json --image-opts \
"driver=$IMGFMT,file.driver=file,file.filename=$TEST_IMG,cache.direct=on" \
| _filter_qemu_img_map
# qemu-io with O_DIRECT always writes whole physical sectors. Again,
# we do not know how large a physical sector is, so we just start
# writing from a 64 kB boundary, which should always be aligned.
offset=$((1 * 1024 * 1024 - 64 * 1024))
$QEMU_IO -c "w $offset $((size - offset))" "$TEST_IMG" | _filter_qemu_io
$QEMU_IMG map --output=json --image-opts \
"driver=$IMGFMT,file.driver=file,file.filename=$TEST_IMG,cache.direct=on" \
| _filter_qemu_img_map
# Resize it and check again -- contrary to 221, we may not get partial
# sectors here, so there should be only two areas (one zero, one
# data).
truncate --size=$size "$TEST_IMG"
$QEMU_IMG map --output=json --image-opts \
"driver=$IMGFMT,file.driver=file,file.filename=$TEST_IMG,cache.direct=on" \
| _filter_qemu_img_map
# success, all done
echo '*** done'
rm -f $seq.full
status=0
QA output created by 253
=== Check mapping of unaligned raw image ===
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048575
[{ "start": 0, "length": 1048576, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
[{ "start": 0, "length": 1048576, "depth": 0, "zero": true, "data": false, "offset": OFFSET}]
wrote 65535/65535 bytes at offset 983040
63.999 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
[{ "start": 0, "length": 983040, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
{ "start": 983040, "length": 65536, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
[{ "start": 0, "length": 983040, "depth": 0, "zero": true, "data": false, "offset": OFFSET},
{ "start": 983040, "length": 65536, "depth": 0, "zero": false, "data": true, "offset": OFFSET}]
*** done
...@@ -250,3 +250,4 @@ ...@@ -250,3 +250,4 @@
248 rw auto quick 248 rw auto quick
249 rw auto quick 249 rw auto quick
252 rw auto backing quick 252 rw auto backing quick
253 rw auto quick
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册