Message ID | 20200221164204.105570-7-david@redhat.com |
---|---|
State | New |
Headers | show |
Series | migrate/ram: Fix resizing RAM blocks while migrating | expand |
On Fri, Feb 21, 2020 at 05:41:57PM +0100, David Hildenbrand wrote: > We want to make use of ram_block_discard_range() in the RAM block resize > callback when growing a RAM block, *before* used_length is changed. > Let's relax the check. We always have a reserved mapping for the whole > max_length, so we cannot corrupt unrelated data. > > Cc: Richard Henderson <rth@twiddle.net> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Eduardo Habkost <ehabkost@redhat.com> > Cc: Peter Xu <peterx@redhat.com> > Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com>
diff --git a/exec.c b/exec.c index 8b015821d6..8737acedab 100644 --- a/exec.c +++ b/exec.c @@ -3915,7 +3915,7 @@ int ram_block_discard_range(RAMBlock *rb, uint64_t start, size_t length) goto err; } - if ((start + length) <= rb->used_length) { + if ((start + length) <= rb->max_length) { bool need_madvise, need_fallocate; if (!QEMU_IS_ALIGNED(length, rb->page_size)) { error_report("ram_block_discard_range: Unaligned length: %zx", @@ -3982,7 +3982,7 @@ int ram_block_discard_range(RAMBlock *rb, uint64_t start, size_t length) } else { error_report("ram_block_discard_range: Overrun block '%s' (%" PRIu64 "/%zx/" RAM_ADDR_FMT")", - rb->idstr, start, length, rb->used_length); + rb->idstr, start, length, rb->max_length); } err:
We want to make use of ram_block_discard_range() in the RAM block resize callback when growing a RAM block, *before* used_length is changed. Let's relax the check. We always have a reserved mapping for the whole max_length, so we cannot corrupt unrelated data. Cc: Richard Henderson <rth@twiddle.net> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: Peter Xu <peterx@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> --- exec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)