#!/bin/bash # # Test that opening O_DIRECT succeeds when image file I/O produces EIO # # Copyright (C) 2015 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 . # # creator owner=stefanha@redhat.com seq=`basename $0` echo "QA output created by $seq" here=`pwd` status=1 # failure is the default! devname="eiodev$$" sudo="" _sudo_qemu_io_wrapper() { (exec $sudo "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@") } _setup_eiodev() { # This test should either be run as root or with passwordless sudo for cmd in "" "sudo -n"; do echo "0 $((1024 * 1024 * 1024 / 512)) error" | \ $cmd dmsetup create "$devname" 2>/dev/null if [ "$?" -eq 0 ]; then sudo="$cmd" return fi done _notrun "root privileges required to run dmsetup" } _cleanup_eiodev() { for cmd in "" "sudo -n"; do $cmd dmsetup remove "$devname" 2>/dev/null if [ "$?" -eq 0 ]; then return fi done } _cleanup() { _cleanup_eiodev } trap "_cleanup; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common.rc . ./common.filter _supported_fmt raw _supported_proto file _supported_os Linux _setup_eiodev TEST_IMG="/dev/mapper/$devname" echo echo "== reading from error device ==" # Opening image should succeed but the read operation should fail _sudo_qemu_io_wrapper --format "$IMGFMT" --nocache \ -c "read 0 65536" "$TEST_IMG" \ | _filter_qemu_io # success, all done echo "*** done" rm -f $seq.full status=0