[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [qemu-xen stable-4.13] block/backup: fix max_transfer handling for copy_range
commit e01ed1a1ae42e023fa8f91c9e3905f4f9c3523a0 Author: Vladimir Sementsov-Ogievskiy <vsementsov@xxxxxxxxxxxxx> AuthorDate: Fri Sep 20 17:20:42 2019 +0300 Commit: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx> CommitDate: Wed Oct 30 11:34:26 2019 -0500 block/backup: fix max_transfer handling for copy_range 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 <vsementsov@xxxxxxxxxxxxx> Message-id: 20190920142056.12778-2-vsementsov@xxxxxxxxxxxxx Signed-off-by: Max Reitz <mreitz@xxxxxxxxxx> (cherry picked from commit 981fb5810aa3f68797ee6e261db338bd78857614) Signed-off-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx> --- block/backup.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/block/backup.c b/block/backup.c index b26c22c4b8..7067d1d1ad 100644 --- a/block/backup.c +++ b/block/backup.c @@ -657,12 +657,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, -- generated by git-patchbot for /home/xen/git/qemu-xen.git#stable-4.13
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |