[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v2 09/13] block/backup: remove yield_and_check
From: |
John Snow |
Subject: |
[Qemu-block] [PATCH v2 09/13] block/backup: remove yield_and_check |
Date: |
Fri, 19 Jan 2018 15:58:43 -0500 |
This is a respin of the same functionality as mirror_throttle,
so trash this and replace it with the generic version.
yield_and_check returned true if canceled, false otherwise.
block_job_relax returns -ECANCELED if canceled, 0 otherwise.
Signed-off-by: John Snow <address@hidden>
---
block/backup.c | 20 ++++----------------
1 file changed, 4 insertions(+), 16 deletions(-)
diff --git a/block/backup.c b/block/backup.c
index b4204c0ee4..0624c3b322 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -334,29 +334,17 @@ static void backup_complete(BlockJob *job, void *opaque)
g_free(data);
}
-static bool coroutine_fn yield_and_check(BackupBlockJob *job)
+static uint64_t get_delay_ns(BackupBlockJob *job)
{
uint64_t delay_ns = 0;
- if (block_job_is_cancelled(&job->common)) {
- return true;
- }
-
- /* we need to yield so that bdrv_drain_all() returns.
- * (without, VM does not reboot)
- */
if (job->common.speed) {
delay_ns = ratelimit_calculate_delay(&job->limit,
job->bytes_read);
job->bytes_read = 0;
}
- block_job_relax(&job->common, delay_ns);
- if (block_job_is_cancelled(&job->common)) {
- return true;
- }
-
- return false;
+ return delay_ns;
}
static int coroutine_fn backup_run_incremental(BackupBlockJob *job)
@@ -369,7 +357,7 @@ static int coroutine_fn
backup_run_incremental(BackupBlockJob *job)
hbitmap_iter_init(&hbi, job->copy_bitmap, 0);
while ((cluster = hbitmap_iter_next(&hbi)) != -1) {
do {
- if (yield_and_check(job)) {
+ if (block_job_relax(&job->common, get_delay_ns(job))) {
return 0;
}
ret = backup_do_cow(job, cluster * job->cluster_size,
@@ -465,7 +453,7 @@ static void coroutine_fn backup_run(void *opaque)
bool error_is_read;
int alloced = 0;
- if (yield_and_check(job)) {
+ if (block_job_relax(&job->common, get_delay_ns(job))) {
break;
}
--
2.14.3
- [Qemu-block] [PATCH v2 00/13] blockjob: refactor mirror_throttle, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 02/13] blockjob: consolidate SLICE_TIME definition, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 01/13] blockjob: record time of last entrance, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 03/13] blockjob: create block_job_relax, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 05/13] block/commit: use block_job_relax, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 04/13] blockjob: allow block_job_throttle to take delay_ns, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 06/13] block/stream: use block_job_relax, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 07/13] block/backup: use block_job_relax, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 08/13] allow block_job_relax to return -ECANCELED, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 09/13] block/backup: remove yield_and_check,
John Snow <=
- [Qemu-block] [PATCH v2 10/13] block/mirror: condense cancellation and relax calls, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 11/13] block/mirror: remove block_job_sleep_ns calls, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 12/13] blockjob: privatize block_job_sleep_ns, John Snow, 2018/01/19
- [Qemu-block] [PATCH v2 13/13] blockjob: remove block_job_pause_point from interface, John Snow, 2018/01/19
- Re: [Qemu-block] [Qemu-devel] [PATCH v2 00/13] blockjob: refactor mirror_throttle, no-reply, 2018/01/19
- Re: [Qemu-block] [Qemu-devel] [PATCH v2 00/13] blockjob: refactor mirror_throttle, John Snow, 2018/01/30