Loading block.c +25 −13 Original line number Diff line number Diff line Loading @@ -1713,11 +1713,10 @@ void bdrv_format_default_perms(BlockDriverState *bs, BdrvChild *c, *nshared = shared; } static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, bool check_new_perm) static void bdrv_replace_child_noperm(BdrvChild *child, BlockDriverState *new_bs) { BlockDriverState *old_bs = child->bs; uint64_t perm, shared_perm; if (old_bs) { if (old_bs->quiesce_counter && child->role->drained_end) { Loading @@ -1727,7 +1726,29 @@ static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, child->role->detach(child); } QLIST_REMOVE(child, next_parent); } child->bs = new_bs; if (new_bs) { QLIST_INSERT_HEAD(&new_bs->parents, child, next_parent); if (new_bs->quiesce_counter && child->role->drained_begin) { child->role->drained_begin(child); } if (child->role->attach) { child->role->attach(child); } } } static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, bool check_new_perm) { BlockDriverState *old_bs = child->bs; uint64_t perm, shared_perm; if (old_bs) { /* Update permissions for old node. This is guaranteed to succeed * because we're just taking a parent away, so we're loosening * restrictions. */ Loading @@ -1736,23 +1757,14 @@ static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, bdrv_set_perm(old_bs, perm, shared_perm); } child->bs = new_bs; bdrv_replace_child_noperm(child, new_bs); if (new_bs) { QLIST_INSERT_HEAD(&new_bs->parents, child, next_parent); if (new_bs->quiesce_counter && child->role->drained_begin) { child->role->drained_begin(child); } bdrv_get_cumulative_perm(new_bs, &perm, &shared_perm); if (check_new_perm) { bdrv_check_perm(new_bs, perm, shared_perm, &error_abort); } bdrv_set_perm(new_bs, perm, shared_perm); if (child->role->attach) { child->role->attach(child); } } } Loading Loading
block.c +25 −13 Original line number Diff line number Diff line Loading @@ -1713,11 +1713,10 @@ void bdrv_format_default_perms(BlockDriverState *bs, BdrvChild *c, *nshared = shared; } static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, bool check_new_perm) static void bdrv_replace_child_noperm(BdrvChild *child, BlockDriverState *new_bs) { BlockDriverState *old_bs = child->bs; uint64_t perm, shared_perm; if (old_bs) { if (old_bs->quiesce_counter && child->role->drained_end) { Loading @@ -1727,7 +1726,29 @@ static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, child->role->detach(child); } QLIST_REMOVE(child, next_parent); } child->bs = new_bs; if (new_bs) { QLIST_INSERT_HEAD(&new_bs->parents, child, next_parent); if (new_bs->quiesce_counter && child->role->drained_begin) { child->role->drained_begin(child); } if (child->role->attach) { child->role->attach(child); } } } static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, bool check_new_perm) { BlockDriverState *old_bs = child->bs; uint64_t perm, shared_perm; if (old_bs) { /* Update permissions for old node. This is guaranteed to succeed * because we're just taking a parent away, so we're loosening * restrictions. */ Loading @@ -1736,23 +1757,14 @@ static void bdrv_replace_child(BdrvChild *child, BlockDriverState *new_bs, bdrv_set_perm(old_bs, perm, shared_perm); } child->bs = new_bs; bdrv_replace_child_noperm(child, new_bs); if (new_bs) { QLIST_INSERT_HEAD(&new_bs->parents, child, next_parent); if (new_bs->quiesce_counter && child->role->drained_begin) { child->role->drained_begin(child); } bdrv_get_cumulative_perm(new_bs, &perm, &shared_perm); if (check_new_perm) { bdrv_check_perm(new_bs, perm, shared_perm, &error_abort); } bdrv_set_perm(new_bs, perm, shared_perm); if (child->role->attach) { child->role->attach(child); } } } Loading