[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 3/6] block: Drop permissions when migration complete
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH 3/6] block: Drop permissions when migration completes |
Date: |
Thu, 4 May 2017 18:52:38 +0200 |
With image locking, permissions affect other qemu processes as well. We
want to be sure that the destination can run, so let's drop permissions
on the source when migration completes.
Signed-off-by: Kevin Wolf <address@hidden>
---
block.c | 12 +++++++++++-
block/block-backend.c | 25 +++++++++++++++++++++++++
include/block/block_int.h | 7 ++++---
3 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index 3e7f124..c3e7ebd 100644
--- a/block.c
+++ b/block.c
@@ -4028,7 +4028,7 @@ void bdrv_invalidate_cache_all(Error **errp)
static int bdrv_inactivate_recurse(BlockDriverState *bs,
bool setting_flag)
{
- BdrvChild *child;
+ BdrvChild *child, *parent;
int ret;
if (!setting_flag && bs->drv->bdrv_inactivate) {
@@ -4047,6 +4047,16 @@ static int bdrv_inactivate_recurse(BlockDriverState *bs,
if (setting_flag) {
bs->open_flags |= BDRV_O_INACTIVE;
+
+ QLIST_FOREACH(parent, &bs->parents, next_parent) {
+ if (parent->role->inactivate) {
+ ret = parent->role->inactivate(parent);
+ if (ret < 0) {
+ bs->open_flags &= ~BDRV_O_INACTIVE;
+ return ret;
+ }
+ }
+ }
}
return 0;
}
diff --git a/block/block-backend.c b/block/block-backend.c
index a7ce72b..f3a6008 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -156,6 +156,30 @@ static void blk_root_activate(BdrvChild *child, Error
**errp)
}
}
+static int blk_root_inactivate(BdrvChild *child)
+{
+ BlockBackend *blk = child->opaque;
+
+ if (blk->disable_perm) {
+ return 0;
+ }
+
+ /* Only inactivate BlockBackends for guest devices (which are inactive at
+ * this point because the VM is stopped) and unattached monitor-owned
+ * BlockBackends. If there is still any other user like a block job, then
+ * we simply can't inactivate the image. */
+ if (!blk->dev && !blk->name[0]) {
+ return -EPERM;
+ }
+
+ blk->disable_perm = true;
+ if (blk->root) {
+ bdrv_child_try_set_perm(blk->root, 0, BLK_PERM_ALL, &error_abort);
+ }
+
+ return 0;
+}
+
static const BdrvChildRole child_root = {
.inherit_options = blk_root_inherit_options,
@@ -168,6 +192,7 @@ static const BdrvChildRole child_root = {
.drained_end = blk_root_drained_end,
.activate = blk_root_activate,
+ .inactivate = blk_root_inactivate,
};
/*
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 5637925..5750a44 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -473,10 +473,11 @@ struct BdrvChildRole {
void (*drained_begin)(BdrvChild *child);
void (*drained_end)(BdrvChild *child);
- /* Notifies the parent that the child has been activated (e.g. when
- * migration is completing) and it can start requesting permissions and
- * doing I/O on it. */
+ /* Notifies the parent that the child has been activated/inactivated (e.g.
+ * when migration is completing) and it can start/stop requesting
+ * permissions and doing I/O on it. */
void (*activate)(BdrvChild *child, Error **errp);
+ int (*inactivate)(BdrvChild *child);
void (*attach)(BdrvChild *child);
void (*detach)(BdrvChild *child);
--
1.8.3.1
- [Qemu-block] [PATCH 0/6] block: Fix op blockers for inactive images, Kevin Wolf, 2017/05/04
- [Qemu-block] [PATCH 1/6] migration: Unify block node activation error handling, Kevin Wolf, 2017/05/04
- [Qemu-block] [PATCH 2/6] block: New BdrvChildRole.activate() for blk_resume_after_migration(), Kevin Wolf, 2017/05/04
- [Qemu-block] [PATCH 3/6] block: Drop permissions when migration completes,
Kevin Wolf <=
- [Qemu-block] [PATCH 4/6] block: Inactivate parents before children, Kevin Wolf, 2017/05/04
- [Qemu-block] [PATCH 5/6] block: Fix write/resize permissions for inactive images, Kevin Wolf, 2017/05/04
- [Qemu-block] [PATCH 6/6] file-posix: Remove .bdrv_inactivate/invalidate_cache, Kevin Wolf, 2017/05/04
- Re: [Qemu-block] [PATCH 0/6] block: Fix op blockers for inactive images, Kevin Wolf, 2017/05/09