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