xref: /openbmc/qemu/tests/qemu-iotests/204 (revision 0e324626)
111a82d14SPhilippe Mathieu-Daudé#!/usr/bin/env bash
2*9dd003a9SVladimir Sementsov-Ogievskiy# group: rw quick
3d6ac6e93SEric Blake#
4d6ac6e93SEric Blake# Test corner cases with unusual block geometries
5d6ac6e93SEric Blake#
6d6ac6e93SEric Blake# Copyright (C) 2016-2018 Red Hat, Inc.
7d6ac6e93SEric Blake#
8d6ac6e93SEric Blake# This program is free software; you can redistribute it and/or modify
9d6ac6e93SEric Blake# it under the terms of the GNU General Public License as published by
10d6ac6e93SEric Blake# the Free Software Foundation; either version 2 of the License, or
11d6ac6e93SEric Blake# (at your option) any later version.
12d6ac6e93SEric Blake#
13d6ac6e93SEric Blake# This program is distributed in the hope that it will be useful,
14d6ac6e93SEric Blake# but WITHOUT ANY WARRANTY; without even the implied warranty of
15d6ac6e93SEric Blake# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16d6ac6e93SEric Blake# GNU General Public License for more details.
17d6ac6e93SEric Blake#
18d6ac6e93SEric Blake# You should have received a copy of the GNU General Public License
19d6ac6e93SEric Blake# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20d6ac6e93SEric Blake#
21d6ac6e93SEric Blake
22d6ac6e93SEric Blake# creator
23d6ac6e93SEric Blakeowner=eblake@redhat.com
24d6ac6e93SEric Blake
25d6ac6e93SEric Blakeseq=`basename $0`
26d6ac6e93SEric Blakeecho "QA output created by $seq"
27d6ac6e93SEric Blake
28d6ac6e93SEric Blakestatus=1	# failure is the default!
29d6ac6e93SEric Blake
30d6ac6e93SEric Blake_cleanup()
31d6ac6e93SEric Blake{
32d6ac6e93SEric Blake	_cleanup_test_img
33d6ac6e93SEric Blake}
34d6ac6e93SEric Blaketrap "_cleanup; exit \$status" 0 1 2 3 15
35d6ac6e93SEric Blake
36d6ac6e93SEric Blake# get standard environment, filters and checks
37d6ac6e93SEric Blake. ./common.rc
38d6ac6e93SEric Blake. ./common.filter
39d6ac6e93SEric Blake
40d6ac6e93SEric Blake_supported_fmt qcow2
4157284d2aSMax Reitz_supported_proto file fuse
42d6ac6e93SEric Blake# This test assumes that discard leaves zero clusters; see test 177 for
43d6ac6e93SEric Blake# other tests that also work in older images
44d6ac6e93SEric Blake_unsupported_imgopts 'compat=0.10'
45d6ac6e93SEric Blake
46d6ac6e93SEric BlakeCLUSTER_SIZE=1M
47d6ac6e93SEric Blakesize=128M
48d6ac6e93SEric Blakeoptions=driver=blkdebug,image.driver=qcow2
49d6ac6e93SEric Blakenested_opts=image.file.driver=file,image.file.filename=$TEST_IMG
50d6ac6e93SEric Blake
51d6ac6e93SEric Blakeecho
52d6ac6e93SEric Blakeecho "== setting up files =="
53d6ac6e93SEric Blake
54d6ac6e93SEric BlakeTEST_IMG="$TEST_IMG.base" _make_test_img $size
55d6ac6e93SEric Blake$QEMU_IO -c "write -P 11 0 $size" "$TEST_IMG.base" | _filter_qemu_io
56b66ff2c2SEric Blake_make_test_img -b "$TEST_IMG.base" -F $IMGFMT
57d6ac6e93SEric Blake$QEMU_IO -c "write -P 22 0 110M" "$TEST_IMG" | _filter_qemu_io
58d6ac6e93SEric Blake
59d6ac6e93SEric Blake# Limited to 64k max-transfer
60d6ac6e93SEric Blakeecho
61d6ac6e93SEric Blakeecho "== constrained alignment and max-transfer =="
62d6ac6e93SEric Blakelimits=align=4k,max-transfer=64k
63d6ac6e93SEric Blake$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
64d6ac6e93SEric Blake         -c "write -P 33 1000 128k" -c "read -P 33 1000 128k" | _filter_qemu_io
65d6ac6e93SEric Blake
66d6ac6e93SEric Blakeecho
67d6ac6e93SEric Blakeecho "== write zero with constrained max-transfer =="
68d6ac6e93SEric Blakelimits=align=512,max-transfer=64k,opt-write-zero=$CLUSTER_SIZE
69d6ac6e93SEric Blake$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
70d6ac6e93SEric Blake         -c "write -z 8003584 2093056" | _filter_qemu_io
71d6ac6e93SEric Blake
72d6ac6e93SEric Blake# non-power-of-2 write-zero/discard alignments
73d6ac6e93SEric Blakeecho
74d6ac6e93SEric Blakeecho "== non-power-of-2 write zeroes limits =="
75d6ac6e93SEric Blake
76d6ac6e93SEric Blakelimits=align=512,opt-write-zero=15M,max-write-zero=15M,opt-discard=15M,max-discard=15M
77d6ac6e93SEric Blake$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
78d6ac6e93SEric Blake         -c "write -z 32M 32M" | _filter_qemu_io
79d6ac6e93SEric Blake
80d6ac6e93SEric Blakeecho
81d6ac6e93SEric Blakeecho "== non-power-of-2 discard limits =="
82d6ac6e93SEric Blake
83d6ac6e93SEric Blakelimits=align=512,opt-write-zero=15M,max-write-zero=15M,opt-discard=15M,max-discard=15M
84d6ac6e93SEric Blake$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
85d6ac6e93SEric Blake         -c "discard 80000001 30M" | _filter_qemu_io
86d6ac6e93SEric Blake
87d6ac6e93SEric Blakeecho
88d6ac6e93SEric Blakeecho "== block status smaller than alignment =="
89d6ac6e93SEric Blakelimits=align=4k
90d6ac6e93SEric Blake$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
91d6ac6e93SEric Blake	 -c "alloc 1 1" -c "alloc 0x6dffff0 1000" -c "alloc 127m 5P" \
92d6ac6e93SEric Blake	 -c map | _filter_qemu_io
93d6ac6e93SEric Blake
94d6ac6e93SEric Blakeecho
95d6ac6e93SEric Blakeecho "== verify image content =="
96d6ac6e93SEric Blake
978cedcffdSEric Blakeverify_io()
98d6ac6e93SEric Blake{
99d6ac6e93SEric Blake    echo read -P 22 0 1000
100d6ac6e93SEric Blake    echo read -P 33 1000 128k
101d6ac6e93SEric Blake    echo read -P 22 132072 7871512
102d6ac6e93SEric Blake    echo read -P 0 8003584 2093056
103d6ac6e93SEric Blake    echo read -P 22 10096640 23457792
104d6ac6e93SEric Blake    echo read -P 0 32M 32M
105d6ac6e93SEric Blake    echo read -P 22 64M 13M
106d6ac6e93SEric Blake    echo read -P 0 77M 29M
107d6ac6e93SEric Blake    echo read -P 22 106M 4M
108d6ac6e93SEric Blake    echo read -P 11 110M 18M
109d6ac6e93SEric Blake}
110d6ac6e93SEric Blake
111d6ac6e93SEric Blakeverify_io | $QEMU_IO -r "$TEST_IMG" | _filter_qemu_io
112d6ac6e93SEric Blake$QEMU_IMG map --image-opts "$options,$nested_opts,align=4k" \
113d6ac6e93SEric Blake    | _filter_qemu_img_map
114d6ac6e93SEric Blake
115d6ac6e93SEric Blake_check_test_img
116d6ac6e93SEric Blake
117d6ac6e93SEric Blake# success, all done
118d6ac6e93SEric Blakeecho "*** done"
119d6ac6e93SEric Blakestatus=0
120