Statistics
| Branch: | Revision:

root / tests / qemu-iotests / 024 @ a8aec295

History | View | Annotate | Download (4.2 kB)

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

    
21
# creator
22
owner=kwolf@redhat.com
23

    
24
seq=`basename $0`
25
echo "QA output created by $seq"
26

    
27
here=`pwd`
28
tmp=/tmp/$$
29
status=1	# failure is the default!
30

    
31
_cleanup()
32
{
33
	_cleanup_test_img
34
	rm -f $TEST_DIR/t.$IMGFMT.base_old
35
	rm -f $TEST_DIR/t.$IMGFMT.base_new
36
}
37
trap "_cleanup; exit \$status" 0 1 2 3 15
38

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

    
44
# Currently only qcow2 and qed support rebasing
45
_supported_fmt qcow2 qed
46
_supported_proto generic
47
_supported_os Linux
48

    
49
CLUSTER_SIZE=65536
50

    
51
# Cluster allocations to be tested:
52
#
53
# Backing (old) 11  --  11  --  11  --  11  --
54
# Backing (new) 22  22  --  --  22  22  --  --
55
# COW image     33  33  33  33  --  --  --  --
56
#
57
# The pattern is written twice to have both an alloc -> non-alloc and a
58
# non-alloc -> alloc transition in the COW image.
59

    
60
echo "Creating backing file"
61
echo
62

    
63
_make_test_img 1G
64
io_pattern writev 0 $CLUSTER_SIZE $((2 * CLUSTER_SIZE)) 8 0x11
65
mv $TEST_IMG $TEST_IMG.base_old
66

    
67
echo "Creating new backing file"
68
echo
69

    
70
_make_test_img 1G
71
io_pattern writev 0 $((2 * CLUSTER_SIZE)) $((4 * CLUSTER_SIZE)) 4 0x22
72
mv $TEST_IMG $TEST_IMG.base_new
73

    
74
echo "Creating COW image"
75
echo
76

    
77
_make_test_img -b $TEST_IMG.base_old 1G
78
io_pattern writev 0 $((4 * CLUSTER_SIZE)) 0 1 0x33
79
io_pattern writev $((8 * CLUSTER_SIZE)) $((4 * CLUSTER_SIZE)) 0 1 0x33
80

    
81
echo "Read before the rebase to make sure everything is set up correctly"
82
echo
83
io_pattern readv $((0 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
84
io_pattern readv $((1 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
85
io_pattern readv $((2 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
86
io_pattern readv $((3 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
87
io_pattern readv $((4 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
88
io_pattern readv $((5 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
89
io_pattern readv $((6 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
90
io_pattern readv $((7 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
91
io_pattern readv $((8 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
92
io_pattern readv $((9 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
93
io_pattern readv $((10 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
94
io_pattern readv $((11 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
95
io_pattern readv $((12 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
96
io_pattern readv $((13 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
97
io_pattern readv $((14 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
98
io_pattern readv $((15 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
99

    
100
echo
101
echo Rebase and test again
102
echo
103
$QEMU_IMG rebase -b $TEST_IMG.base_new $TEST_IMG
104
io_pattern readv $((0 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
105
io_pattern readv $((1 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
106
io_pattern readv $((2 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
107
io_pattern readv $((3 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
108
io_pattern readv $((4 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
109
io_pattern readv $((5 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
110
io_pattern readv $((6 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
111
io_pattern readv $((7 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
112
io_pattern readv $((8 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
113
io_pattern readv $((9 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
114
io_pattern readv $((10 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
115
io_pattern readv $((11 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x33
116
io_pattern readv $((12 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
117
io_pattern readv $((13 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
118
io_pattern readv $((14 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x11
119
io_pattern readv $((15 * CLUSTER_SIZE)) $CLUSTER_SIZE 0 1 0x00
120

    
121

    
122
# success, all done
123
echo "*** done"
124
rm -f $seq.full
125
status=0