blklogwrites.c (fcb7e040f5c69ca1f0678f991ab5354488a9e192) blklogwrites.c (c86422c5549c0983b4b4525b8f56a1c69dd67aa1)
1/*
2 * Write logging blk driver based on blkverify and blkdebug.
3 *
4 * Copyright (c) 2017 Tuomas Tynkkynen <tuomas@tuxera.com>
5 * Copyright (c) 2018 Aapo Vienamo <aapo@tuxera.com>
6 * Copyright (c) 2018 Ari Sundholm <ari@tuxera.com>
7 *
8 * This work is licensed under the terms of the GNU GPL, version 2 or later.

--- 253 unchanged lines hidden (view full) ---

262static void blk_log_writes_close(BlockDriverState *bs)
263{
264 BDRVBlkLogWritesState *s = bs->opaque;
265
266 bdrv_unref_child(bs, s->log_file);
267 s->log_file = NULL;
268}
269
1/*
2 * Write logging blk driver based on blkverify and blkdebug.
3 *
4 * Copyright (c) 2017 Tuomas Tynkkynen <tuomas@tuxera.com>
5 * Copyright (c) 2018 Aapo Vienamo <aapo@tuxera.com>
6 * Copyright (c) 2018 Ari Sundholm <ari@tuxera.com>
7 *
8 * This work is licensed under the terms of the GNU GPL, version 2 or later.

--- 253 unchanged lines hidden (view full) ---

262static void blk_log_writes_close(BlockDriverState *bs)
263{
264 BDRVBlkLogWritesState *s = bs->opaque;
265
266 bdrv_unref_child(bs, s->log_file);
267 s->log_file = NULL;
268}
269
270static int64_t blk_log_writes_getlength(BlockDriverState *bs)
270static int64_t coroutine_fn blk_log_writes_co_getlength(BlockDriverState *bs)
271{
271{
272 return bdrv_getlength(bs->file->bs);
272 return bdrv_co_getlength(bs->file->bs);
273}
274
275static void blk_log_writes_child_perm(BlockDriverState *bs, BdrvChild *c,
276 BdrvChildRole role,
277 BlockReopenQueue *ro_q,
278 uint64_t perm, uint64_t shrd,
279 uint64_t *nperm, uint64_t *nshrd)
280{

--- 212 unchanged lines hidden (view full) ---

493};
494
495static BlockDriver bdrv_blk_log_writes = {
496 .format_name = "blklogwrites",
497 .instance_size = sizeof(BDRVBlkLogWritesState),
498
499 .bdrv_open = blk_log_writes_open,
500 .bdrv_close = blk_log_writes_close,
273}
274
275static void blk_log_writes_child_perm(BlockDriverState *bs, BdrvChild *c,
276 BdrvChildRole role,
277 BlockReopenQueue *ro_q,
278 uint64_t perm, uint64_t shrd,
279 uint64_t *nperm, uint64_t *nshrd)
280{

--- 212 unchanged lines hidden (view full) ---

493};
494
495static BlockDriver bdrv_blk_log_writes = {
496 .format_name = "blklogwrites",
497 .instance_size = sizeof(BDRVBlkLogWritesState),
498
499 .bdrv_open = blk_log_writes_open,
500 .bdrv_close = blk_log_writes_close,
501 .bdrv_getlength = blk_log_writes_getlength,
501 .bdrv_co_getlength = blk_log_writes_co_getlength,
502 .bdrv_child_perm = blk_log_writes_child_perm,
503 .bdrv_refresh_limits = blk_log_writes_refresh_limits,
504
505 .bdrv_co_preadv = blk_log_writes_co_preadv,
506 .bdrv_co_pwritev = blk_log_writes_co_pwritev,
507 .bdrv_co_pwrite_zeroes = blk_log_writes_co_pwrite_zeroes,
508 .bdrv_co_flush_to_disk = blk_log_writes_co_flush_to_disk,
509 .bdrv_co_pdiscard = blk_log_writes_co_pdiscard,
510
511 .is_filter = true,
512 .strong_runtime_opts = blk_log_writes_strong_runtime_opts,
513};
514
515static void bdrv_blk_log_writes_init(void)
516{
517 bdrv_register(&bdrv_blk_log_writes);
518}
519
520block_init(bdrv_blk_log_writes_init);
502 .bdrv_child_perm = blk_log_writes_child_perm,
503 .bdrv_refresh_limits = blk_log_writes_refresh_limits,
504
505 .bdrv_co_preadv = blk_log_writes_co_preadv,
506 .bdrv_co_pwritev = blk_log_writes_co_pwritev,
507 .bdrv_co_pwrite_zeroes = blk_log_writes_co_pwrite_zeroes,
508 .bdrv_co_flush_to_disk = blk_log_writes_co_flush_to_disk,
509 .bdrv_co_pdiscard = blk_log_writes_co_pdiscard,
510
511 .is_filter = true,
512 .strong_runtime_opts = blk_log_writes_strong_runtime_opts,
513};
514
515static void bdrv_blk_log_writes_init(void)
516{
517 bdrv_register(&bdrv_blk_log_writes);
518}
519
520block_init(bdrv_blk_log_writes_init);