qemu/include
Changlong Xie a8bbee0edf Backup: export interfaces for extra serialization
Normal backup(sync='none') workflow:
step 1. NBD peformance I/O write from client to server
   qcow2_co_writev
    bdrv_co_writev
     ...
       bdrv_aligned_pwritev
        notifier_with_return_list_notify -> backup_do_cow
         bdrv_driver_pwritev // write new contents

step 2. drive-backup sync=none
   backup_do_cow
   {
    wait_for_overlapping_requests
    cow_request_begin
    for(; start < end; start++) {
            bdrv_co_readv_no_serialising //read old contents from Secondary disk
            bdrv_co_writev // write old contents to hidden-disk
    }
    cow_request_end
   }

step 3. Then roll back to "step 1" to write new contents to Secondary disk.

And for replication, we must make sure that we only read the old contents from
Secondary disk in order to keep contents consistent.

1) Replication workflow of Secondary
                                                         virtio-blk
                                                              ^
------->  1 NBD                                               |
   ||     server                                       3 replication
   ||        ^                                                ^
   ||        |           backing                 backing      |
   ||  Secondary disk 6<-------- hidden-disk 5 <-------- active-disk 4
   ||        |                         ^
   ||        '-------------------------'
   ||           drive-backup sync=none 2

Hence, we need these interfaces to implement coarse-grained serialization between
COW of Secondary disk and the read operation of replication.

Example codes about how to use them:

*#include "block/block_backup.h"

static coroutine_fn int xxx_co_readv()
{
        CowRequest req;
        BlockJob *job = secondary_disk->bs->job;

        if (job) {
              backup_wait_for_overlapping_requests(job, start, end);
              backup_cow_request_begin(&req, job, start, end);
              ret = bdrv_co_readv();
              backup_cow_request_end(&req);
              goto out;
        }
        ret = bdrv_co_readv();
out:
        return ret;
}

Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Wang WeiWei <wangww.fnst@cn.fujitsu.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1469602913-20979-4-git-send-email-xiecl.fnst@cn.fujitsu.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-09-13 11:00:56 +01:00
..
block Backup: export interfaces for extra serialization 2016-09-13 11:00:56 +01:00
crypto crypto: add support for querying parameters for block encryption 2016-07-26 17:46:37 +02:00
disas disas: Fix ATTRIBUTE_UNUSED define clash with ALSA headers 2016-07-19 16:40:39 +01:00
exec tcg: Reorg TCGOp chaining 2016-08-05 21:44:18 +05:30
fpu softfloat: Fix warn about implicit conversion from int to int8_t 2016-08-15 16:15:38 +01:00
hw vhost-vsock: add virtio sockets device 2016-09-10 00:28:08 +03:00
io Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
libdecnumber Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
migration Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
monitor monitor: fix crash when leaving qemu with spice audio 2016-08-08 14:16:11 +02:00
net net: Use correct type for bool flag 2016-07-19 20:18:27 +02:00
qapi blockjob: Update description of the 'id' field 2016-07-13 13:26:02 +02:00
qemu coroutine: Assert that no locks are held on termination 2016-09-05 19:06:48 +02:00
qom exec: Set cpu_index only if it's not been explictly set 2016-07-26 15:32:01 -03:00
standard-headers linux-headers: update 2016-09-05 15:15:16 +02:00
sysemu Block layer patches 2016-09-06 17:18:17 +01:00
ui clang: Fix warning reg. expansion to 'defined' 2016-08-09 22:57:36 +02:00
elf.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
glib-compat.h glib-compat: add g_(s)list_free_full() 2016-09-08 17:57:32 +04:00
qemu-common.h Update ancient copyright string in -version output 2016-08-11 16:24:53 +01:00
qemu-io.h qemu-io: Use BlockBackend 2015-02-16 15:07:19 +00:00
trace-tcg.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
trace.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00