|
@@ -87,7 +87,7 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,
|
|
static bool bdrv_recurse_has_child(BlockDriverState *bs,
|
|
static bool bdrv_recurse_has_child(BlockDriverState *bs,
|
|
BlockDriverState *child);
|
|
BlockDriverState *child);
|
|
|
|
|
|
-static void bdrv_replace_child_noperm(BdrvChild *child,
|
|
|
|
|
|
+static void bdrv_replace_child_noperm(BdrvChild **child,
|
|
BlockDriverState *new_bs);
|
|
BlockDriverState *new_bs);
|
|
static void bdrv_remove_file_or_backing_child(BlockDriverState *bs,
|
|
static void bdrv_remove_file_or_backing_child(BlockDriverState *bs,
|
|
BdrvChild *child,
|
|
BdrvChild *child,
|
|
@@ -2270,7 +2270,7 @@ static void bdrv_replace_child_abort(void *opaque)
|
|
BlockDriverState *new_bs = s->child->bs;
|
|
BlockDriverState *new_bs = s->child->bs;
|
|
|
|
|
|
/* old_bs reference is transparently moved from @s to @s->child */
|
|
/* old_bs reference is transparently moved from @s to @s->child */
|
|
- bdrv_replace_child_noperm(s->child, s->old_bs);
|
|
|
|
|
|
+ bdrv_replace_child_noperm(&s->child, s->old_bs);
|
|
bdrv_unref(new_bs);
|
|
bdrv_unref(new_bs);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2300,7 +2300,7 @@ static void bdrv_replace_child_tran(BdrvChild *child, BlockDriverState *new_bs,
|
|
if (new_bs) {
|
|
if (new_bs) {
|
|
bdrv_ref(new_bs);
|
|
bdrv_ref(new_bs);
|
|
}
|
|
}
|
|
- bdrv_replace_child_noperm(child, new_bs);
|
|
|
|
|
|
+ bdrv_replace_child_noperm(&child, new_bs);
|
|
/* old_bs reference is transparently moved from @child to @s */
|
|
/* old_bs reference is transparently moved from @child to @s */
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2672,9 +2672,10 @@ uint64_t bdrv_qapi_perm_to_blk_perm(BlockPermission qapi_perm)
|
|
return permissions[qapi_perm];
|
|
return permissions[qapi_perm];
|
|
}
|
|
}
|
|
|
|
|
|
-static void bdrv_replace_child_noperm(BdrvChild *child,
|
|
|
|
|
|
+static void bdrv_replace_child_noperm(BdrvChild **childp,
|
|
BlockDriverState *new_bs)
|
|
BlockDriverState *new_bs)
|
|
{
|
|
{
|
|
|
|
+ BdrvChild *child = *childp;
|
|
BlockDriverState *old_bs = child->bs;
|
|
BlockDriverState *old_bs = child->bs;
|
|
int new_bs_quiesce_counter;
|
|
int new_bs_quiesce_counter;
|
|
int drain_saldo;
|
|
int drain_saldo;
|
|
@@ -2767,7 +2768,7 @@ static void bdrv_attach_child_common_abort(void *opaque)
|
|
BdrvChild *child = *s->child;
|
|
BdrvChild *child = *s->child;
|
|
BlockDriverState *bs = child->bs;
|
|
BlockDriverState *bs = child->bs;
|
|
|
|
|
|
- bdrv_replace_child_noperm(child, NULL);
|
|
|
|
|
|
+ bdrv_replace_child_noperm(s->child, NULL);
|
|
|
|
|
|
if (bdrv_get_aio_context(bs) != s->old_child_ctx) {
|
|
if (bdrv_get_aio_context(bs) != s->old_child_ctx) {
|
|
bdrv_try_set_aio_context(bs, s->old_child_ctx, &error_abort);
|
|
bdrv_try_set_aio_context(bs, s->old_child_ctx, &error_abort);
|
|
@@ -2867,7 +2868,7 @@ static int bdrv_attach_child_common(BlockDriverState *child_bs,
|
|
}
|
|
}
|
|
|
|
|
|
bdrv_ref(child_bs);
|
|
bdrv_ref(child_bs);
|
|
- bdrv_replace_child_noperm(new_child, child_bs);
|
|
|
|
|
|
+ bdrv_replace_child_noperm(&new_child, child_bs);
|
|
|
|
|
|
*child = new_child;
|
|
*child = new_child;
|
|
|
|
|
|
@@ -2922,12 +2923,12 @@ static int bdrv_attach_child_noperm(BlockDriverState *parent_bs,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static void bdrv_detach_child(BdrvChild *child)
|
|
|
|
|
|
+static void bdrv_detach_child(BdrvChild **childp)
|
|
{
|
|
{
|
|
- BlockDriverState *old_bs = child->bs;
|
|
|
|
|
|
+ BlockDriverState *old_bs = (*childp)->bs;
|
|
|
|
|
|
- bdrv_replace_child_noperm(child, NULL);
|
|
|
|
- bdrv_child_free(child);
|
|
|
|
|
|
+ bdrv_replace_child_noperm(childp, NULL);
|
|
|
|
+ bdrv_child_free(*childp);
|
|
|
|
|
|
if (old_bs) {
|
|
if (old_bs) {
|
|
/*
|
|
/*
|
|
@@ -3033,7 +3034,7 @@ void bdrv_root_unref_child(BdrvChild *child)
|
|
BlockDriverState *child_bs;
|
|
BlockDriverState *child_bs;
|
|
|
|
|
|
child_bs = child->bs;
|
|
child_bs = child->bs;
|
|
- bdrv_detach_child(child);
|
|
|
|
|
|
+ bdrv_detach_child(&child);
|
|
bdrv_unref(child_bs);
|
|
bdrv_unref(child_bs);
|
|
}
|
|
}
|
|
|
|
|