Go to file
aliguori e976c6a1e4 Change order of metadata update to prevent loosing guest data because of unexpected exit (Gleb Natapov)
Currently the order is this (during cow since it's the interesting case):
1. Decrement refcount of old clusters
2. Increment refcount for newly allocated clusters
3. Copy content of old sectors that will not be rewritten
4. Update L2 table with pointers to new clusters
5. Write guest data into new clusters (asynchronously)

There are several problems with this order. The first one is that if qemu
crashes (or killed or host reboots) after new clusters are linked into L2
table but before user data is written there, then on the next reboot guest
will find neither old data nor new one in those sectors and this is not
what gust expects even when journaling file system is in use.  The other
problem is that if qemu is killed between steps 1 and 4 then refcount
of old cluster will be incorrect and may cause snapshot corruption.

The patch change the order to be like this:
1. Increment refcount for newly allocated clusters
2. Write guest data into new clusters (asynchronously)
3. Copy content of old sectors that were not rewritten
4. Update L2 table with pointers to new clusters
5. Decrement refcount of old clusters

Unexpected crash may cause cluster leakage, but guest data should be safe.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5861 c046a42c-6fe2-441c-8c8c-71466251a162
2008-12-02 20:14:05 +00:00
audio Attached patch fixes a series of this warning 2008-11-16 13:53:32 +00:00
bsd-user Prepare for handling different BSD mmap() flags 2008-11-29 14:05:16 +00:00
darwin-user Make target_sigaltstack_used static 2008-10-05 11:09:37 +00:00
fpu Add native softfloat fpu functions (Christoph Egger) 2008-11-22 20:17:37 +00:00
gdb-xml Add GDB XML register description support. 2008-10-11 17:55:29 +00:00
hw Remove address masking after some rearranging 2008-12-02 17:51:19 +00:00
keymaps fixing keymap for Windows keys (Stefano Stabellini) 2008-09-22 19:45:36 +00:00
linux-user linux-user: Add support for STOP/CONT signals. 2008-11-27 15:47:15 +00:00
pc-bios Update OpenBIOS images to SVN r237. 2008-09-18 19:41:28 +00:00
slirp Fix inline use warnings from sparse 2008-10-26 15:26:09 +00:00
target-alpha Common cpu_loop_exit prototype 2008-11-30 16:23:09 +00:00
target-arm Common cpu_loop_exit prototype 2008-11-30 16:23:09 +00:00
target-cris Common cpu_loop_exit prototype 2008-11-30 16:23:09 +00:00
target-i386 Fix register name typo in dumping debug registers (Jan Kiszka) 2008-12-02 19:40:26 +00:00
target-m68k Allocate cleared memory for cpu state. 2008-12-01 14:29:13 +00:00
target-mips Common cpu_loop_exit prototype 2008-11-30 16:23:09 +00:00
target-ppc target-ppc: remove unused file op_mem_access.h 2008-11-30 17:54:28 +00:00
target-sh4 Common cpu_loop_exit prototype 2008-11-30 16:23:09 +00:00
target-sparc Common cpu_loop_exit prototype 2008-11-30 16:23:09 +00:00
tcg arm: Don't potentially overwrite input registers in add2, sub2. 2008-12-01 11:57:21 +00:00
tests Implement SSE4.1, SSE4.2 (x86). 2008-10-04 03:27:44 +00:00
.gitignore Add gitignore file 2008-09-09 17:15:28 +00:00
a.out.h
aes.c Fix miscellaneous minor things, by Andre Przywara. 2007-12-17 03:15:52 +00:00
aes.h
aio.c Make sure to initialize fd_sets in aio.c 2008-10-12 21:19:57 +00:00
alpha-dis.c find -type f | xargs sed -i 's/[\t ]$//g' # on most files 2007-09-16 21:08:06 +00:00
alpha.ld
arm-dis.c Update ARM disassembler. 2007-11-10 17:38:00 +00:00
arm-semi.c Add missing return in arm-semi, by Laurent Desnogues. 2008-07-01 16:40:04 +00:00
arm.ld Link ARM prologue closer to code segment to avoid a build failure 2008-07-10 17:21:31 +00:00
block_int.h Use an option rom instead of boot sector for -kernel 2008-11-08 16:27:07 +00:00
block-bochs.c Split block API from vl.h. 2007-11-11 02:51:17 +00:00
block-cloop.c Split block API from vl.h. 2007-11-11 02:51:17 +00:00
block-cow.c Split block API from vl.h. 2007-11-11 02:51:17 +00:00
block-dmg.c Add qemu_realloc(), by Gerd Hoffmann. 2008-08-06 08:37:17 +00:00
block-nbd.c Remove unnecessary #includes from block-nbd.c 2008-08-19 19:10:38 +00:00
block-parallels.c Split block API from vl.h. 2007-11-11 02:51:17 +00:00
block-qcow2.c Change order of metadata update to prevent loosing guest data because of unexpected exit (Gleb Natapov) 2008-12-02 20:14:05 +00:00
block-qcow.c Remove dead-code (else-block) from block-qcow.c, by Marc Bevand. 2008-06-05 22:00:45 +00:00
block-raw-posix.c block: make raw aio signaling non-blocking (Gerd Hoffman) 2008-11-13 19:23:17 +00:00
block-raw-win32.c Expand cache= option and use write-through caching by default 2008-10-14 14:42:54 +00:00
block-vmdk.c fix off-by-one generating vmdk backing files (Avi Kivity) 2008-10-28 14:08:49 +00:00
block-vpc.c Fix char* signedness, by Andre Przywara. 2007-12-16 03:16:05 +00:00
block-vvfat.c Use qemu_isfoobar and qemu_towombat versions, based on patch by Christoph Egger 2008-11-22 20:04:24 +00:00
block.c Abstract out geometry detection code from IDE for reuse 2008-11-25 21:50:24 +00:00
block.h Abstract out geometry detection code from IDE for reuse 2008-11-25 21:50:24 +00:00
bswap.h e1000: fix unaligned access 2008-03-28 22:30:48 +00:00
bt-host.c Win32: Fix warnings 2008-11-06 09:38:51 +00:00
bt-vhci.c Disable bluetooth proxy compilation on win32. 2008-09-30 23:31:35 +00:00
buffered_file.c Introduce a buffered file wrapper for QEMUFile 2008-10-13 03:10:22 +00:00
buffered_file.h Introduce a buffered file wrapper for QEMUFile 2008-10-13 03:10:22 +00:00
Changelog Update 2008-06-08 01:55:07 +00:00
check_ops.sh Fixes for s/390 host support, by Bastian Blank. 2007-11-18 21:22:10 +00:00
cocoa.m Let the USB tablet reach the far bottom and right pixels 2008-03-10 19:34:27 +00:00
configure Handle SDL log just like other temporary files 2008-11-29 22:04:31 +00:00
console.c Introduce accessors for DisplayState (Stefano Stabellini) 2008-11-24 19:29:13 +00:00
console.h Introduce accessors for DisplayState (Stefano Stabellini) 2008-11-24 19:29:13 +00:00
COPYING COPYING: update from FSF 2008-10-12 17:54:42 +00:00
COPYING.LIB
cpu-all.h Change MMIO callbacks to use offsets, not absolute addresses. 2008-12-01 18:59:50 +00:00
cpu-defs.h Fix comment typo. 2008-11-29 13:33:23 +00:00
cpu-exec.c Use sys-queue.h for break/watchpoint managment (Jan Kiszka) 2008-11-25 22:13:57 +00:00
cris-dis.c Teach the CRIS disassembler to stay within the provided buffer. 2008-05-06 08:45:10 +00:00
curses_keys.h Control + i and [tab] share keycode in curses, simulate [tab]. 2008-10-28 00:11:06 +00:00
curses.c Reintroduce TEXT_CONSOLE_FIXED_SIZE and TEXT_CONSOLE for resizable vc's. 2008-09-24 03:32:33 +00:00
cutils.c Attached patch fixes a series of this warning 2008-11-16 13:53:32 +00:00
d3des.c Ansify to please sparse 2008-10-27 19:49:12 +00:00
d3des.h
def-helper.h TCG variable type checking. 2008-11-17 14:43:54 +00:00
dis-asm.h Fix OpenBSD linker warnings 2008-08-21 17:58:08 +00:00
disas.c Update old fashioned function prototypes. 2008-10-22 15:55:18 +00:00
disas.h * Use function pointers for symbol lookup (currently for elf32 and elf64, 2008-10-22 15:11:31 +00:00
dyngen-exec.h Preliminary OpenBSD host support (based on OpenBSD patches by Todd T. Fries) 2008-08-15 18:33:42 +00:00
dyngen.c Fix some warnings that would be generated by gcc -Wmissing-prototypes 2008-08-17 20:26:25 +00:00
elf_ops.h Use load address when loading ELF images. 2008-10-22 18:20:20 +00:00
elf.h Fix most warnings that would be caused by gcc flag -Wundef 2008-09-06 17:47:39 +00:00
exec-all.h Use libgcc __clear_cache to clean icache, when available. 2008-12-01 02:02:37 +00:00
exec.c Cosmetic cleanups to previous patch. 2008-12-02 09:02:15 +00:00
feature_to_c.sh Fix undeclared symbol warnings from sparse 2008-10-26 13:43:07 +00:00
gdbstub.c gdbstub: Fix access to PPC FPRs 2008-11-30 16:23:18 +00:00
gdbstub.h gdbstub: manage CPUs as threads (Jan Kiszka) 2008-11-18 20:30:24 +00:00
gen-icount.h TCG variable type checking. 2008-11-17 14:43:54 +00:00
host-utils.c Code used by the linux-user targets should not use vl.h. 2007-11-05 13:01:41 +00:00
host-utils.h Include <strings.h> for ffs(). 2008-11-12 17:18:41 +00:00
hostregs_helper.h
hpet.h Add a local copy of hpet.h. 2007-09-16 20:03:23 +00:00
hppa-dis.c HPPA (PA-RISC) host support 2008-04-12 20:14:54 +00:00
hppa.ld HPPA (PA-RISC) host support 2008-04-12 20:14:54 +00:00
i386-dis.c Make some i386 disassembler tables const 2008-10-02 18:29:22 +00:00
i386.ld Add TLS sections. 2008-05-31 16:21:33 +00:00
ia64.ld
keymaps.c Make keysym tables const 2008-10-02 18:26:42 +00:00
kqemu.c Fix error reporting under Win32 (CreateFile does not set errno) 2008-06-08 01:55:09 +00:00
kqemu.h kqemu API change - allow use of kqemu with 32 bit QEMU on a 64 bit host 2008-05-30 20:48:25 +00:00
kvm-all.c kvm: Introduce kvm logging interface (Glauber Costa) 2008-11-24 19:36:26 +00:00
kvm.h kvm: Introduce kvm logging interface (Glauber Costa) 2008-11-24 19:36:26 +00:00
LICENSE use the TCG code generator 2008-02-01 10:50:11 +00:00
loader.c uImage: only try to load 'kernel' images (Hollis Blanchard) 2008-11-20 22:15:46 +00:00
m68k-dis.c Spelling and grammar fixes 2008-11-30 16:25:37 +00:00
m68k-semi.c Break up vl.h. 2007-11-17 17:14:51 +00:00
m68k.ld
MAINTAINERS Update maintainers list. 2008-08-25 22:26:03 +00:00
Makefile Make installing bios files optional. 2008-11-27 15:45:16 +00:00
Makefile.target Preliminary AIX support 2008-11-18 01:42:22 +00:00
migration-exec.c Fix brown-paper-bag bugs from live-migration patch (Charles Duffy) 2008-11-12 22:29:11 +00:00
migration-tcp.c Fix brown-paper-bag bugs from live-migration patch (Charles Duffy) 2008-11-12 22:29:11 +00:00
migration.c Reintroduce migrate-to-exec: support (Charles Duffy) 2008-11-11 16:46:33 +00:00
migration.h Reintroduce migrate-to-exec: support (Charles Duffy) 2008-11-11 16:46:33 +00:00
mips-dis.c Fix most warnings that would be caused by gcc flag -Wundef 2008-09-06 17:47:39 +00:00
mips.ld
mipsel.ld
monitor.c Attached patch fixes a series of this warning 2008-11-16 13:53:32 +00:00
nbd.c Use qemu_isfoobar and qemu_towombat versions, based on patch by Christoph Egger 2008-11-22 20:04:24 +00:00
nbd.h qemu-nbd: remove useless parameter from nbd_negotiate() (Laurent Vivier) 2008-09-10 15:23:19 +00:00
net-checksum.c Add IP checksumming functions to qemu (Gerd Hoffmann) 2008-07-29 19:40:04 +00:00
net.c Use qemu_isfoobar and qemu_towombat versions, based on patch by Christoph Egger 2008-11-22 20:04:24 +00:00
net.h Move network redirection code out of vl.c and into net.c 2008-10-31 19:10:00 +00:00
osdep.c Use MAP_ANON also for FreeBSD (Juergen Lock) 2008-11-22 20:43:01 +00:00
osdep.h Fix a typo preventing GNUC builtins usage. 2008-12-01 01:53:55 +00:00
ppc64.ld Correct version of Heikki Lindholms ppc64.ld script 2008-08-20 22:39:24 +00:00
ppc-dis.c find -type f | xargs sed -i 's/[\t ]$//g' # on most files 2007-09-16 21:08:06 +00:00
ppc.ld
qemu_socket.h sockets: helper functions for qemu (Gerd Hoffman) 2008-11-11 20:46:40 +00:00
qemu-aio.h Refactor AIO to allow multiple AIO implementations 2008-09-22 19:17:18 +00:00
qemu-binfmt-conf.sh Code provision for n32/n64 mips userland emulation. Not functional yet. 2007-09-30 01:58:33 +00:00
qemu-char.c Fix warning from sparse 2008-11-30 16:25:05 +00:00
qemu-char.h Move some declarations around in the QEMU CharDriver code 2008-10-31 18:44:40 +00:00
qemu-common.h Attached patch fixes a series of this warning 2008-11-16 13:53:32 +00:00
qemu-doc.texi Spelling and grammar fixes 2008-11-30 16:25:37 +00:00
qemu-img.c qemu-img: open files with cache=writeback 2008-11-30 19:12:49 +00:00
qemu-img.texi New qemu-img convert -B option, by Marc Bevand. 2008-06-05 21:53:49 +00:00
qemu-lock.h AIX's assembler does not support local labels, use relative addressing instead 2008-11-18 01:42:17 +00:00
qemu-log.h Fix some warnings that would be generated by gcc -Wredundant-decls 2008-08-30 09:51:20 +00:00
qemu-malloc.c Add qemu_strndup: qemu_strdup with length limit. 2008-11-09 00:28:40 +00:00
qemu-nbd.c Fix undeclared symbol warnings from sparse 2008-10-26 13:43:07 +00:00
qemu-nbd.texi Fix formatting of documentation (Stefan Weil) 2008-09-22 20:41:57 +00:00
qemu-sockets.c Use qemu_isfoobar and qemu_towombat versions, based on patch by Christoph Egger 2008-11-22 20:04:24 +00:00
qemu-tech.texi Update (thanks to Edgar, Thiemo, malc, Paul, Laurent and Andrzej) 2008-10-09 18:52:04 +00:00
qemu-timer.h Break up vl.h. 2007-11-17 17:14:51 +00:00
qemu-tool.c Fix warning from sparse (wrong declaration) 2008-11-30 16:25:17 +00:00
readline.c Attached patch fixes a series of this warning 2008-11-16 13:53:32 +00:00
README
s390-dis.c Revert licensing to "GPLv2 or later", by Ulrich Hecht. 2008-01-17 13:56:59 +00:00
s390.ld
savevm.c Split savevm code into savevm.c 2008-11-11 21:33:36 +00:00
sdl_keysym.h Make keysym tables const 2008-10-02 18:26:42 +00:00
sdl.c add DisplayState->idle (Samuel Thibault) 2008-08-21 20:08:55 +00:00
sh4-dis.c Fix warnings that would be caused by gcc flag -Wwrite-strings 2008-09-14 06:45:34 +00:00
softmmu_defs.h Fix some warnings that would be generated by gcc -Wredundant-decls 2008-08-30 09:51:20 +00:00
softmmu_exec.h Fix some warnings that would be generated by gcc -Wredundant-decls 2008-08-30 09:51:20 +00:00
softmmu_header.h Fix some warnings that would be generated by gcc -Wredundant-decls 2008-08-30 09:51:20 +00:00
softmmu_template.h Set mem_io_vaddr on io_read (Jan Kiszka) 2008-11-18 20:09:43 +00:00
softmmu-semi.h Suppress gcc 4.x -Wpointer-sign (included in -Wall) warnings 2008-09-20 08:07:15 +00:00
sparc64.ld Map code buffers below 2G on Sparc64 2008-07-26 15:05:57 +00:00
sparc-dis.c Update from binutils 2.17 2008-10-26 19:13:20 +00:00
sparc.ld More detabification 2007-10-06 11:28:21 +00:00
sys-queue.h Add TAILQ_FOREACH_SAFE (Jan Kiszka) 2008-11-25 22:05:37 +00:00
sysemu.h uImage: rename load_uboot() to load_uimage() (Hollis Blanchard) 2008-11-20 22:14:40 +00:00
tap-win32.c Win32: Fix warnings 2008-11-06 09:38:51 +00:00
texi2pod.pl Update texi2pod.pl. 2008-02-04 14:47:49 +00:00
thunk.c Make bitmask tables static const 2008-10-05 10:51:10 +00:00
thunk.h Make bitmask tables static const 2008-10-05 10:51:10 +00:00
TODO update 2008-05-13 18:26:52 +00:00
translate-all.c Small cleanup of gen_intermediate_code(_internal), by Laurent Desnogues. 2008-07-18 18:01:29 +00:00
uboot_image.h
usb-bsd.c Native BSD host USB support (Juergen Lock, Lonnie Mendez) 2008-11-22 21:03:55 +00:00
usb-linux.c Native BSD host USB support (Juergen Lock, Lonnie Mendez) 2008-11-22 21:03:55 +00:00
usb-stub.c Fix usb-stub compilation 2008-11-25 16:49:33 +00:00
VERSION version change 2008-01-06 17:10:54 +00:00
vgafont.h Some little fixes on QEMU 2008-09-06 16:31:30 +00:00
vl.c Revert r5636 to fix icount on hosts w/o high-res clocks 2008-11-25 17:26:09 +00:00
vnc_keysym.h Make keysym tables const 2008-10-02 18:26:42 +00:00
vnc.c Exclude unix: from vnc call to unix_listen() (Ryan Harper) 2008-12-02 20:02:14 +00:00
vnchextile.h Introduce accessors for DisplayState (Stefano Stabellini) 2008-11-24 19:29:13 +00:00
x86_64.ld
x_keymap.c Add statics and missing #includes for prototypes. 2007-11-18 01:44:38 +00:00

Read the documentation in qemu-doc.html.

Fabrice Bellard.