On Wed, Jul 27, 2016 at 03:01:44PM +0800, Changlong Xie wrote: > 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.f...@cn.fujitsu.com> > Signed-off-by: Wen Congyang <we...@cn.fujitsu.com> > Signed-off-by: Wang WeiWei <wangww.f...@cn.fujitsu.com> > --- > block/backup.c | 41 ++++++++++++++++++++++++++++++++++------- > include/block/block_backup.h | 14 ++++++++++++++ > 2 files changed, 48 insertions(+), 7 deletions(-)
Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com>
signature.asc
Description: PGP signature