From 37a9051cc7d30672216af5f6620af1da122f66b3 Mon Sep 17 00:00:00 2001 From: Changlong Xie Date: Tue, 14 Mar 2017 19:46:52 +0800 Subject: [PATCH] replication: clarify permissions Even if hidden_disk, secondary_disk are backing files, they all need write permissions in replication scenario. Otherwise we will encouter below exceptions on secondary side during adding nbd server: {'execute': 'nbd-server-add', 'arguments': {'device': 'colo-disk', 'writable': true } } {"error": {"class": "GenericError", "desc": "Conflicts with use by hidden-qcow2-driver as 'backing', which does not allow 'write' on sec-qcow2-driver-for-nbd"}} CC: Zhang Hailiang CC: Zhang Chen CC: Wen Congyang Signed-off-by: Changlong Xie Signed-off-by: Kevin Wolf --- block/replication.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/block/replication.c b/block/replication.c index 22f170fd33..bf3c395eb4 100644 --- a/block/replication.c +++ b/block/replication.c @@ -155,6 +155,18 @@ static void replication_close(BlockDriverState *bs) replication_remove(s->rs); } +static void replication_child_perm(BlockDriverState *bs, BdrvChild *c, + const BdrvChildRole *role, + uint64_t perm, uint64_t shared, + uint64_t *nperm, uint64_t *nshared) +{ + *nperm = *nshared = BLK_PERM_CONSISTENT_READ \ + | BLK_PERM_WRITE \ + | BLK_PERM_WRITE_UNCHANGED; + + return; +} + static int64_t replication_getlength(BlockDriverState *bs) { return bdrv_getlength(bs->file->bs); @@ -660,7 +672,7 @@ BlockDriver bdrv_replication = { .bdrv_open = replication_open, .bdrv_close = replication_close, - .bdrv_child_perm = bdrv_filter_default_perms, + .bdrv_child_perm = replication_child_perm, .bdrv_getlength = replication_getlength, .bdrv_co_readv = replication_co_readv,