From 5c5636b0532f494a72d537cf0b78d87d71608cb9 Mon Sep 17 00:00:00 2001 From: nick Date: Tue, 23 Jul 2013 11:00:51 +0100 Subject: [PATCH] flexnbd mirror: If the final run would be longer than the file size, truncate to file size This fixes migrations of images that are not exactly divisible by 4096 --- src/mirror.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mirror.c b/src/mirror.c index ef355d4..abb4afb 100644 --- a/src/mirror.c +++ b/src/mirror.c @@ -173,6 +173,14 @@ int mirror_pass(struct server * serve, int is_last_pass, uint64_t *written) while (current < serve->size) { int run = bitset_run_count(map, current, mirror_longest_write); + if ( current + run > serve->size ) { + debug( + "Size not divisible by %i, adjusting final block", + block_allocation_resolution + ); + run -= (( current + run ) - serve->size ); + } + debug("mirror current=%ld, run=%d", current, run); /* FIXME: we could avoid sending sparse areas of the