Re: [PATCH v2 3/6] block/block-copy: add state pointer to BlockCopyTask

2020-04-28 Thread Max Reitz
On 25.03.20 14:46, Vladimir Sementsov-Ogievskiy wrote:
> 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 
> ---
>  block/block-copy.c | 30 --
>  1 file changed, 16 insertions(+), 14 deletions(-)

Reviewed-by: Max Reitz 



signature.asc
Description: OpenPGP digital signature


[PATCH v2 3/6] block/block-copy: add state pointer to BlockCopyTask

2020-03-25 Thread Vladimir Sementsov-Ogievskiy
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 
---
 block/block-copy.c | 30 --
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/block/block-copy.c b/block/block-copy.c
index 0d9ba0..63d8468b27 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;
@@ -116,8 +117,11 @@ static BlockCopyTask 
*block_copy_task_create(BlockCopyState *s,
 bdrv_reset_dirty_bitmap(s->copy_bitmap, offset, bytes);
 s->in_flight_bytes += bytes;
 
-task->offset = offset;
-task->bytes = bytes;
+*task = (BlockCopyTask) {
+.s = s,
+.offset = offset,
+.bytes = bytes,
+};
 qemu_co_queue_init(>wait_queue);
 QLIST_INSERT_HEAD(>tasks, task, list);
 
@@ -131,8 +135,7 @@ static BlockCopyTask *block_copy_task_create(BlockCopyState 
*s,
  * wake up all tasks waiting for us (may be some of them are not intersecting
  * with shrunk 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) {
@@ -141,21 +144,20 @@ static void coroutine_fn 
block_copy_task_shrink(BlockCopyState *s,
 
 assert(new_bytes > 0 && new_bytes < task->bytes);
 
-s->in_flight_bytes -= task->bytes - new_bytes;
-bdrv_set_dirty_bitmap(s->copy_bitmap,
+task->s->in_flight_bytes -= task->bytes - new_bytes;
+bdrv_set_dirty_bitmap(task->s->copy_bitmap,
   task->offset + new_bytes, task->bytes - new_bytes);
-s->in_flight_bytes -= task->bytes - new_bytes;
+task->s->in_flight_bytes -= task->bytes - new_bytes;
 
 task->bytes = new_bytes;
 qemu_co_queue_restart_all(>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)
 {
-s->in_flight_bytes -= task->bytes;
+task->s->in_flight_bytes -= task->bytes;
 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(>wait_queue);
@@ -503,9 +505,9 @@ static int coroutine_fn 
block_copy_dirty_clusters(BlockCopyState *s,
 ret = block_copy_block_status(s, offset, cur_bytes, _bytes);
 assert(ret >= 0); /* never fail */
 cur_bytes = MIN(cur_bytes, status_bytes);
-block_copy_task_shrink(s, task, cur_bytes);
+block_copy_task_shrink(task, cur_bytes);
 if (s->skip_unallocated && !(ret & BDRV_BLOCK_ALLOCATED)) {
-block_copy_task_end(s, task, 0);
+block_copy_task_end(task, 0);
 progress_set_remaining(s->progress,
bdrv_get_dirty_count(s->copy_bitmap) +
s->in_flight_bytes);
@@ -521,7 +523,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