#!/usr/bin/env bash # group: rw quick # # qcow2 v3-exclusive error path testing # (026 tests paths common to v2 and v3) # # Copyright (C) 2020 Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # seq=$(basename $0) echo "QA output created by $seq" status=1 # failure is the default! _cleanup() { _cleanup_test_img rm "$TEST_DIR/blkdebug.conf" rm -f "$TEST_IMG.data_file" } trap "_cleanup; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common.rc . ./common.filter . ./common.pattern _supported_fmt qcow2 _supported_proto file fuse # This is a v3-exclusive test; # As for data_file, error paths often very much depend on whether # there is an external data file or not; so we create one exactly when # we want to test it _unsupported_imgopts 'compat=0.10' data_file echo echo === Avoid freeing external data clusters on failure === echo cat > "$TEST_DIR/blkdebug.conf" <<EOF [inject-error] event = "write_aio" errno = "5" once = "on" EOF # Test what happens when there is an error when writing to an external # data file instead of when writing to a preallocated zero cluster _make_test_img -o "data_file=$TEST_IMG.data_file" 64k # Put blkdebug above the data-file, and a raw node on top of that so # that blkdebug will see a write_aio event and emit an error. This # will then trigger the alloc abort code, which we want to test here. $QEMU_IO -c "write 0 64k" \ "json:{ 'driver': 'qcow2', 'file': { 'driver': 'file', 'filename': '$TEST_IMG' }, 'data-file': { 'driver': 'raw', 'file': { 'driver': 'blkdebug', 'config': '$TEST_DIR/blkdebug.conf', 'image': { 'driver': 'file', 'filename': '$TEST_IMG.data_file' } } } }" \ | _filter_qemu_io _check_test_img # success, all done echo "*** done" rm -f $seq.full status=0