mirror.c (3c9331c47f22224118d5019b0af8eac704824d8d) | mirror.c (67a0fd2a9bca204d2b39f910a97c7137636a0715) |
---|---|
1/* 2 * Image mirroring 3 * 4 * Copyright Red Hat, Inc. 2012 5 * 6 * Authors: 7 * Paolo Bonzini <pbonzini@redhat.com> 8 * --- 154 unchanged lines hidden (view full) --- 163{ 164 BlockDriverState *source = s->common.bs; 165 int nb_sectors, sectors_per_chunk, nb_chunks, max_iov; 166 int64_t end, sector_num, next_chunk, next_sector, hbitmap_next_sector; 167 uint64_t delay_ns = 0; 168 MirrorOp *op; 169 int pnum; 170 int64_t ret; | 1/* 2 * Image mirroring 3 * 4 * Copyright Red Hat, Inc. 2012 5 * 6 * Authors: 7 * Paolo Bonzini <pbonzini@redhat.com> 8 * --- 154 unchanged lines hidden (view full) --- 163{ 164 BlockDriverState *source = s->common.bs; 165 int nb_sectors, sectors_per_chunk, nb_chunks, max_iov; 166 int64_t end, sector_num, next_chunk, next_sector, hbitmap_next_sector; 167 uint64_t delay_ns = 0; 168 MirrorOp *op; 169 int pnum; 170 int64_t ret; |
171 BlockDriverState *file; |
|
171 172 max_iov = MIN(source->bl.max_iov, s->target->bl.max_iov); 173 174 s->sector_num = hbitmap_iter_next(&s->hbi); 175 if (s->sector_num < 0) { 176 bdrv_dirty_iter_init(s->dirty_bitmap, &s->hbi); 177 s->sector_num = hbitmap_iter_next(&s->hbi); 178 trace_mirror_restart_iter(s, bdrv_get_dirty_count(s->dirty_bitmap)); --- 122 unchanged lines hidden (view full) --- 301 bdrv_reset_dirty_bitmap(s->dirty_bitmap, sector_num, nb_sectors); 302 303 /* Copy the dirty cluster. */ 304 s->in_flight++; 305 s->sectors_in_flight += nb_sectors; 306 trace_mirror_one_iteration(s, sector_num, nb_sectors); 307 308 ret = bdrv_get_block_status_above(source, NULL, sector_num, | 172 173 max_iov = MIN(source->bl.max_iov, s->target->bl.max_iov); 174 175 s->sector_num = hbitmap_iter_next(&s->hbi); 176 if (s->sector_num < 0) { 177 bdrv_dirty_iter_init(s->dirty_bitmap, &s->hbi); 178 s->sector_num = hbitmap_iter_next(&s->hbi); 179 trace_mirror_restart_iter(s, bdrv_get_dirty_count(s->dirty_bitmap)); --- 122 unchanged lines hidden (view full) --- 302 bdrv_reset_dirty_bitmap(s->dirty_bitmap, sector_num, nb_sectors); 303 304 /* Copy the dirty cluster. */ 305 s->in_flight++; 306 s->sectors_in_flight += nb_sectors; 307 trace_mirror_one_iteration(s, sector_num, nb_sectors); 308 309 ret = bdrv_get_block_status_above(source, NULL, sector_num, |
309 nb_sectors, &pnum); | 310 nb_sectors, &pnum, &file); |
310 if (ret < 0 || pnum < nb_sectors || 311 (ret & BDRV_BLOCK_DATA && !(ret & BDRV_BLOCK_ZERO))) { 312 bdrv_aio_readv(source, sector_num, &op->qiov, nb_sectors, 313 mirror_read_complete, op); 314 } else if (ret & BDRV_BLOCK_ZERO) { 315 bdrv_aio_write_zeroes(s->target, sector_num, op->nb_sectors, 316 s->unmap ? BDRV_REQ_MAY_UNMAP : 0, 317 mirror_write_complete, op); --- 561 unchanged lines hidden --- | 311 if (ret < 0 || pnum < nb_sectors || 312 (ret & BDRV_BLOCK_DATA && !(ret & BDRV_BLOCK_ZERO))) { 313 bdrv_aio_readv(source, sector_num, &op->qiov, nb_sectors, 314 mirror_read_complete, op); 315 } else if (ret & BDRV_BLOCK_ZERO) { 316 bdrv_aio_write_zeroes(s->target, sector_num, op->nb_sectors, 317 s->unmap ? BDRV_REQ_MAY_UNMAP : 0, 318 mirror_write_complete, op); --- 561 unchanged lines hidden --- |