diff options
author | Vladimir Sementsov-Ogievskiy | 2021-01-16 22:46:47 +0100 |
---|---|---|
committer | Max Reitz | 2021-01-26 14:36:37 +0100 |
commit | 2e099a9d29b2f8791ceaa4a54479e613f45180bd (patch) | |
tree | 28a2c79b770d784c679f2d73124f73148d1e5df6 | |
parent | block/block-copy: add max_chunk and max_workers parameters (diff) | |
download | qemu-2e099a9d29b2f8791ceaa4a54479e613f45180bd.tar.gz qemu-2e099a9d29b2f8791ceaa4a54479e613f45180bd.tar.xz qemu-2e099a9d29b2f8791ceaa4a54479e613f45180bd.zip |
block/block-copy: add list of all call-states
It simplifies debugging.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20210116214705.822267-6-vsementsov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
-rw-r--r-- | block/block-copy.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/block/block-copy.c b/block/block-copy.c index 35213bd832..6bf1735b93 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -42,6 +42,9 @@ typedef struct BlockCopyCallState { /* Coroutine where async block-copy is running */ Coroutine *co; + /* To reference all call states from BlockCopyState */ + QLIST_ENTRY(BlockCopyCallState) list; + /* State */ int ret; bool finished; @@ -81,7 +84,8 @@ typedef struct BlockCopyState { bool use_copy_range; int64_t copy_size; uint64_t len; - QLIST_HEAD(, BlockCopyTask) tasks; + QLIST_HEAD(, BlockCopyTask) tasks; /* All tasks from all block-copy calls */ + QLIST_HEAD(, BlockCopyCallState) calls; BdrvRequestFlags write_flags; @@ -282,6 +286,7 @@ BlockCopyState *block_copy_state_new(BdrvChild *source, BdrvChild *target, } QLIST_INIT(&s->tasks); + QLIST_INIT(&s->calls); return s; } @@ -669,6 +674,8 @@ static int coroutine_fn block_copy_common(BlockCopyCallState *call_state) { int ret; + QLIST_INSERT_HEAD(&call_state->s->calls, call_state, list); + do { ret = block_copy_dirty_clusters(call_state); @@ -694,6 +701,8 @@ static int coroutine_fn block_copy_common(BlockCopyCallState *call_state) call_state->cb(call_state->cb_opaque); } + QLIST_REMOVE(call_state, list); + return ret; } |