[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC 10/24] block/block-copy: add state pointer to BlockCopyTask
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[RFC 10/24] block/block-copy: add state pointer to BlockCopyTask |
Date: |
Fri, 15 Nov 2019 17:14:30 +0300 |
We are going to use aio-task-pool API, so we'll need state pointer in
BlockCopyTask anyway. Add it now and use where possible.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
---
block/block-copy.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/block/block-copy.c b/block/block-copy.c
index 956b4b55e7..7652b4afc5 100644
--- a/block/block-copy.c
+++ b/block/block-copy.c
@@ -25,6 +25,7 @@
#define BLOCK_COPY_MAX_MEM (128 * MiB)
typedef struct BlockCopyTask {
+ BlockCopyState *s;
int64_t offset;
int64_t bytes;
QLIST_ENTRY(BlockCopyTask) list;
@@ -120,16 +121,18 @@ static BlockCopyTask
*block_copy_task_create(BlockCopyState *s,
bdrv_reset_dirty_bitmap(s->copy_bitmap, offset, bytes);
- task->offset = offset;
- task->bytes = bytes;
+ *task = (BlockCopyTask) {
+ .s = s,
+ .offset = offset,
+ .bytes = bytes,
+ };
qemu_co_queue_init(&task->wait_queue);
QLIST_INSERT_HEAD(&s->tasks, task, list);
return task;
}
-static void coroutine_fn block_copy_task_shrink(BlockCopyState *s,
- BlockCopyTask *task,
+static void coroutine_fn block_copy_task_shrink(BlockCopyTask *task,
int64_t new_bytes)
{
if (new_bytes == task->bytes) {
@@ -138,18 +141,17 @@ static void coroutine_fn
block_copy_task_shrink(BlockCopyState *s,
assert(new_bytes > 0 && new_bytes < task->bytes);
- bdrv_set_dirty_bitmap(s->copy_bitmap,
+ bdrv_set_dirty_bitmap(task->s->copy_bitmap,
task->offset + new_bytes, task->bytes - new_bytes);
task->bytes = new_bytes;
qemu_co_queue_restart_all(&task->wait_queue);
}
-static void coroutine_fn block_copy_task_end(BlockCopyState *s,
- BlockCopyTask *task, int ret)
+static void coroutine_fn block_copy_task_end(BlockCopyTask *task, int ret)
{
if (ret < 0) {
- bdrv_set_dirty_bitmap(s->copy_bitmap, task->offset, task->bytes);
+ bdrv_set_dirty_bitmap(task->s->copy_bitmap, task->offset, task->bytes);
}
QLIST_REMOVE(task, list);
qemu_co_queue_restart_all(&task->wait_queue);
@@ -482,9 +484,9 @@ static int coroutine_fn
block_copy_dirty_clusters(BlockCopyState *s,
task = block_copy_task_create(s, offset, cur_bytes);
ret = block_copy_block_status(s, offset, cur_bytes, &status_bytes);
- block_copy_task_shrink(s, task, status_bytes);
+ block_copy_task_shrink(task, status_bytes);
if (s->skip_unallocated && !(ret & BDRV_BLOCK_ALLOCATED)) {
- block_copy_task_end(s, task, 0);
+ block_copy_task_end(task, 0);
s->progress_reset_callback(s->progress_opaque);
trace_block_copy_skip_range(s, offset, status_bytes);
offset += status_bytes;
@@ -500,7 +502,7 @@ static int coroutine_fn
block_copy_dirty_clusters(BlockCopyState *s,
ret = block_copy_do_copy(s, offset, cur_bytes, ret & BDRV_BLOCK_ZERO,
error_is_read);
co_put_to_shres(s->mem, cur_bytes);
- block_copy_task_end(s, task, ret);
+ block_copy_task_end(task, ret);
if (ret < 0) {
return ret;
}
--
2.21.0
- [RFC 18/24] block/block-copy: add block_copy_cancel, (continued)
- [RFC 18/24] block/block-copy: add block_copy_cancel, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 23/24] python: add qemu/bench_block_job.py, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 17/24] block/block-copy: add ratelimit to block-copy, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 15/24] block/block-copy: implement block_copy_async, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 14/24] block/block-copy: More explicit call_state, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 08/24] block/block-copy: rename in-flight requests to tasks, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 02/24] block/block-copy: use block_status, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 06/24] block/block-copy: reduce intersecting request lock, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 13/24] block/block-copy: use aio-task-pool API, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 22/24] python: add simplebench.py, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 10/24] block/block-copy: add state pointer to BlockCopyTask,
Vladimir Sementsov-Ogievskiy <=
- [RFC 04/24] block/block-copy: refactor interfaces to use bytes instead of end, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 01/24] block/block-copy: specialcase first copy_range request, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 05/24] block/block-copy: rename start to offset in interfaces, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 07/24] block/block-copy: hide structure definitions, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 11/24] block/block-copy: move task size initial calculation to _task_create, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 24/24] python: benchmark new backup architecture, Vladimir Sementsov-Ogievskiy, 2019/11/15
- [RFC 21/24] backup: move to block-copy, Vladimir Sementsov-Ogievskiy, 2019/11/15
- Re: [RFC 00/24] backup performance: block_status + async, no-reply, 2019/11/15