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 ---