xref: /qemu/tests/qemu-iotests/128 (revision 1a6e597995c8c0125d1f305b583d6de083e44c73)
1*1a6e5979SStefan Hajnoczi#!/bin/bash
2*1a6e5979SStefan Hajnoczi#
3*1a6e5979SStefan Hajnoczi# Test that opening O_DIRECT succeeds when image file I/O produces EIO
4*1a6e5979SStefan Hajnoczi#
5*1a6e5979SStefan Hajnoczi# Copyright (C) 2015 Red Hat, Inc.
6*1a6e5979SStefan Hajnoczi#
7*1a6e5979SStefan Hajnoczi# This program is free software; you can redistribute it and/or modify
8*1a6e5979SStefan Hajnoczi# it under the terms of the GNU General Public License as published by
9*1a6e5979SStefan Hajnoczi# the Free Software Foundation; either version 2 of the License, or
10*1a6e5979SStefan Hajnoczi# (at your option) any later version.
11*1a6e5979SStefan Hajnoczi#
12*1a6e5979SStefan Hajnoczi# This program is distributed in the hope that it will be useful,
13*1a6e5979SStefan Hajnoczi# but WITHOUT ANY WARRANTY; without even the implied warranty of
14*1a6e5979SStefan Hajnoczi# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*1a6e5979SStefan Hajnoczi# GNU General Public License for more details.
16*1a6e5979SStefan Hajnoczi#
17*1a6e5979SStefan Hajnoczi# You should have received a copy of the GNU General Public License
18*1a6e5979SStefan Hajnoczi# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19*1a6e5979SStefan Hajnoczi#
20*1a6e5979SStefan Hajnoczi
21*1a6e5979SStefan Hajnoczi# creator
22*1a6e5979SStefan Hajnocziowner=stefanha@redhat.com
23*1a6e5979SStefan Hajnoczi
24*1a6e5979SStefan Hajnocziseq=`basename $0`
25*1a6e5979SStefan Hajnocziecho "QA output created by $seq"
26*1a6e5979SStefan Hajnoczi
27*1a6e5979SStefan Hajnoczihere=`pwd`
28*1a6e5979SStefan Hajnoczitmp=/tmp/$$
29*1a6e5979SStefan Hajnoczistatus=1	# failure is the default!
30*1a6e5979SStefan Hajnoczi
31*1a6e5979SStefan Hajnoczidevname="eiodev$$"
32*1a6e5979SStefan Hajnoczi
33*1a6e5979SStefan Hajnoczi_setup_eiodev()
34*1a6e5979SStefan Hajnoczi{
35*1a6e5979SStefan Hajnoczi	# This test should either be run as root or with passwordless sudo
36*1a6e5979SStefan Hajnoczi	for cmd in "" "sudo -n"; do
37*1a6e5979SStefan Hajnoczi		echo "0 $((1024 * 1024 * 1024 / 512)) error" | \
38*1a6e5979SStefan Hajnoczi			$cmd dmsetup create "$devname" 2>/dev/null
39*1a6e5979SStefan Hajnoczi		if [ "$?" -eq 0 ]; then
40*1a6e5979SStefan Hajnoczi			return
41*1a6e5979SStefan Hajnoczi		fi
42*1a6e5979SStefan Hajnoczi	done
43*1a6e5979SStefan Hajnoczi	_notrun "root privileges required to run dmsetup"
44*1a6e5979SStefan Hajnoczi}
45*1a6e5979SStefan Hajnoczi
46*1a6e5979SStefan Hajnoczi_cleanup_eiodev()
47*1a6e5979SStefan Hajnoczi{
48*1a6e5979SStefan Hajnoczi	for cmd in "" "sudo -n"; do
49*1a6e5979SStefan Hajnoczi		$cmd dmsetup remove "$devname" 2>/dev/null
50*1a6e5979SStefan Hajnoczi		if [ "$?" -eq 0 ]; then
51*1a6e5979SStefan Hajnoczi			return
52*1a6e5979SStefan Hajnoczi		fi
53*1a6e5979SStefan Hajnoczi	done
54*1a6e5979SStefan Hajnoczi}
55*1a6e5979SStefan Hajnoczi
56*1a6e5979SStefan Hajnoczi_cleanup()
57*1a6e5979SStefan Hajnoczi{
58*1a6e5979SStefan Hajnoczi	_cleanup_eiodev
59*1a6e5979SStefan Hajnoczi}
60*1a6e5979SStefan Hajnoczitrap "_cleanup; exit \$status" 0 1 2 3 15
61*1a6e5979SStefan Hajnoczi
62*1a6e5979SStefan Hajnoczi# get standard environment, filters and checks
63*1a6e5979SStefan Hajnoczi. ./common.rc
64*1a6e5979SStefan Hajnoczi. ./common.filter
65*1a6e5979SStefan Hajnoczi
66*1a6e5979SStefan Hajnoczi_supported_fmt raw
67*1a6e5979SStefan Hajnoczi_supported_proto file
68*1a6e5979SStefan Hajnoczi_supported_os Linux
69*1a6e5979SStefan Hajnoczi
70*1a6e5979SStefan Hajnoczi_setup_eiodev
71*1a6e5979SStefan Hajnoczi
72*1a6e5979SStefan HajnocziTEST_IMG="/dev/mapper/$devname"
73*1a6e5979SStefan Hajnoczi
74*1a6e5979SStefan Hajnocziecho
75*1a6e5979SStefan Hajnocziecho "== reading from error device =="
76*1a6e5979SStefan Hajnoczi# Opening image should succeed but the read operation should fail
77*1a6e5979SStefan Hajnoczi$QEMU_IO --format "$IMGFMT" --nocache -c "read 0 65536" "$TEST_IMG" | _filter_qemu_io
78*1a6e5979SStefan Hajnoczi
79*1a6e5979SStefan Hajnoczi# success, all done
80*1a6e5979SStefan Hajnocziecho "*** done"
81*1a6e5979SStefan Hajnoczirm -f $seq.full
82*1a6e5979SStefan Hajnoczistatus=0
83