[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-2.10 2/4] block-backend: Allow more "can inactiv
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH for-2.10 2/4] block-backend: Allow more "can inactivate" cases |
Date: |
Wed, 23 Aug 2017 21:42:40 +0800 |
These two conditions corresponds to mirror job's source and target,
which need to be allowed as they are part of the non-shared storage
migration workflow: failing to inactivate either will result in a
failure during migration completion.
Signed-off-by: Fam Zheng <address@hidden>
---
block/block-backend.c | 21 ++++++++++++++++-----
include/sysemu/block-backend.h | 1 +
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index a3984d2bec..48f5356657 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -70,6 +70,7 @@ struct BlockBackend {
int quiesce_counter;
VMChangeStateEntry *vmsh;
+ bool force_allow_inactivate;
};
typedef struct BlockBackendAIOCB {
@@ -192,17 +193,27 @@ static void blk_root_activate(BdrvChild *child, Error
**errp)
}
}
+void blk_set_force_allow_inactivate(BlockBackend *blk)
+{
+ blk->force_allow_inactivate = true;
+}
+
static bool blk_can_inactivate(BlockBackend *blk)
{
- /* 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 it is a guest device, inactivate is ok. */
if (blk->dev || blk_name(blk)[0]) {
return true;
}
- return false;
+ /* Inactivating means no more write to the image can be done, even if it's
+ * guest invisible change. For block job BBs that satisfy this, we can just
+ * allow it. This is the case for mirror job source, which is required by
+ * libvirt non-shared block migration. */
+ if (!(blk->perm & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED))) {
+ return true;
+ }
+
+ return blk->force_allow_inactivate;
}
static int blk_root_inactivate(BdrvChild *child)
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 4a3730596b..aadc733daf 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -241,5 +241,6 @@ void blk_set_io_limits(BlockBackend *blk, ThrottleConfig
*cfg);
void blk_io_limits_disable(BlockBackend *blk);
void blk_io_limits_enable(BlockBackend *blk, const char *group);
void blk_io_limits_update_group(BlockBackend *blk, const char *group);
+void blk_set_force_allow_inactivate(BlockBackend *blk);
#endif
--
2.13.5
- [Qemu-devel] [PATCH for-2.10 1/4] stubs: Add vm state change handler stubs, (continued)
- [Qemu-devel] [PATCH for-2.10 1/4] stubs: Add vm state change handler stubs, Fam Zheng, 2017/08/15
- [Qemu-devel] [PATCH for-2.10 2/4] nbd: Fix order of bdrv_set_perm and bdrv_invalidate_cache, Fam Zheng, 2017/08/15
- [Qemu-devel] [PATCH for-2.10 4/4] iotests: Add non-shared storage migration case 192, Fam Zheng, 2017/08/15
- [Qemu-devel] [PATCH for-2.10 3/4] block-backend: Defer shared_perm tightening migration completion, Fam Zheng, 2017/08/15
- [Qemu-devel] [PATCH for-2.10 0/4] block: Fix non-shared storage migration, Fam Zheng, 2017/08/23
- [Qemu-devel] [PATCH for-2.10 3/4] mirror: Mark target BB as "force allow inactivate", Fam Zheng, 2017/08/23
- [Qemu-devel] [PATCH for-2.10 4/4] block: Update open_flags after ->inactivate() callback, Fam Zheng, 2017/08/23
- Re: [Qemu-devel] [PATCH for-2.10 0/4] block: Fix non-shared storage migration, Stefan Hajnoczi, 2017/08/23
- Re: [Qemu-devel] [PATCH for-2.10 0/4] block: Fix non-shared storage migration, Dr. David Alan Gilbert, 2017/08/23
- Re: [Qemu-devel] [PATCH for-2.10 0/4] block: Fix non-shared storage migration, Eric Blake, 2017/08/23