mirror.c (880953493386a69416d2e1cdc063c670585a03ac) | mirror.c (9a5a1c621ed72161abcf461d46c7b7b7f97938bf) |
---|---|
1/* 2 * Image mirroring 3 * 4 * Copyright Red Hat, Inc. 2012 5 * 6 * Authors: 7 * Paolo Bonzini <pbonzini@redhat.com> 8 * --- 1429 unchanged lines hidden (view full) --- 1438} 1439 1440static int coroutine_fn bdrv_mirror_top_preadv(BlockDriverState *bs, 1441 int64_t offset, int64_t bytes, QEMUIOVector *qiov, BdrvRequestFlags flags) 1442{ 1443 return bdrv_co_preadv(bs->backing, offset, bytes, qiov, flags); 1444} 1445 | 1/* 2 * Image mirroring 3 * 4 * Copyright Red Hat, Inc. 2012 5 * 6 * Authors: 7 * Paolo Bonzini <pbonzini@redhat.com> 8 * --- 1429 unchanged lines hidden (view full) --- 1438} 1439 1440static int coroutine_fn bdrv_mirror_top_preadv(BlockDriverState *bs, 1441 int64_t offset, int64_t bytes, QEMUIOVector *qiov, BdrvRequestFlags flags) 1442{ 1443 return bdrv_co_preadv(bs->backing, offset, bytes, qiov, flags); 1444} 1445 |
1446static int coroutine_fn bdrv_mirror_top_do_write(BlockDriverState *bs, 1447 MirrorMethod method, uint64_t offset, uint64_t bytes, QEMUIOVector *qiov, 1448 int flags) | 1446static int coroutine_fn GRAPH_RDLOCK 1447bdrv_mirror_top_do_write(BlockDriverState *bs, MirrorMethod method, 1448 uint64_t offset, uint64_t bytes, QEMUIOVector *qiov, 1449 int flags) |
1449{ 1450 MirrorOp *op = NULL; 1451 MirrorBDSOpaque *s = bs->opaque; 1452 int ret = 0; 1453 bool copy_to_target = false; 1454 1455 if (s->job) { 1456 copy_to_target = s->job->ret >= 0 && --- 41 unchanged lines hidden (view full) --- 1498 int64_t offset, int64_t bytes, QEMUIOVector *qiov, BdrvRequestFlags flags) 1499{ 1500 MirrorBDSOpaque *s = bs->opaque; 1501 QEMUIOVector bounce_qiov; 1502 void *bounce_buf; 1503 int ret = 0; 1504 bool copy_to_target = false; 1505 | 1450{ 1451 MirrorOp *op = NULL; 1452 MirrorBDSOpaque *s = bs->opaque; 1453 int ret = 0; 1454 bool copy_to_target = false; 1455 1456 if (s->job) { 1457 copy_to_target = s->job->ret >= 0 && --- 41 unchanged lines hidden (view full) --- 1499 int64_t offset, int64_t bytes, QEMUIOVector *qiov, BdrvRequestFlags flags) 1500{ 1501 MirrorBDSOpaque *s = bs->opaque; 1502 QEMUIOVector bounce_qiov; 1503 void *bounce_buf; 1504 int ret = 0; 1505 bool copy_to_target = false; 1506 |
1507 assume_graph_lock(); /* FIXME */ 1508 |
|
1506 if (s->job) { 1507 copy_to_target = s->job->ret >= 0 && 1508 !job_is_cancelled(&s->job->common.job) && 1509 s->job->copy_mode == MIRROR_COPY_MODE_WRITE_BLOCKING; 1510 } 1511 1512 if (copy_to_target) { 1513 /* The guest might concurrently modify the data to write; but --- 28 unchanged lines hidden (view full) --- 1542 return 0; 1543 } 1544 return bdrv_co_flush(bs->backing->bs); 1545} 1546 1547static int coroutine_fn bdrv_mirror_top_pwrite_zeroes(BlockDriverState *bs, 1548 int64_t offset, int64_t bytes, BdrvRequestFlags flags) 1549{ | 1509 if (s->job) { 1510 copy_to_target = s->job->ret >= 0 && 1511 !job_is_cancelled(&s->job->common.job) && 1512 s->job->copy_mode == MIRROR_COPY_MODE_WRITE_BLOCKING; 1513 } 1514 1515 if (copy_to_target) { 1516 /* The guest might concurrently modify the data to write; but --- 28 unchanged lines hidden (view full) --- 1545 return 0; 1546 } 1547 return bdrv_co_flush(bs->backing->bs); 1548} 1549 1550static int coroutine_fn bdrv_mirror_top_pwrite_zeroes(BlockDriverState *bs, 1551 int64_t offset, int64_t bytes, BdrvRequestFlags flags) 1552{ |
1553 assume_graph_lock(); /* FIXME */ |
|
1550 return bdrv_mirror_top_do_write(bs, MIRROR_METHOD_ZERO, offset, bytes, NULL, 1551 flags); 1552} 1553 | 1554 return bdrv_mirror_top_do_write(bs, MIRROR_METHOD_ZERO, offset, bytes, NULL, 1555 flags); 1556} 1557 |
1554static int coroutine_fn bdrv_mirror_top_pdiscard(BlockDriverState *bs, 1555 int64_t offset, int64_t bytes) | 1558static int coroutine_fn GRAPH_RDLOCK 1559bdrv_mirror_top_pdiscard(BlockDriverState *bs, int64_t offset, int64_t bytes) |
1556{ 1557 return bdrv_mirror_top_do_write(bs, MIRROR_METHOD_DISCARD, offset, bytes, 1558 NULL, 0); 1559} 1560 1561static void bdrv_mirror_top_refresh_filename(BlockDriverState *bs) 1562{ 1563 if (bs->backing == NULL) { --- 407 unchanged lines hidden --- | 1560{ 1561 return bdrv_mirror_top_do_write(bs, MIRROR_METHOD_DISCARD, offset, bytes, 1562 NULL, 0); 1563} 1564 1565static void bdrv_mirror_top_refresh_filename(BlockDriverState *bs) 1566{ 1567 if (bs->backing == NULL) { --- 407 unchanged lines hidden --- |