[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 05/13] block/mirror: conservative mirror_exit ref
From: |
John Snow |
Subject: |
[Qemu-devel] [PATCH v2 05/13] block/mirror: conservative mirror_exit refactor |
Date: |
Thu, 23 Aug 2018 18:22:41 -0400 |
For purposes of minimum code movement, refactor the mirror_exit
callback to use the post-finalization callbacks in a trivial way.
Signed-off-by: John Snow <address@hidden>
---
block/mirror.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/block/mirror.c b/block/mirror.c
index 837279e979..f5b504406d 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -79,6 +79,7 @@ typedef struct MirrorBlockJob {
int max_iov;
bool initial_zeroing_ongoing;
int in_active_write_counter;
+ bool prepared;
} MirrorBlockJob;
typedef struct MirrorBDSOpaque {
@@ -607,7 +608,7 @@ static void mirror_wait_for_all_io(MirrorBlockJob *s)
}
}
-static void mirror_exit(Job *job)
+static int mirror_exit_common(Job *job)
{
MirrorBlockJob *s = container_of(job, MirrorBlockJob, common.job);
BlockJob *bjob = &s->common;
@@ -619,6 +620,11 @@ static void mirror_exit(Job *job)
Error *local_err = NULL;
int ret = job->ret;
+ if (s->prepared) {
+ return ret;
+ }
+ s->prepared = true;
+
bdrv_release_dirty_bitmap(src, s->dirty_bitmap);
/* Make sure that the source BDS doesn't go away before we called
@@ -711,7 +717,17 @@ static void mirror_exit(Job *job)
bdrv_unref(mirror_top_bs);
bdrv_unref(src);
- job->ret = ret;
+ return ret;
+}
+
+static int mirror_prepare(Job *job)
+{
+ return mirror_exit_common(job);
+}
+
+static void mirror_abort(Job *job)
+{
+ mirror_exit_common(job);
}
static void mirror_throttle(MirrorBlockJob *s)
@@ -1132,7 +1148,8 @@ static const BlockJobDriver mirror_job_driver = {
.user_resume = block_job_user_resume,
.drain = block_job_drain,
.run = mirror_run,
- .exit = mirror_exit,
+ .prepare = mirror_prepare,
+ .abort = mirror_abort,
.pause = mirror_pause,
.complete = mirror_complete,
},
@@ -1149,7 +1166,8 @@ static const BlockJobDriver commit_active_job_driver = {
.user_resume = block_job_user_resume,
.drain = block_job_drain,
.run = mirror_run,
- .exit = mirror_exit,
+ .prepare = mirror_prepare,
+ .abort = mirror_abort,
.pause = mirror_pause,
.complete = mirror_complete,
},
--
2.14.4
- [Qemu-devel] [PATCH v2 01/13] block/commit: add block job creation flags, (continued)
- [Qemu-devel] [PATCH v2 01/13] block/commit: add block job creation flags, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 03/13] block/stream: add block job creation flags, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 06/13] block/commit: refactor stream to use job callbacks, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 02/13] block/mirror: add block job creation flags, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 10/13] qapi/block-commit: expose new job properties, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 05/13] block/mirror: conservative mirror_exit refactor,
John Snow <=
- [Qemu-devel] [PATCH v2 09/13] jobs: remove .exit callback, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 07/13] tests/blockjob: replace Blockjob with Job, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 04/13] block/commit: refactor commit to use job callbacks, John Snow, 2018/08/23
- [Qemu-devel] [PATCH v2 13/13] block/backup: qapi documentation fixup, John Snow, 2018/08/23