Statistics
| Branch: | Revision:

root / tests / qemu-iotests / 039 @ f897e393

History | View | Annotate | Download (3.4 kB)

1
#!/bin/bash
2
#
3
# Test qcow2 lazy refcounts
4
#
5
# Copyright (C) 2012 Red Hat, Inc.
6
# Copyright IBM, Corp. 2010
7
#
8
# Based on test 038.
9
#
10
# This program is free software; you can redistribute it and/or modify
11
# it under the terms of the GNU General Public License as published by
12
# the Free Software Foundation; either version 2 of the License, or
13
# (at your option) any later version.
14
#
15
# This program is distributed in the hope that it will be useful,
16
# but WITHOUT ANY WARRANTY; without even the implied warranty of
17
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
# GNU General Public License for more details.
19
#
20
# You should have received a copy of the GNU General Public License
21
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
#
23

    
24
# creator
25
owner=stefanha@linux.vnet.ibm.com
26

    
27
seq=`basename $0`
28
echo "QA output created by $seq"
29

    
30
here=`pwd`
31
tmp=/tmp/$$
32
status=1	# failure is the default!
33

    
34
_cleanup()
35
{
36
	_cleanup_test_img
37
}
38
trap "_cleanup; exit \$status" 0 1 2 3 15
39

    
40
# get standard environment, filters and checks
41
. ./common.rc
42
. ./common.filter
43

    
44
_supported_fmt qcow2
45
_supported_proto generic
46
_supported_os Linux
47
_unsupported_qemu_io_options --nocache
48

    
49
size=128M
50

    
51
echo
52
echo "== Checking that image is clean on shutdown =="
53

    
54
IMGOPTS="compat=1.1,lazy_refcounts=on"
55
_make_test_img $size
56

    
57
$QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
58

    
59
# The dirty bit must not be set
60
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
61
_check_test_img
62

    
63
echo
64
echo "== Creating a dirty image file =="
65

    
66
IMGOPTS="compat=1.1,lazy_refcounts=on"
67
_make_test_img $size
68

    
69
old_ulimit=$(ulimit -c)
70
ulimit -c 0 # do not produce a core dump on abort(3)
71
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
72
ulimit -c "$old_ulimit"
73

    
74
# The dirty bit must be set
75
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
76
_check_test_img
77

    
78
echo
79
echo "== Read-only access must still work =="
80

    
81
$QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
82

    
83
# The dirty bit must be set
84
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
85

    
86
echo
87
echo "== Repairing the image file must succeed =="
88

    
89
_check_test_img -r all
90

    
91
# The dirty bit must not be set
92
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
93

    
94
echo
95
echo "== Data should still be accessible after repair =="
96

    
97
$QEMU_IO -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
98

    
99
echo
100
echo "== Opening a dirty image read/write should repair it =="
101

    
102
IMGOPTS="compat=1.1,lazy_refcounts=on"
103
_make_test_img $size
104

    
105
old_ulimit=$(ulimit -c)
106
ulimit -c 0 # do not produce a core dump on abort(3)
107
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
108
ulimit -c "$old_ulimit"
109

    
110
# The dirty bit must be set
111
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
112

    
113
$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
114

    
115
# The dirty bit must not be set
116
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
117

    
118
echo
119
echo "== Creating an image file with lazy_refcounts=off =="
120

    
121
IMGOPTS="compat=1.1,lazy_refcounts=off"
122
_make_test_img $size
123

    
124
old_ulimit=$(ulimit -c)
125
ulimit -c 0 # do not produce a core dump on abort(3)
126
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
127
ulimit -c "$old_ulimit"
128

    
129
# The dirty bit must not be set since lazy_refcounts=off
130
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
131
_check_test_img
132

    
133
# success, all done
134
echo "*** done"
135
rm -f $seq.full
136
status=0
137