On 03/13/2018 02:29 PM, Vladimir Sementsov-Ogievskiy wrote: > 13.03.2018 21:22, Dr. David Alan Gilbert wrote: >> * Vladimir Sementsov-Ogievskiy (vsement...@virtuozzo.com) wrote: >>> Postcopy migration of dirty bitmaps. Only named dirty bitmaps are >>> migrated. >>> >>> If destination qemu is already containing a dirty bitmap with the >>> same name >>> as a migrated bitmap (for the same node), then, if their >>> granularities are >>> the same the migration will be done, otherwise the error will be >>> generated. >>> >>> If destination qemu doesn't contain such bitmap it will be created. >>> >>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> >>> --- > > [...] > >>> + >>> +static int dirty_bitmap_load_bits(QEMUFile *f, DirtyBitmapLoadState *s) >>> +{ >>> + uint64_t first_byte = qemu_get_be64(f) << BDRV_SECTOR_BITS; >>> + uint64_t nr_bytes = (uint64_t)qemu_get_be32(f) << BDRV_SECTOR_BITS; >>> + trace_dirty_bitmap_load_bits_enter(first_byte >> BDRV_SECTOR_BITS, >>> + nr_bytes >> BDRV_SECTOR_BITS); >>> + >>> + if (s->flags & DIRTY_BITMAP_MIG_FLAG_ZEROES) { >>> + trace_dirty_bitmap_load_bits_zeroes(); >>> + bdrv_dirty_bitmap_deserialize_zeroes(s->bitmap, first_byte, >>> nr_bytes, >>> + false); >>> + } else { >>> + size_t ret; >>> + uint8_t *buf; >>> + uint64_t buf_size = qemu_get_be64(f); >>> + uint64_t needed_size = >>> + bdrv_dirty_bitmap_serialization_size(s->bitmap, >>> + first_byte, nr_bytes); >>> + >>> + if (needed_size > buf_size || >>> + buf_size > QEMU_ALIGN_UP(needed_size, 4 + sizeof(long)) >> I think you meant '4 * sizeof(long)'; other than that, from the >> migration side I'm OK, so with that fixed, and someone from the block >> side checking the block code: >> >> >> Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com> >> > > Ohh, yes, 4 * sizeof(long). > Who will finally pull it? Should I respin, or you fix it inflight? >
I'm testing and staging it right now. David gave his blessing for me to send a Pull Request. --js