[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 06/36] block/backup: fix max_transfer handling for copy_range
From: |
Max Reitz |
Subject: |
[PULL 06/36] block/backup: fix max_transfer handling for copy_range |
Date: |
Thu, 10 Oct 2019 13:42:30 +0200 |
From: Vladimir Sementsov-Ogievskiy <address@hidden>
Of course, QEMU_ALIGN_UP is a typo, it should be QEMU_ALIGN_DOWN, as we
are trying to find aligned size which satisfy both source and target.
Also, don't ignore too small max_transfer. In this case seems safer to
disable copy_range.
Fixes: 9ded4a0114968e
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Message-id: address@hidden
Signed-off-by: Max Reitz <address@hidden>
---
block/backup.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/block/backup.c b/block/backup.c
index 763f0d7ff6..db20249063 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -741,12 +741,19 @@ BlockJob *backup_job_create(const char *job_id,
BlockDriverState *bs,
job->cluster_size = cluster_size;
job->copy_bitmap = copy_bitmap;
copy_bitmap = NULL;
- job->use_copy_range = !compress; /* compression isn't supported for it */
job->copy_range_size = MIN_NON_ZERO(blk_get_max_transfer(job->common.blk),
blk_get_max_transfer(job->target));
- job->copy_range_size = MAX(job->cluster_size,
- QEMU_ALIGN_UP(job->copy_range_size,
- job->cluster_size));
+ job->copy_range_size = QEMU_ALIGN_DOWN(job->copy_range_size,
+ job->cluster_size);
+ /*
+ * Set use_copy_range, consider the following:
+ * 1. Compression is not supported for copy_range.
+ * 2. copy_range does not respect max_transfer (it's a TODO), so we factor
+ * that in here. If max_transfer is smaller than the job->cluster_size,
+ * we do not use copy_range (in that case it's zero after aligning down
+ * above).
+ */
+ job->use_copy_range = !compress && job->copy_range_size > 0;
/* Required permissions are already taken with target's blk_new() */
block_job_add_bdrv(&job->common, "target", target, 0, BLK_PERM_ALL,
--
2.21.0
- [PULL 00/36] Block patches, Max Reitz, 2019/10/10
- [PULL 02/36] block: introduce aio task pool, Max Reitz, 2019/10/10
- [PULL 01/36] qemu-iotests: ignore leaks on failure paths in 026, Max Reitz, 2019/10/10
- [PULL 03/36] block/qcow2: refactor qcow2_co_preadv_part, Max Reitz, 2019/10/10
- [PULL 04/36] block/qcow2: refactor qcow2_co_pwritev_part, Max Reitz, 2019/10/10
- [PULL 05/36] block/qcow2: introduce parallel subrequest handling in read and write, Max Reitz, 2019/10/10
- [PULL 06/36] block/backup: fix max_transfer handling for copy_range,
Max Reitz <=
- [PULL 07/36] block/backup: fix backup_cow_with_offload for last cluster, Max Reitz, 2019/10/10
- [PULL 08/36] block/backup: split shareable copying part from backup_do_cow, Max Reitz, 2019/10/10
- [PULL 09/36] block/backup: improve comment about image fleecing, Max Reitz, 2019/10/10
- [PULL 11/36] block/backup: fix block-comment style, Max Reitz, 2019/10/10
- [PULL 10/36] block/backup: introduce BlockCopyState, Max Reitz, 2019/10/10
- [PULL 12/36] block: move block_copy from block/backup.c to separate file, Max Reitz, 2019/10/10
- [PULL 13/36] block: teach bdrv_debug_breakpoint skip filters with backing, Max Reitz, 2019/10/10
- [PULL 15/36] iotests: 257: drop unused Drive.device field, Max Reitz, 2019/10/10
- [PULL 17/36] qapi: group BlockDeviceStats fields, Max Reitz, 2019/10/10
- [PULL 14/36] iotests: prepare 124 and 257 bitmap querying for backup-top filter, Max Reitz, 2019/10/10