Lines Matching refs:bs

82 static int replication_open(BlockDriverState *bs, QDict *options,  in replication_open()  argument
86 BDRVReplicationState *s = bs->opaque; in replication_open()
91 ret = bdrv_open_file_child(NULL, options, "file", bs, errp); in replication_open()
130 s->rs = replication_new(bs, &replication_ops); in replication_open()
139 static void replication_close(BlockDriverState *bs) in replication_close() argument
141 BDRVReplicationState *s = bs->opaque; in replication_close()
161 static void replication_child_perm(BlockDriverState *bs, BdrvChild *c, in replication_child_perm() argument
173 if ((bs->open_flags & (BDRV_O_INACTIVE | BDRV_O_RDWR)) == BDRV_O_RDWR) { in replication_child_perm()
183 replication_co_getlength(BlockDriverState *bs) in replication_co_getlength() argument
185 return bdrv_co_getlength(bs->file->bs); in replication_co_getlength()
225 replication_co_readv(BlockDriverState *bs, int64_t sector_num, in replication_co_readv() argument
228 BDRVReplicationState *s = bs->opaque; in replication_co_readv()
241 ret = bdrv_co_preadv(bs->file, sector_num * BDRV_SECTOR_SIZE, in replication_co_readv()
248 replication_co_writev(BlockDriverState *bs, int64_t sector_num, in replication_co_writev() argument
251 BDRVReplicationState *s = bs->opaque; in replication_co_writev()
254 BdrvChild *top = bs->file; in replication_co_writev()
279 ret = bdrv_co_is_allocated_above(top->bs, base->bs, false, in replication_co_writev()
311 secondary_do_checkpoint(BlockDriverState *bs, Error **errp) in secondary_do_checkpoint() argument
313 BDRVReplicationState *s = bs->opaque; in secondary_do_checkpoint()
331 active_disk = bs->file; in secondary_do_checkpoint()
332 if (!active_disk->bs->drv) { in secondary_do_checkpoint()
334 active_disk->bs->node_name); in secondary_do_checkpoint()
343 if (!s->hidden_disk->bs->drv) { in secondary_do_checkpoint()
345 s->hidden_disk->bs->node_name); in secondary_do_checkpoint()
360 static void reopen_backing_file(BlockDriverState *bs, bool writable, in reopen_backing_file() argument
363 BDRVReplicationState *s = bs->opaque; in reopen_backing_file()
374 hidden_disk = bs->file->bs->backing; in reopen_backing_file()
375 secondary_disk = hidden_disk->bs->backing; in reopen_backing_file()
378 s->orig_hidden_read_only = bdrv_is_read_only(hidden_disk->bs); in reopen_backing_file()
379 s->orig_secondary_read_only = bdrv_is_read_only(secondary_disk->bs); in reopen_backing_file()
385 reopen_queue = bdrv_reopen_queue(reopen_queue, hidden_disk->bs, in reopen_backing_file()
392 reopen_queue = bdrv_reopen_queue(reopen_queue, secondary_disk->bs, in reopen_backing_file()
397 AioContext *ctx = bdrv_get_aio_context(bs); in reopen_backing_file()
408 static void backup_job_cleanup(BlockDriverState *bs) in backup_job_cleanup() argument
410 BDRVReplicationState *s = bs->opaque; in backup_job_cleanup()
421 reopen_backing_file(bs, false, NULL); in backup_job_cleanup()
426 BlockDriverState *bs = opaque; in backup_job_completed() local
427 BDRVReplicationState *s = bs->opaque; in backup_job_completed()
434 backup_job_cleanup(bs); in backup_job_completed()
438 check_top_bs(BlockDriverState *top_bs, BlockDriverState *bs) in check_top_bs() argument
443 if (top_bs == bs) { in check_top_bs()
449 if (child->bs == bs || check_top_bs(child->bs, bs)) { in check_top_bs()
460 BlockDriverState *bs = rs->opaque; in replication_start() local
471 aio_context = bdrv_get_aio_context(bs); in replication_start()
473 s = bs->opaque; in replication_start()
504 active_disk = bs->file; in replication_start()
505 if (!active_disk || !active_disk->bs || !active_disk->bs->backing) { in replication_start()
512 hidden_disk = active_disk->bs->backing; in replication_start()
513 if (!hidden_disk->bs || !hidden_disk->bs->backing) { in replication_start()
520 secondary_disk = hidden_disk->bs->backing; in replication_start()
521 if (!secondary_disk->bs || !bdrv_has_blk(secondary_disk->bs)) { in replication_start()
530 active_length = bdrv_getlength(active_disk->bs); in replication_start()
531 hidden_length = bdrv_getlength(hidden_disk->bs); in replication_start()
532 disk_length = bdrv_getlength(secondary_disk->bs); in replication_start()
542 assert(active_disk->bs->drv && hidden_disk->bs->drv); in replication_start()
545 if (!active_disk->bs->drv->bdrv_make_empty || in replication_start()
546 !hidden_disk->bs->drv->bdrv_make_empty) { in replication_start()
556 reopen_backing_file(bs, true, &local_err); in replication_start()
563 bdrv_graph_wrlock(bs); in replication_start()
565 bdrv_ref(hidden_disk->bs); in replication_start()
566 s->hidden_disk = bdrv_attach_child(bs, hidden_disk->bs, "hidden disk", in replication_start()
571 bdrv_graph_wrunlock(bs); in replication_start()
576 bdrv_ref(secondary_disk->bs); in replication_start()
577 s->secondary_disk = bdrv_attach_child(bs, secondary_disk->bs, in replication_start()
582 bdrv_graph_wrunlock(bs); in replication_start()
593 !check_top_bs(top_bs, bs)) { in replication_start()
595 bdrv_graph_wrunlock(bs); in replication_start()
596 reopen_backing_file(bs, false, NULL); in replication_start()
603 bdrv_graph_wrunlock(bs); in replication_start()
606 NULL, s->secondary_disk->bs, s->hidden_disk->bs, in replication_start()
611 backup_job_completed, bs, NULL, &local_err); in replication_start()
614 backup_job_cleanup(bs); in replication_start()
628 secondary_do_checkpoint(bs, errp); in replication_start()
637 BlockDriverState *bs = rs->opaque; in replication_do_checkpoint() local
641 aio_context = bdrv_get_aio_context(bs); in replication_do_checkpoint()
643 s = bs->opaque; in replication_do_checkpoint()
657 secondary_do_checkpoint(bs, errp); in replication_do_checkpoint()
664 BlockDriverState *bs = rs->opaque; in replication_get_error() local
668 aio_context = bdrv_get_aio_context(bs); in replication_get_error()
670 s = bs->opaque; in replication_get_error()
688 BlockDriverState *bs = opaque; in replication_done() local
689 BDRVReplicationState *s = bs->opaque; in replication_done()
695 bdrv_unref_child(bs, s->secondary_disk); in replication_done()
697 bdrv_unref_child(bs, s->hidden_disk); in replication_done()
710 BlockDriverState *bs = rs->opaque; in replication_stop() local
714 aio_context = bdrv_get_aio_context(bs); in replication_stop()
716 s = bs->opaque; in replication_stop()
753 secondary_do_checkpoint(bs, errp); in replication_stop()
762 NULL, bs->file->bs, s->secondary_disk->bs, in replication_stop()
764 NULL, replication_done, bs, true, errp); in replication_stop()