1ee3a315eSPaolo Bonzini#!/bin/bash 2ee3a315eSPaolo Bonzini# 3ee3a315eSPaolo Bonzini# Test aligned and misaligned write zeroes operations. 4ee3a315eSPaolo Bonzini# 5ee3a315eSPaolo Bonzini# Copyright (C) 2012 Red Hat, Inc. 6ee3a315eSPaolo Bonzini# 7ee3a315eSPaolo Bonzini# This program is free software; you can redistribute it and/or modify 8ee3a315eSPaolo Bonzini# it under the terms of the GNU General Public License as published by 9ee3a315eSPaolo Bonzini# the Free Software Foundation; either version 2 of the License, or 10ee3a315eSPaolo Bonzini# (at your option) any later version. 11ee3a315eSPaolo Bonzini# 12ee3a315eSPaolo Bonzini# This program is distributed in the hope that it will be useful, 13ee3a315eSPaolo Bonzini# but WITHOUT ANY WARRANTY; without even the implied warranty of 14ee3a315eSPaolo Bonzini# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15ee3a315eSPaolo Bonzini# GNU General Public License for more details. 16ee3a315eSPaolo Bonzini# 17ee3a315eSPaolo Bonzini# You should have received a copy of the GNU General Public License 18ee3a315eSPaolo Bonzini# along with this program. If not, see <http://www.gnu.org/licenses/>. 19ee3a315eSPaolo Bonzini# 20ee3a315eSPaolo Bonzini 21ee3a315eSPaolo Bonzini# creator 22ee3a315eSPaolo Bonziniowner=pbonzini@redhat.com 23ee3a315eSPaolo Bonzini 24ee3a315eSPaolo Bonziniseq=`basename $0` 25ee3a315eSPaolo Bonziniecho "QA output created by $seq" 26ee3a315eSPaolo Bonzini 27ee3a315eSPaolo Bonzinihere=`pwd` 28ee3a315eSPaolo Bonzinistatus=1 # failure is the default! 29ee3a315eSPaolo Bonzini 30ee3a315eSPaolo Bonzini_cleanup() 31ee3a315eSPaolo Bonzini{ 32ee3a315eSPaolo Bonzini _cleanup_test_img 33ee3a315eSPaolo Bonzini} 34ee3a315eSPaolo Bonzinitrap "_cleanup; exit \$status" 0 1 2 3 15 35ee3a315eSPaolo Bonzini 36ee3a315eSPaolo Bonzini# get standard environment, filters and checks 37ee3a315eSPaolo Bonzini. ./common.rc 38ee3a315eSPaolo Bonzini. ./common.filter 39ee3a315eSPaolo Bonzini 40ee3a315eSPaolo Bonzini_supported_fmt generic 41ee3a315eSPaolo Bonzini_supported_proto generic 42ee3a315eSPaolo Bonzini_supported_os Linux 43ee3a315eSPaolo Bonzini 44ee3a315eSPaolo Bonzini 45ee3a315eSPaolo Bonzinisize=128M 46ee3a315eSPaolo Bonzini_make_test_img $size 47ee3a315eSPaolo Bonzini 4861815d6eSFam Zhengdo_test() 4961815d6eSFam Zheng{ 5061815d6eSFam Zheng local align=$1 5161815d6eSFam Zheng local iocmd=$2 5261815d6eSFam Zheng local img=$3 53*13a1d4a7SDaniel P. Berrange if [ "$IMGOPTSSYNTAX" = "true" ] 54*13a1d4a7SDaniel P. Berrange then 55*13a1d4a7SDaniel P. Berrange IO_OPEN_ARG="$img" 56*13a1d4a7SDaniel P. Berrange IO_EXTRA_ARGS="--image-opts" 57*13a1d4a7SDaniel P. Berrange else 58*13a1d4a7SDaniel P. Berrange IO_OPEN_ARG="-o driver=$IMGFMT,file.align=$align blkdebug::$img" 59*13a1d4a7SDaniel P. Berrange IO_EXTRA_ARGS="" 60*13a1d4a7SDaniel P. Berrange fi 6161815d6eSFam Zheng { 62*13a1d4a7SDaniel P. Berrange echo "open $IO_OPEN_ARG" 6361815d6eSFam Zheng echo $iocmd 64*13a1d4a7SDaniel P. Berrange } | $QEMU_IO $IO_EXTRA_ARGS 6561815d6eSFam Zheng} 6661815d6eSFam Zheng 677fa84cd8SKevin Wolffor write_zero_cmd in "write -z" "aio_write -z"; do 6861815d6eSFam Zhengfor align in 512 4k; do 69ee3a315eSPaolo Bonzini echo 70ee3a315eSPaolo Bonzini echo "== preparing image ==" 7161815d6eSFam Zheng do_test $align "write -P 0xa 0x200 0x400" "$TEST_IMG" | _filter_qemu_io 7261815d6eSFam Zheng do_test $align "write -P 0xa 0x20000 0x600" "$TEST_IMG" | _filter_qemu_io 737fa84cd8SKevin Wolf do_test $align "$write_zero_cmd 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io 74ee3a315eSPaolo Bonzini 75ee3a315eSPaolo Bonzini echo 76ee3a315eSPaolo Bonzini echo "== verifying patterns (1) ==" 7761815d6eSFam Zheng do_test $align "read -P 0xa 0x200 0x200" "$TEST_IMG" | _filter_qemu_io 7861815d6eSFam Zheng do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io 7961815d6eSFam Zheng do_test $align "read -P 0xa 0x20400 0x200" "$TEST_IMG" | _filter_qemu_io 80ee3a315eSPaolo Bonzini 81ee3a315eSPaolo Bonzini echo 82ee3a315eSPaolo Bonzini echo "== rewriting zeroes ==" 8361815d6eSFam Zheng do_test $align "write -P 0xb 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io 847fa84cd8SKevin Wolf do_test $align "$write_zero_cmd 0x10000 0x10000" "$TEST_IMG" | _filter_qemu_io 85ee3a315eSPaolo Bonzini 86ee3a315eSPaolo Bonzini echo 87ee3a315eSPaolo Bonzini echo "== verifying patterns (2) ==" 8861815d6eSFam Zheng do_test $align "read -P 0x0 0x400 0x20000" "$TEST_IMG" | _filter_qemu_io 89ab53c447SFam Zheng 90ab53c447SFam Zheng echo 91ab53c447SFam Zheng echo "== rewriting unaligned zeroes ==" 92ab53c447SFam Zheng do_test $align "write -P 0xb 0x0 0x1000" "$TEST_IMG" | _filter_qemu_io 937fa84cd8SKevin Wolf do_test $align "$write_zero_cmd 0x200 0x200" "$TEST_IMG" | _filter_qemu_io 94ab53c447SFam Zheng 95ab53c447SFam Zheng echo 96ab53c447SFam Zheng echo "== verifying patterns (3) ==" 97ab53c447SFam Zheng do_test $align "read -P 0xb 0x0 0x200" "$TEST_IMG" | _filter_qemu_io 98ab53c447SFam Zheng do_test $align "read -P 0x0 0x200 0x200" "$TEST_IMG" | _filter_qemu_io 99ab53c447SFam Zheng do_test $align "read -P 0xb 0x400 0xc00" "$TEST_IMG" | _filter_qemu_io 100ab53c447SFam Zheng 101ab53c447SFam Zheng echo 10261815d6eSFam Zhengdone 1037fa84cd8SKevin Wolfdone 104ee3a315eSPaolo Bonzini 105ee3a315eSPaolo Bonzini# success, all done 106ee3a315eSPaolo Bonziniecho "*** done" 107ee3a315eSPaolo Bonzinirm -f $seq.full 108ee3a315eSPaolo Bonzinistatus=0 109