qemu/block
Dietmar Maurer 98d2c6f2cd block: add basic backup support to block driver
backup_start() creates a block job that copies a point-in-time snapshot
of a block device to a target block device.

We call backup_do_cow() for each write during backup. That function
reads the original data from the block device before it gets
overwritten.  The data is then written to the target device.

Currently backup cluster size is hardcoded to 65536 bytes.

[I made a number of changes to Dietmar's original patch and folded them
in to make code review easy.  Here is the full list:

 * Drop BackupDumpFunc interface in favor of a target block device
 * Detect zero clusters with buffer_is_zero() and use bdrv_co_write_zeroes()
 * Use 0 delay instead of 1us, like other block jobs
 * Unify creation/start functions into backup_start()
 * Simplify cleanup, free bitmap in backup_run() instead of cb
 * function
 * Use HBitmap to avoid duplicating bitmap code
 * Use bdrv_getlength() instead of accessing ->total_sectors
 * directly
 * Delete the backup.h header file, it is no longer necessary
 * Move ./backup.c to block/backup.c
 * Remove #ifdefed out code
 * Coding style and whitespace cleanups
 * Use bdrv_add_before_write_notifier() instead of blockjob-specific hooks
 * Keep our own in-flight CowRequest list instead of using block.c
   tracked requests.  This means a little code duplication but is much
   simpler than trying to share the tracked requests list and use the
   backup block size.
 * Add on_source_error and on_target_error error handling.
 * Use trace events instead of DPRINTF()

-- stefanha]

Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2013-06-28 09:20:26 +02:00
..
backup.c block: add basic backup support to block driver 2013-06-28 09:20:26 +02:00
blkdebug.c blkdebug: Add BLKDBG_FLUSH_TO_OS/DISK events 2013-06-06 11:27:22 +02:00
blkverify.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
bochs.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
cloop.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
commit.c block: fix null-pointer bug on error case in block commit 2013-01-17 10:51:11 +01:00
cow.c block: Add options QDict to bdrv_file_open() prototypes 2013-03-22 17:51:31 +01:00
curl.c curl: Don't set curl options on the handle just before it's going to be deleted. 2013-06-17 17:47:59 +02:00
dmg.c block: Make find_image_format safe with NULL filename 2013-03-22 17:51:32 +01:00
gluster.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
iscsi.c iscsi: reorganize iscsi_readcapacity_sync 2013-06-18 12:43:03 +02:00
linux-aio.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
Makefile.objs block: add basic backup support to block driver 2013-06-28 09:20:26 +02:00
mirror.c block: mirror_complete(): use error_setg_file_open() 2013-06-17 11:01:14 -04:00
nbd.c nbd: strip braces from literal IPv6 address in URI 2013-06-18 11:43:00 +02:00
parallels.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
qapi.c qmp: add ImageInfo in BlockDeviceInfo used by query-block 2013-06-07 13:37:45 +02:00
qcow2-cache.c block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
qcow2-cluster.c qcow2: Batch discards 2013-06-24 10:25:17 +02:00
qcow2-refcount.c qcow2: Batch discards 2013-06-24 10:25:17 +02:00
qcow2-snapshot.c qcow2: Add refcount update reason to all callers 2013-06-24 10:25:17 +02:00
qcow2.c qcow2: Batch discards 2013-06-24 10:25:17 +02:00
qcow2.h qcow2: Batch discards 2013-06-24 10:25:17 +02:00
qcow.c qcow: allow sub-cluster compressed write to last cluster 2013-04-22 10:27:58 +02:00
qed-check.c qed: mark image clean after repair succeeds 2012-08-10 10:25:12 +02:00
qed-cluster.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-gencb.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-l2-cache.c qed: do not evict in-use L2 table cache entries 2012-03-12 15:14:06 +01:00
qed-table.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qed.c block: Add options QDict to bdrv_file_open() prototypes 2013-03-22 17:51:31 +01:00
qed.h block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
raw-aio.h block: make discard asynchronous 2013-01-15 10:03:47 +01:00
raw-posix.c raw-posix: Fix /dev/cdrom magic on OS X 2013-06-28 09:20:26 +02:00
raw-win32.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
raw.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
rbd.c rbd: Fix use after free in rbd_open() 2013-04-26 13:26:28 +02:00
sheepdog.c sheepdog: support 'qemu-img snapshot -a' 2013-06-17 17:47:58 +02:00
snapshot.c block: move snapshot code in block.c to block/snapshot.c 2013-06-04 13:56:30 +02:00
ssh.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
stream.c block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
vdi.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
vhdx.c block: add read-only support to VHDX image format. 2013-05-03 10:31:58 +02:00
vhdx.h block: initial VHDX driver support framework - supports open and probe 2013-05-03 10:31:58 +02:00
vmdk.c vmdk: refuse to open higher version than supported 2013-06-24 10:25:43 +02:00
vpc.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
vvfat.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
win32-aio.c Remove twice include of qemu-common.h 2013-05-18 16:35:11 +04:00