[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 07/21] backup: refactor: merge top/full/incremental
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[Qemu-block] [PATCH 07/21] backup: refactor: merge top/full/incremental backup code |
Date: |
Fri, 23 Dec 2016 17:28:50 +0300 |
Merge top/full/incremental modes backup into one backup_loop.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
block/backup.c | 41 +++++++++--------------------------------
1 file changed, 9 insertions(+), 32 deletions(-)
diff --git a/block/backup.c b/block/backup.c
index e2b944a..2afd1b6 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -474,7 +474,7 @@ static void backup_skip_loop(BackupBlockJob *job,
BlockDriverState *base)
}
}
-static int coroutine_fn backup_run_incremental(BackupBlockJob *job)
+static int coroutine_fn backup_loop(BackupBlockJob *job)
{
int ret;
bool error_is_read;
@@ -538,14 +538,12 @@ static void coroutine_fn backup_run(void *opaque)
BackupBlockJob *job = opaque;
BackupCompleteData *data;
BlockDriverState *bs = blk_bs(job->common.blk);
- int64_t start, end;
- int64_t sectors_per_cluster = cluster_size_sectors(job);
+ int64_t end;
int ret = 0;
QLIST_INIT(&job->inflight_reqs);
qemu_co_rwlock_init(&job->flush_rwlock);
- start = 0;
end = DIV_ROUND_UP(job->common.len, job->cluster_size);
job->copy_bitmap = hbitmap_alloc(end, 0);
@@ -560,37 +558,16 @@ static void coroutine_fn backup_run(void *opaque)
* notify callback service CoW requests. */
block_job_yield(&job->common);
}
- } else if (job->sync_mode == MIRROR_SYNC_MODE_INCREMENTAL) {
- backup_incremental_init_copy_bitmap(job);
- ret = backup_run_incremental(job);
} else {
- hbitmap_set(job->copy_bitmap, 0, end);
- if (job->sync_mode == MIRROR_SYNC_MODE_TOP) {
- backup_skip_loop(job, backing_bs(blk_bs(job->common.blk)));
- }
-
- /* Both FULL and TOP SYNC_MODE's require copying.. */
- for (; start < end; start++) {
- bool error_is_read;
- if (yield_and_check(job)) {
- break;
- }
-
- /* FULL sync mode we copy the whole drive. */
- ret = backup_do_cow(job, start * sectors_per_cluster,
- sectors_per_cluster, &error_is_read, false);
- if (ret < 0) {
- /* Depending on error action, fail now or retry cluster */
- BlockErrorAction action =
- backup_error_action(job, error_is_read, -ret);
- if (action == BLOCK_ERROR_ACTION_REPORT) {
- break;
- } else {
- start--;
- continue;
- }
+ if (job->sync_mode == MIRROR_SYNC_MODE_INCREMENTAL) {
+ backup_incremental_init_copy_bitmap(job);
+ } else {
+ hbitmap_set(job->copy_bitmap, 0, end);
+ if (job->sync_mode == MIRROR_SYNC_MODE_TOP) {
+ backup_skip_loop(job, backing_bs(blk_bs(job->common.blk)));
}
}
+ ret = backup_loop(job);
}
notifier_with_return_remove(&job->before_write);
--
1.8.3.1
- [Qemu-block] [PATCH 01/21] backup: move from done_bitmap to copy_bitmap, (continued)
- [Qemu-block] [PATCH 01/21] backup: move from done_bitmap to copy_bitmap, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 05/21] hbitmap: improve dirty iter, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 18/21] backup: new async architecture, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 15/21] bitmap: add bitmap_count_between() function, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 17/21] backup: make all reads not serializing, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 16/21] hbitmap: add hbitmap_count_between() function, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 04/21] backup: use copy_bitmap in incremental backup, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 03/21] backup: improve non-dirty bits progress processing, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 06/21] backup: rewrite top mode cluster skipping, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 02/21] backup: init copy_bitmap from sync_bitmap for incremental, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 07/21] backup: refactor: merge top/full/incremental backup code,
Vladimir Sementsov-Ogievskiy <=
- [Qemu-block] [PATCH 14/21] block: add trace point on bdrv_close_all, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 12/21] iotests: add supported_cache_modes to main function, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 10/21] backup: refactor backup_copy_cluster(), Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 09/21] backup: separate copy function, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 08/21] backup: skip unallocated clusters for full mode, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 13/21] coroutine: add qemu_coroutine_add_next, Vladimir Sementsov-Ogievskiy, 2016/12/23
- [Qemu-block] [PATCH 11/21] backup: move r/w error handling code to r/w functions, Vladimir Sementsov-Ogievskiy, 2016/12/23