1*1ef7d010SKevin Wolf#!/bin/bash 2*1ef7d010SKevin Wolf# 3*1ef7d010SKevin Wolf# qcow2 specific bdrv_write_zeroes tests with backing files (complements 034) 4*1ef7d010SKevin Wolf# 5*1ef7d010SKevin Wolf# Copyright (C) 2016 Red Hat, Inc. 6*1ef7d010SKevin Wolf# 7*1ef7d010SKevin Wolf# This program is free software; you can redistribute it and/or modify 8*1ef7d010SKevin Wolf# it under the terms of the GNU General Public License as published by 9*1ef7d010SKevin Wolf# the Free Software Foundation; either version 2 of the License, or 10*1ef7d010SKevin Wolf# (at your option) any later version. 11*1ef7d010SKevin Wolf# 12*1ef7d010SKevin Wolf# This program is distributed in the hope that it will be useful, 13*1ef7d010SKevin Wolf# but WITHOUT ANY WARRANTY; without even the implied warranty of 14*1ef7d010SKevin Wolf# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*1ef7d010SKevin Wolf# GNU General Public License for more details. 16*1ef7d010SKevin Wolf# 17*1ef7d010SKevin Wolf# You should have received a copy of the GNU General Public License 18*1ef7d010SKevin Wolf# along with this program. If not, see <http://www.gnu.org/licenses/>. 19*1ef7d010SKevin Wolf# 20*1ef7d010SKevin Wolf 21*1ef7d010SKevin Wolf# creator 22*1ef7d010SKevin Wolfowner=kwolf@redhat.com 23*1ef7d010SKevin Wolf 24*1ef7d010SKevin Wolfseq=`basename $0` 25*1ef7d010SKevin Wolfecho "QA output created by $seq" 26*1ef7d010SKevin Wolf 27*1ef7d010SKevin Wolfhere=`pwd` 28*1ef7d010SKevin Wolfstatus=1 # failure is the default! 29*1ef7d010SKevin Wolf 30*1ef7d010SKevin Wolf_cleanup() 31*1ef7d010SKevin Wolf{ 32*1ef7d010SKevin Wolf _cleanup_test_img 33*1ef7d010SKevin Wolf} 34*1ef7d010SKevin Wolftrap "_cleanup; exit \$status" 0 1 2 3 15 35*1ef7d010SKevin Wolf 36*1ef7d010SKevin Wolf# get standard environment, filters and checks 37*1ef7d010SKevin Wolf. ./common.rc 38*1ef7d010SKevin Wolf. ./common.filter 39*1ef7d010SKevin Wolf 40*1ef7d010SKevin Wolf_supported_fmt qcow2 41*1ef7d010SKevin Wolf_supported_proto file 42*1ef7d010SKevin Wolf_supported_os Linux 43*1ef7d010SKevin Wolf 44*1ef7d010SKevin WolfCLUSTER_SIZE=4k 45*1ef7d010SKevin Wolfsize=128M 46*1ef7d010SKevin Wolf 47*1ef7d010SKevin Wolfecho 48*1ef7d010SKevin Wolfecho == backing file contains zeros == 49*1ef7d010SKevin Wolf 50*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 51*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 52*1ef7d010SKevin Wolf 53*1ef7d010SKevin Wolf# Make sure that the whole cluster is allocated even for partial write_zeroes 54*1ef7d010SKevin Wolf# when the backing file contains zeros 55*1ef7d010SKevin Wolf 56*1ef7d010SKevin Wolf# X = non-zero data sector in backing file 57*1ef7d010SKevin Wolf# - = sector unallocated in whole backing chain 58*1ef7d010SKevin Wolf# 0 = sector touched by write_zeroes request 59*1ef7d010SKevin Wolf 60*1ef7d010SKevin Wolf# 1. Tail unaligned: 00 00 -- -- 61*1ef7d010SKevin Wolf# 2. Head unaligned: -- -- 00 00 62*1ef7d010SKevin Wolf# 3. Both unaligned: -- 00 00 -- 63*1ef7d010SKevin Wolf# 4. Both, 2 clusters: -- -- -- 00 | 00 -- -- -- 64*1ef7d010SKevin Wolf 65*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 0 2k" "$TEST_IMG" | _filter_qemu_io 66*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 10k 2k" "$TEST_IMG" | _filter_qemu_io 67*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 17k 2k" "$TEST_IMG" | _filter_qemu_io 68*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 27k 2k" "$TEST_IMG" | _filter_qemu_io 69*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 70*1ef7d010SKevin Wolf 71*1ef7d010SKevin Wolfecho 72*1ef7d010SKevin Wolfecho == backing file contains non-zero data before write_zeroes == 73*1ef7d010SKevin Wolf 74*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 75*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 76*1ef7d010SKevin Wolf 77*1ef7d010SKevin Wolf# Single cluster; non-zero data at the cluster start 78*1ef7d010SKevin Wolf# ... | XX -- 00 -- | ... 79*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 32k 1k" "$TEST_IMG.base" | _filter_qemu_io 80*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 34k 1k" "$TEST_IMG" | _filter_qemu_io 81*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 32k 1k" "$TEST_IMG" | _filter_qemu_io 82*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 33k 3k" "$TEST_IMG" | _filter_qemu_io 83*1ef7d010SKevin Wolf 84*1ef7d010SKevin Wolf# Single cluster; non-zero data exists, but not at the cluster start 85*1ef7d010SKevin Wolf# ... | -- XX 00 -- | ... 86*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 65k 1k" "$TEST_IMG.base" | _filter_qemu_io 87*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 66k 1k" "$TEST_IMG" | _filter_qemu_io 88*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 65k 1k" "$TEST_IMG" | _filter_qemu_io 89*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 64k 1k" "$TEST_IMG" | _filter_qemu_io 90*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 66k 2k" "$TEST_IMG" | _filter_qemu_io 91*1ef7d010SKevin Wolf 92*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 93*1ef7d010SKevin Wolf 94*1ef7d010SKevin Wolfecho 95*1ef7d010SKevin Wolfecho == backing file contains non-zero data after write_zeroes == 96*1ef7d010SKevin Wolf 97*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 98*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 99*1ef7d010SKevin Wolf 100*1ef7d010SKevin Wolf# Single cluster; non-zero data directly after request 101*1ef7d010SKevin Wolf# ... | -- 00 XX -- | ... 102*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 34k 1k" "$TEST_IMG.base" | _filter_qemu_io 103*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 33k 1k" "$TEST_IMG" | _filter_qemu_io 104*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 32k 2k" "$TEST_IMG" | _filter_qemu_io 105*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 34k 1k" "$TEST_IMG" | _filter_qemu_io 106*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 35k 1k" "$TEST_IMG" | _filter_qemu_io 107*1ef7d010SKevin Wolf 108*1ef7d010SKevin Wolf# Single cluster; non-zero data exists, but not directly after request 109*1ef7d010SKevin Wolf# ... | -- 00 -- XX | ... 110*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 43k 1k" "$TEST_IMG.base" | _filter_qemu_io 111*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 41k 1k" "$TEST_IMG" | _filter_qemu_io 112*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 43k 1k" "$TEST_IMG" | _filter_qemu_io 113*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 40k 3k" "$TEST_IMG" | _filter_qemu_io 114*1ef7d010SKevin Wolf 115*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 116*1ef7d010SKevin Wolf 117*1ef7d010SKevin Wolfecho 118*1ef7d010SKevin Wolfecho == spanning two clusters, non-zero before request == 119*1ef7d010SKevin Wolf 120*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 121*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 122*1ef7d010SKevin Wolf 123*1ef7d010SKevin Wolf# Two clusters; non-zero data before request: 124*1ef7d010SKevin Wolf# 1. At cluster start: 32k: XX -- -- 00 | 00 -- -- -- 125*1ef7d010SKevin Wolf# 2. Between unallocated space: 48k: -- XX -- 00 | 00 -- -- -- 126*1ef7d010SKevin Wolf# 3. Directly before request: 64k: -- -- XX 00 | 00 -- -- -- 127*1ef7d010SKevin Wolf 128*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 32k 1k" "$TEST_IMG.base" | _filter_qemu_io 129*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 35k 2k" "$TEST_IMG" | _filter_qemu_io 130*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 32k 1k" "$TEST_IMG" | _filter_qemu_io 131*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 33k 7k" "$TEST_IMG" | _filter_qemu_io 132*1ef7d010SKevin Wolf 133*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 49k 1k" "$TEST_IMG.base" | _filter_qemu_io 134*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 51k 2k" "$TEST_IMG" | _filter_qemu_io 135*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 48k 1k" "$TEST_IMG" | _filter_qemu_io 136*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 49k 1k" "$TEST_IMG" | _filter_qemu_io 137*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 50k 6k" "$TEST_IMG" | _filter_qemu_io 138*1ef7d010SKevin Wolf 139*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 66k 1k" "$TEST_IMG.base" | _filter_qemu_io 140*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 67k 2k" "$TEST_IMG" | _filter_qemu_io 141*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 64k 2k" "$TEST_IMG" | _filter_qemu_io 142*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 66k 1k" "$TEST_IMG" | _filter_qemu_io 143*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 67k 5k" "$TEST_IMG" | _filter_qemu_io 144*1ef7d010SKevin Wolf 145*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 146*1ef7d010SKevin Wolf 147*1ef7d010SKevin Wolfecho 148*1ef7d010SKevin Wolfecho == spanning two clusters, non-zero after request == 149*1ef7d010SKevin Wolf 150*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 151*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 152*1ef7d010SKevin Wolf 153*1ef7d010SKevin Wolf# Two clusters; non-zero data after request: 154*1ef7d010SKevin Wolf# 1. Directly after request: 32k: -- -- -- 00 | 00 XX -- -- 155*1ef7d010SKevin Wolf# 2. Between unallocated space: 48k: -- -- -- 00 | 00 -- XX -- 156*1ef7d010SKevin Wolf# 3. At cluster end: 64k: -- -- -- 00 | 00 -- -- XX 157*1ef7d010SKevin Wolf 158*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 37k 1k" "$TEST_IMG.base" | _filter_qemu_io 159*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 35k 2k" "$TEST_IMG" | _filter_qemu_io 160*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 32k 5k" "$TEST_IMG" | _filter_qemu_io 161*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 37k 1k" "$TEST_IMG" | _filter_qemu_io 162*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 38k 2k" "$TEST_IMG" | _filter_qemu_io 163*1ef7d010SKevin Wolf 164*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 54k 1k" "$TEST_IMG.base" | _filter_qemu_io 165*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 51k 2k" "$TEST_IMG" | _filter_qemu_io 166*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 48k 6k" "$TEST_IMG" | _filter_qemu_io 167*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 54k 1k" "$TEST_IMG" | _filter_qemu_io 168*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 55k 1k" "$TEST_IMG" | _filter_qemu_io 169*1ef7d010SKevin Wolf 170*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 71k 1k" "$TEST_IMG.base" | _filter_qemu_io 171*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 67k 2k" "$TEST_IMG" | _filter_qemu_io 172*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 64k 7k" "$TEST_IMG" | _filter_qemu_io 173*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 71k 1k" "$TEST_IMG" | _filter_qemu_io 174*1ef7d010SKevin Wolf 175*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 176*1ef7d010SKevin Wolf 177*1ef7d010SKevin Wolfecho 178*1ef7d010SKevin Wolfecho == spanning two clusters, partially overwriting backing file == 179*1ef7d010SKevin Wolf 180*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 181*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 182*1ef7d010SKevin Wolf 183*1ef7d010SKevin Wolf# Backing file: -- -- XX XX | XX XX -- -- 184*1ef7d010SKevin Wolf# Active layer: -- -- XX 00 | 00 XX -- -- 185*1ef7d010SKevin Wolf 186*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 2k 4k" "$TEST_IMG.base" | _filter_qemu_io 187*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 3k 2k" "$TEST_IMG" | _filter_qemu_io 188*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 0k 2k" "$TEST_IMG" | _filter_qemu_io 189*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 2k 1k" "$TEST_IMG" | _filter_qemu_io 190*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 3k 2k" "$TEST_IMG" | _filter_qemu_io 191*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 5k 1k" "$TEST_IMG" | _filter_qemu_io 192*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 6k 2k" "$TEST_IMG" | _filter_qemu_io 193*1ef7d010SKevin Wolf 194*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 195*1ef7d010SKevin Wolf 196*1ef7d010SKevin Wolfecho 197*1ef7d010SKevin Wolfecho == spanning multiple clusters, non-zero in first cluster == 198*1ef7d010SKevin Wolf 199*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 200*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 201*1ef7d010SKevin Wolf 202*1ef7d010SKevin Wolf# Backing file: 64k: XX XX -- -- | -- -- -- -- | -- -- -- -- 203*1ef7d010SKevin Wolf# Active layer: 64k: XX XX 00 00 | 00 00 00 00 | 00 -- -- -- 204*1ef7d010SKevin Wolf 205*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 64k 2k" "$TEST_IMG.base" | _filter_qemu_io 206*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 66k 7k" "$TEST_IMG" | _filter_qemu_io 207*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 64k 2k" "$TEST_IMG" | _filter_qemu_io 208*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 66k 10k" "$TEST_IMG" | _filter_qemu_io 209*1ef7d010SKevin Wolf 210*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 211*1ef7d010SKevin Wolf 212*1ef7d010SKevin Wolfecho 213*1ef7d010SKevin Wolfecho == spanning multiple clusters, non-zero in intermediate cluster == 214*1ef7d010SKevin Wolf 215*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 216*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 217*1ef7d010SKevin Wolf 218*1ef7d010SKevin Wolf# Backing file: 64k: -- -- -- -- | -- XX XX -- | -- -- -- -- 219*1ef7d010SKevin Wolf# Active layer: 64k: -- -- 00 00 | 00 00 00 00 | 00 -- -- -- 220*1ef7d010SKevin Wolf 221*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 69k 2k" "$TEST_IMG.base" | _filter_qemu_io 222*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 66k 7k" "$TEST_IMG" | _filter_qemu_io 223*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 64k 12k" "$TEST_IMG" | _filter_qemu_io 224*1ef7d010SKevin Wolf 225*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 226*1ef7d010SKevin Wolf 227*1ef7d010SKevin Wolfecho 228*1ef7d010SKevin Wolfecho == spanning multiple clusters, non-zero in final cluster == 229*1ef7d010SKevin Wolf 230*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 231*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 232*1ef7d010SKevin Wolf 233*1ef7d010SKevin Wolf# Backing file: 64k: -- -- -- -- | -- -- -- -- | -- -- XX XX 234*1ef7d010SKevin Wolf# Active layer: 64k: -- -- 00 00 | 00 00 00 00 | 00 -- XX XX 235*1ef7d010SKevin Wolf 236*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 74k 2k" "$TEST_IMG.base" | _filter_qemu_io 237*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 66k 7k" "$TEST_IMG" | _filter_qemu_io 238*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 64k 10k" "$TEST_IMG" | _filter_qemu_io 239*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 74k 2k" "$TEST_IMG" | _filter_qemu_io 240*1ef7d010SKevin Wolf 241*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 242*1ef7d010SKevin Wolf 243*1ef7d010SKevin Wolfecho 244*1ef7d010SKevin Wolfecho == spanning multiple clusters, partially overwriting backing file == 245*1ef7d010SKevin Wolf 246*1ef7d010SKevin WolfCLUSTER_SIZE=512 TEST_IMG="$TEST_IMG.base" _make_test_img $size 247*1ef7d010SKevin Wolf_make_test_img -b "$TEST_IMG.base" 248*1ef7d010SKevin Wolf 249*1ef7d010SKevin Wolf# Backing file: 64k: -- XX XX XX | XX XX XX XX | XX XX XX -- 250*1ef7d010SKevin Wolf# Active layer: 64k: -- XX 00 00 | 00 00 00 00 | 00 XX XX -- 251*1ef7d010SKevin Wolf 252*1ef7d010SKevin Wolf$QEMU_IO -c "write -P 0x11 65k 10k" "$TEST_IMG.base" | _filter_qemu_io 253*1ef7d010SKevin Wolf$QEMU_IO -c "write -z 66k 7k" "$TEST_IMG" | _filter_qemu_io 254*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 64k 1k" "$TEST_IMG" | _filter_qemu_io 255*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 65k 1k" "$TEST_IMG" | _filter_qemu_io 256*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 66k 7k" "$TEST_IMG" | _filter_qemu_io 257*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0x11 73k 2k" "$TEST_IMG" | _filter_qemu_io 258*1ef7d010SKevin Wolf$QEMU_IO -c "read -P 0 75k 1k" "$TEST_IMG" | _filter_qemu_io 259*1ef7d010SKevin Wolf 260*1ef7d010SKevin Wolf$QEMU_IMG map --output=json "$TEST_IMG" | _filter_qemu_img_map 261*1ef7d010SKevin Wolf 262*1ef7d010SKevin Wolf# success, all done 263*1ef7d010SKevin Wolfecho "*** done" 264*1ef7d010SKevin Wolfrm -f $seq.full 265*1ef7d010SKevin Wolfstatus=0 266