[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-2.10 4/4] block: Update open_flags after ->inact
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH for-2.10 4/4] block: Update open_flags after ->inactivate() callback |
Date: |
Wed, 23 Aug 2017 21:42:42 +0800 |
From: Stefan Hajnoczi <address@hidden>
In the ->inactivate() callbacks, permissions are updated, which
typically involves a recursive check of the whole graph. Setting
BDRV_O_INACTIVE right before doing that creates a state that
bdrv_is_writable() returns false, which causes permission update
failure.
Reorder them so the flag is updated after calling the function. Note
that this doesn't break the assert in bdrv_child_cb_inactivate() because
for any specific BDS, we still update its flags first before calling
->inactivate() on it one level deeper in the recursion.
Signed-off-by: Fam Zheng <address@hidden>
---
block.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index 3615a6809e..3308814bba 100644
--- a/block.c
+++ b/block.c
@@ -4085,21 +4085,20 @@ static int bdrv_inactivate_recurse(BlockDriverState *bs,
}
}
- if (setting_flag) {
+ if (setting_flag && !(bs->open_flags & BDRV_O_INACTIVE)) {
uint64_t perm, shared_perm;
- 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;
}
}
}
+ bs->open_flags |= BDRV_O_INACTIVE;
+
/* Update permissions, they may differ for inactive nodes */
bdrv_get_cumulative_perm(bs, &perm, &shared_perm);
bdrv_check_perm(bs, perm, shared_perm, NULL, &error_abort);
--
2.13.5
- [Qemu-devel] [PATCH for-2.10 3/4] block-backend: Defer shared_perm tightening migration completion, (continued)
- [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 <=
- 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