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