Message ID | 20250130171240.286878-10-kwolf@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | block: Managing inactive nodes (QSD migration) | expand |
On Thu, Jan 30, 2025 at 06:12:40PM +0100, Kevin Wolf wrote: > Device models have a relatively complex way to set up their block > backends, in which blk_attach_dev() sets blk->disable_perm = true. > We want to support inactive images in exports, too, so that > qemu-storage-daemon can be used with migration. Because they don't use > blk_attach_dev(), they need another way to set this flag. The most > convenient is to do this automatically when an inactive node is attached > to a BlockBackend that can be inactivated. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > block/block-backend.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git a/block/block-backend.c b/block/block-backend.c index cc6f58ae78..9288f7e1c6 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -900,14 +900,24 @@ void blk_remove_bs(BlockBackend *blk) int blk_insert_bs(BlockBackend *blk, BlockDriverState *bs, Error **errp) { ThrottleGroupMember *tgm = &blk->public.throttle_group_member; + uint64_t perm, shared_perm; GLOBAL_STATE_CODE(); bdrv_ref(bs); bdrv_graph_wrlock(); + + if ((bs->open_flags & BDRV_O_INACTIVE) && blk_can_inactivate(blk)) { + blk->disable_perm = true; + perm = 0; + shared_perm = BLK_PERM_ALL; + } else { + perm = blk->perm; + shared_perm = blk->shared_perm; + } + blk->root = bdrv_root_attach_child(bs, "root", &child_root, BDRV_CHILD_FILTERED | BDRV_CHILD_PRIMARY, - blk->perm, blk->shared_perm, - blk, errp); + perm, shared_perm, blk, errp); bdrv_graph_wrunlock(); if (blk->root == NULL) { return -EPERM;
Device models have a relatively complex way to set up their block backends, in which blk_attach_dev() sets blk->disable_perm = true. We want to support inactive images in exports, too, so that qemu-storage-daemon can be used with migration. Because they don't use blk_attach_dev(), they need another way to set this flag. The most convenient is to do this automatically when an inactive node is attached to a BlockBackend that can be inactivated. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- block/block-backend.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)