xref: /openbmc/qemu/tests/qemu-iotests/039 (revision fef9c191)
1dc68afe0SStefan Hajnoczi#!/bin/bash
2dc68afe0SStefan Hajnoczi#
3dc68afe0SStefan Hajnoczi# Test qcow2 lazy refcounts
4dc68afe0SStefan Hajnoczi#
5dc68afe0SStefan Hajnoczi# Copyright (C) 2012 Red Hat, Inc.
6dc68afe0SStefan Hajnoczi# Copyright IBM, Corp. 2010
7dc68afe0SStefan Hajnoczi#
8dc68afe0SStefan Hajnoczi# Based on test 038.
9dc68afe0SStefan Hajnoczi#
10dc68afe0SStefan Hajnoczi# This program is free software; you can redistribute it and/or modify
11dc68afe0SStefan Hajnoczi# it under the terms of the GNU General Public License as published by
12dc68afe0SStefan Hajnoczi# the Free Software Foundation; either version 2 of the License, or
13dc68afe0SStefan Hajnoczi# (at your option) any later version.
14dc68afe0SStefan Hajnoczi#
15dc68afe0SStefan Hajnoczi# This program is distributed in the hope that it will be useful,
16dc68afe0SStefan Hajnoczi# but WITHOUT ANY WARRANTY; without even the implied warranty of
17dc68afe0SStefan Hajnoczi# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18dc68afe0SStefan Hajnoczi# GNU General Public License for more details.
19dc68afe0SStefan Hajnoczi#
20dc68afe0SStefan Hajnoczi# You should have received a copy of the GNU General Public License
21dc68afe0SStefan Hajnoczi# along with this program.  If not, see <http://www.gnu.org/licenses/>.
22dc68afe0SStefan Hajnoczi#
23dc68afe0SStefan Hajnoczi
24dc68afe0SStefan Hajnoczi# creator
25dc68afe0SStefan Hajnocziowner=stefanha@linux.vnet.ibm.com
26dc68afe0SStefan Hajnoczi
27dc68afe0SStefan Hajnocziseq=`basename $0`
28dc68afe0SStefan Hajnocziecho "QA output created by $seq"
29dc68afe0SStefan Hajnoczi
30dc68afe0SStefan Hajnoczihere=`pwd`
31dc68afe0SStefan Hajnoczitmp=/tmp/$$
32dc68afe0SStefan Hajnoczistatus=1	# failure is the default!
33dc68afe0SStefan Hajnoczi
34dc68afe0SStefan Hajnoczi_cleanup()
35dc68afe0SStefan Hajnoczi{
36dc68afe0SStefan Hajnoczi	_cleanup_test_img
37dc68afe0SStefan Hajnoczi}
38dc68afe0SStefan Hajnoczitrap "_cleanup; exit \$status" 0 1 2 3 15
39dc68afe0SStefan Hajnoczi
40dc68afe0SStefan Hajnoczi# get standard environment, filters and checks
41dc68afe0SStefan Hajnoczi. ./common.rc
42dc68afe0SStefan Hajnoczi. ./common.filter
43dc68afe0SStefan Hajnoczi
44dc68afe0SStefan Hajnoczi_supported_fmt qcow2
45dc68afe0SStefan Hajnoczi_supported_proto generic
46dc68afe0SStefan Hajnoczi_supported_os Linux
47166f3c7bSStefan Hajnoczi_unsupported_qemu_io_options --nocache
48dc68afe0SStefan Hajnoczi
49dc68afe0SStefan Hajnoczisize=128M
50dc68afe0SStefan Hajnoczi
51dc68afe0SStefan Hajnocziecho
52dc68afe0SStefan Hajnocziecho "== Checking that image is clean on shutdown =="
53dc68afe0SStefan Hajnoczi
54dc68afe0SStefan HajnocziIMGOPTS="compat=1.1,lazy_refcounts=on"
55dc68afe0SStefan Hajnoczi_make_test_img $size
56dc68afe0SStefan Hajnoczi
57*fef9c191SJeff Cody$QEMU_IO -c "write -P 0x5a 0 512" ""$TEST_IMG"" | _filter_qemu_io
58dc68afe0SStefan Hajnoczi
59dc68afe0SStefan Hajnoczi# The dirty bit must not be set
60*fef9c191SJeff Cody./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
61dc68afe0SStefan Hajnoczi_check_test_img
62dc68afe0SStefan Hajnoczi
63dc68afe0SStefan Hajnocziecho
64dc68afe0SStefan Hajnocziecho "== Creating a dirty image file =="
65dc68afe0SStefan Hajnoczi
66dc68afe0SStefan HajnocziIMGOPTS="compat=1.1,lazy_refcounts=on"
67dc68afe0SStefan Hajnoczi_make_test_img $size
68dc68afe0SStefan Hajnoczi
69dc68afe0SStefan Hajnocziold_ulimit=$(ulimit -c)
70dc68afe0SStefan Hajnocziulimit -c 0 # do not produce a core dump on abort(3)
71*fef9c191SJeff Cody$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
72dc68afe0SStefan Hajnocziulimit -c "$old_ulimit"
73dc68afe0SStefan Hajnoczi
74dc68afe0SStefan Hajnoczi# The dirty bit must be set
75*fef9c191SJeff Cody./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
76dc68afe0SStefan Hajnoczi_check_test_img
77dc68afe0SStefan Hajnoczi
78dc68afe0SStefan Hajnocziecho
79dc68afe0SStefan Hajnocziecho "== Read-only access must still work =="
80dc68afe0SStefan Hajnoczi
81*fef9c191SJeff Cody$QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
82dc68afe0SStefan Hajnoczi
83dc68afe0SStefan Hajnoczi# The dirty bit must be set
84*fef9c191SJeff Cody./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
85dc68afe0SStefan Hajnoczi
86dc68afe0SStefan Hajnocziecho
87dc68afe0SStefan Hajnocziecho "== Repairing the image file must succeed =="
88dc68afe0SStefan Hajnoczi
89c6bb9ad1SFederico Simoncelli_check_test_img -r all
90dc68afe0SStefan Hajnoczi
91dc68afe0SStefan Hajnoczi# The dirty bit must not be set
92*fef9c191SJeff Cody./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
93dc68afe0SStefan Hajnoczi
94dc68afe0SStefan Hajnocziecho
95dc68afe0SStefan Hajnocziecho "== Data should still be accessible after repair =="
96dc68afe0SStefan Hajnoczi
97*fef9c191SJeff Cody$QEMU_IO -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
98dc68afe0SStefan Hajnoczi
99dc68afe0SStefan Hajnocziecho
100dc68afe0SStefan Hajnocziecho "== Opening a dirty image read/write should repair it =="
101dc68afe0SStefan Hajnoczi
102dc68afe0SStefan HajnocziIMGOPTS="compat=1.1,lazy_refcounts=on"
103dc68afe0SStefan Hajnoczi_make_test_img $size
104dc68afe0SStefan Hajnoczi
105dc68afe0SStefan Hajnocziold_ulimit=$(ulimit -c)
106dc68afe0SStefan Hajnocziulimit -c 0 # do not produce a core dump on abort(3)
107*fef9c191SJeff Cody$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
108dc68afe0SStefan Hajnocziulimit -c "$old_ulimit"
109dc68afe0SStefan Hajnoczi
110dc68afe0SStefan Hajnoczi# The dirty bit must be set
111*fef9c191SJeff Cody./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
112dc68afe0SStefan Hajnoczi
113*fef9c191SJeff Cody$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
114dc68afe0SStefan Hajnoczi
115dc68afe0SStefan Hajnoczi# The dirty bit must not be set
116*fef9c191SJeff Cody./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
117dc68afe0SStefan Hajnoczi
118dc68afe0SStefan Hajnocziecho
119dc68afe0SStefan Hajnocziecho "== Creating an image file with lazy_refcounts=off =="
120dc68afe0SStefan Hajnoczi
121dc68afe0SStefan HajnocziIMGOPTS="compat=1.1,lazy_refcounts=off"
122dc68afe0SStefan Hajnoczi_make_test_img $size
123dc68afe0SStefan Hajnoczi
124dc68afe0SStefan Hajnocziold_ulimit=$(ulimit -c)
125dc68afe0SStefan Hajnocziulimit -c 0 # do not produce a core dump on abort(3)
126*fef9c191SJeff Cody$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
127dc68afe0SStefan Hajnocziulimit -c "$old_ulimit"
128dc68afe0SStefan Hajnoczi
129dc68afe0SStefan Hajnoczi# The dirty bit must not be set since lazy_refcounts=off
130*fef9c191SJeff Cody./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
131dc68afe0SStefan Hajnoczi_check_test_img
132dc68afe0SStefan Hajnoczi
133dc68afe0SStefan Hajnoczi# success, all done
134dc68afe0SStefan Hajnocziecho "*** done"
135dc68afe0SStefan Hajnoczirm -f $seq.full
136dc68afe0SStefan Hajnoczistatus=0
137dc68afe0SStefan Hajnoczi
138