Message ID | 20241218091413.140396-3-yuan1.liu@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | bugfixes for migration using compression methods | expand |
On Wed, Dec 18, 2024 at 05:14:12PM +0800, Yuan Liu wrote: > When QPL compression is enabled on the migration channel and the same > dirty page changes from a normal page to a zero page in the iterative > memory copy, the dirty page will not be updated to a zero page again > on the target side, resulting in incorrect memory data on the source > and target sides. > > The root cause is that the target side does not record the normal pages > to the receivedmap. > > The solution is to add ramblock_recv_bitmap_set_offset in target side > to record the normal pages. > > Signed-off-by: Yuan Liu <yuan1.liu@intel.com> > Reviewed-by: Jason Zeng <jason.zeng@intel.com> Reviewed-by: Peter Xu <peterx@redhat.com>
diff --git a/migration/multifd-qpl.c b/migration/multifd-qpl.c index bbe466617f..88e2344af2 100644 --- a/migration/multifd-qpl.c +++ b/migration/multifd-qpl.c @@ -679,6 +679,7 @@ static int multifd_qpl_recv(MultiFDRecvParams *p, Error **errp) qpl->zlen[i] = be32_to_cpu(qpl->zlen[i]); assert(qpl->zlen[i] <= multifd_ram_page_size()); zbuf_len += qpl->zlen[i]; + ramblock_recv_bitmap_set_offset(p->block, p->normal[i]); } /* read compressed pages */