From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 24 Oct 2019 08:06:51 +0200 Subject: [PATCH] avoid calling dump_cb with NULL data pointer for small/last cluster The last block of a backup may be smaller than cluster_size. Signed-off-by: Dietmar Maurer --- block/backup.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/block/backup.c b/block/backup.c index a3f0d2c9a5..3e99d23e98 100644 --- a/block/backup.c +++ b/block/backup.c @@ -131,7 +131,12 @@ static int coroutine_fn backup_cow_with_bounce_buffer(BackupBlockJob *job, if (buffer_is_zero(*bounce_buffer, nbytes)) { if (job->dump_cb) { - ret = job->dump_cb(job->common.job.opaque, job->target, start, nbytes, NULL); + if (nbytes == job->cluster_size) { + // Note: pass NULL to indicate that we want to write [0u8; cluster_size] + ret = job->dump_cb(job->common.job.opaque, job->target, start, nbytes, NULL); + } else { + ret = job->dump_cb(job->common.job.opaque, job->target, start, nbytes, *bounce_buffer); + } } else { ret = blk_co_pwrite_zeroes(job->target, start, nbytes, write_flags | BDRV_REQ_MAY_UNMAP);