Assert that the children are writable where it's needed. While there is no test-case for the BLOCK_REPLICATION_FAILOVER_FAILED state, this at least ensures that s->secondary_disk is always writable in case replication might go into that state.
Signed-off-by: Lukas Straub <lukasstra...@web.de> --- block/replication.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/block/replication.c b/block/replication.c index b74192f795..772bb63374 100644 --- a/block/replication.c +++ b/block/replication.c @@ -261,6 +261,13 @@ static coroutine_fn int replication_co_writev(BlockDriverState *bs, int64_t n; assert(!flags); + assert(top->perm & BLK_PERM_WRITE); + if (s->mode == REPLICATION_MODE_SECONDARY && + s->stage != BLOCK_REPLICATION_NONE && + s->stage != BLOCK_REPLICATION_DONE) { + assert(base->perm & BLK_PERM_WRITE); + } + ret = replication_get_io_status(s); if (ret < 0) { goto out; @@ -318,6 +325,9 @@ static void secondary_do_checkpoint(BlockDriverState *bs, Error **errp) Error *local_err = NULL; int ret; + assert(active_disk->perm & BLK_PERM_WRITE); + assert(s->hidden_disk->perm & BLK_PERM_WRITE); + if (!s->backup_job) { error_setg(errp, "Backup job was cancelled unexpectedly"); return; -- 2.20.1
pgphHN5SdxiZP.pgp
Description: OpenPGP digital signature