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