assertions for block_int global state API

Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Message-Id: <20220303151616.325444-13-eesposit@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Emanuele Giuseppe Esposito 2022-03-03 10:15:57 -05:00 committed by Kevin Wolf
parent ebc2752b08
commit b4ad82aab1
10 changed files with 42 additions and 0 deletions

15
block.c
View File

@ -665,6 +665,8 @@ int coroutine_fn bdrv_co_create_opts_simple(BlockDriver *drv,
Error *local_err = NULL; Error *local_err = NULL;
int ret; int ret;
GLOBAL_STATE_CODE();
size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0); size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
buf = qemu_opt_get_del(opts, BLOCK_OPT_PREALLOC); buf = qemu_opt_get_del(opts, BLOCK_OPT_PREALLOC);
prealloc = qapi_enum_parse(&PreallocMode_lookup, buf, prealloc = qapi_enum_parse(&PreallocMode_lookup, buf,
@ -2504,6 +2506,8 @@ void bdrv_get_cumulative_perm(BlockDriverState *bs, uint64_t *perm,
uint64_t cumulative_perms = 0; uint64_t cumulative_perms = 0;
uint64_t cumulative_shared_perms = BLK_PERM_ALL; uint64_t cumulative_shared_perms = BLK_PERM_ALL;
GLOBAL_STATE_CODE();
QLIST_FOREACH(c, &bs->parents, next_parent) { QLIST_FOREACH(c, &bs->parents, next_parent) {
cumulative_perms |= c->perm; cumulative_perms |= c->perm;
cumulative_shared_perms &= c->shared_perm; cumulative_shared_perms &= c->shared_perm;
@ -2562,6 +2566,8 @@ int bdrv_child_try_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared,
Transaction *tran = tran_new(); Transaction *tran = tran_new();
int ret; int ret;
GLOBAL_STATE_CODE();
bdrv_child_set_perm(c, perm, shared, tran); bdrv_child_set_perm(c, perm, shared, tran);
ret = bdrv_refresh_perms(c->bs, &local_err); ret = bdrv_refresh_perms(c->bs, &local_err);
@ -2592,6 +2598,8 @@ int bdrv_child_refresh_perms(BlockDriverState *bs, BdrvChild *c, Error **errp)
uint64_t parent_perms, parent_shared; uint64_t parent_perms, parent_shared;
uint64_t perms, shared; uint64_t perms, shared;
GLOBAL_STATE_CODE();
bdrv_get_cumulative_perm(bs, &parent_perms, &parent_shared); bdrv_get_cumulative_perm(bs, &parent_perms, &parent_shared);
bdrv_child_perm(bs, c->bs, c, c->role, NULL, bdrv_child_perm(bs, c->bs, c, c->role, NULL,
parent_perms, parent_shared, &perms, &shared); parent_perms, parent_shared, &perms, &shared);
@ -2736,6 +2744,7 @@ void bdrv_default_perms(BlockDriverState *bs, BdrvChild *c,
uint64_t perm, uint64_t shared, uint64_t perm, uint64_t shared,
uint64_t *nperm, uint64_t *nshared) uint64_t *nperm, uint64_t *nshared)
{ {
GLOBAL_STATE_CODE();
if (role & BDRV_CHILD_FILTERED) { if (role & BDRV_CHILD_FILTERED) {
assert(!(role & (BDRV_CHILD_DATA | BDRV_CHILD_METADATA | assert(!(role & (BDRV_CHILD_DATA | BDRV_CHILD_METADATA |
BDRV_CHILD_COW))); BDRV_CHILD_COW)));
@ -3093,6 +3102,8 @@ BdrvChild *bdrv_root_attach_child(BlockDriverState *child_bs,
BdrvChild *child = NULL; BdrvChild *child = NULL;
Transaction *tran = tran_new(); Transaction *tran = tran_new();
GLOBAL_STATE_CODE();
ret = bdrv_attach_child_common(child_bs, child_name, child_class, ret = bdrv_attach_child_common(child_bs, child_name, child_class,
child_role, perm, shared_perm, opaque, child_role, perm, shared_perm, opaque,
&child, tran, errp); &child, tran, errp);
@ -7486,6 +7497,8 @@ bool bdrv_recurse_can_replace(BlockDriverState *bs,
{ {
BlockDriverState *filtered; BlockDriverState *filtered;
GLOBAL_STATE_CODE();
if (!bs || !bs->drv) { if (!bs || !bs->drv) {
return false; return false;
} }
@ -7657,6 +7670,7 @@ static bool append_strong_runtime_options(QDict *d, BlockDriverState *bs)
* would result in exactly bs->backing. */ * would result in exactly bs->backing. */
static bool bdrv_backing_overridden(BlockDriverState *bs) static bool bdrv_backing_overridden(BlockDriverState *bs)
{ {
GLOBAL_STATE_CODE();
if (bs->backing) { if (bs->backing) {
return strcmp(bs->auto_backing_file, return strcmp(bs->auto_backing_file,
bs->backing->bs->filename); bs->backing->bs->filename);
@ -8045,6 +8059,7 @@ static BlockDriverState *bdrv_do_skip_filters(BlockDriverState *bs,
*/ */
BlockDriverState *bdrv_skip_implicit_filters(BlockDriverState *bs) BlockDriverState *bdrv_skip_implicit_filters(BlockDriverState *bs)
{ {
GLOBAL_STATE_CODE();
return bdrv_do_skip_filters(bs, true); return bdrv_do_skip_filters(bs, true);
} }

View File

@ -372,6 +372,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
assert(bs); assert(bs);
assert(target); assert(target);
GLOBAL_STATE_CODE();
/* QMP interface protects us from these cases */ /* QMP interface protects us from these cases */
assert(sync_mode != MIRROR_SYNC_MODE_INCREMENTAL); assert(sync_mode != MIRROR_SYNC_MODE_INCREMENTAL);

View File

@ -1106,6 +1106,7 @@ static void blk_root_change_media(BdrvChild *child, bool load)
*/ */
bool blk_dev_has_removable_media(BlockBackend *blk) bool blk_dev_has_removable_media(BlockBackend *blk)
{ {
GLOBAL_STATE_CODE();
return !blk->dev || (blk->dev_ops && blk->dev_ops->change_media_cb); return !blk->dev || (blk->dev_ops && blk->dev_ops->change_media_cb);
} }
@ -1123,6 +1124,7 @@ bool blk_dev_has_tray(BlockBackend *blk)
*/ */
void blk_dev_eject_request(BlockBackend *blk, bool force) void blk_dev_eject_request(BlockBackend *blk, bool force)
{ {
GLOBAL_STATE_CODE();
if (blk->dev_ops && blk->dev_ops->eject_request_cb) { if (blk->dev_ops && blk->dev_ops->eject_request_cb) {
blk->dev_ops->eject_request_cb(blk->dev_opaque, force); blk->dev_ops->eject_request_cb(blk->dev_opaque, force);
} }
@ -1145,6 +1147,7 @@ bool blk_dev_is_tray_open(BlockBackend *blk)
*/ */
bool blk_dev_is_medium_locked(BlockBackend *blk) bool blk_dev_is_medium_locked(BlockBackend *blk)
{ {
GLOBAL_STATE_CODE();
if (blk->dev_ops && blk->dev_ops->is_medium_locked) { if (blk->dev_ops && blk->dev_ops->is_medium_locked) {
return blk->dev_ops->is_medium_locked(blk->dev_opaque); return blk->dev_ops->is_medium_locked(blk->dev_opaque);
} }

View File

@ -253,6 +253,8 @@ void commit_start(const char *job_id, BlockDriverState *bs,
uint64_t base_perms, iter_shared_perms; uint64_t base_perms, iter_shared_perms;
int ret; int ret;
GLOBAL_STATE_CODE();
assert(top != bs); assert(top != bs);
if (bdrv_skip_filters(top) == bdrv_skip_filters(base)) { if (bdrv_skip_filters(top) == bdrv_skip_filters(base)) {
error_setg(errp, "Invalid files for merge: top and base are the same"); error_setg(errp, "Invalid files for merge: top and base are the same");

View File

@ -674,6 +674,7 @@ void bdrv_restore_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap *backup)
{ {
HBitmap *tmp = bitmap->bitmap; HBitmap *tmp = bitmap->bitmap;
assert(!bdrv_dirty_bitmap_readonly(bitmap)); assert(!bdrv_dirty_bitmap_readonly(bitmap));
GLOBAL_STATE_CODE();
bitmap->bitmap = backup; bitmap->bitmap = backup;
hbitmap_free(tmp); hbitmap_free(tmp);
} }

View File

@ -699,6 +699,7 @@ void bdrv_drain_all_begin(void)
void bdrv_drain_all_end_quiesce(BlockDriverState *bs) void bdrv_drain_all_end_quiesce(BlockDriverState *bs)
{ {
int drained_end_counter = 0; int drained_end_counter = 0;
GLOBAL_STATE_CODE();
g_assert(bs->quiesce_counter > 0); g_assert(bs->quiesce_counter > 0);
g_assert(!bs->refcnt); g_assert(!bs->refcnt);

View File

@ -1864,6 +1864,8 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
bool is_none_mode; bool is_none_mode;
BlockDriverState *base; BlockDriverState *base;
GLOBAL_STATE_CODE();
if ((mode == MIRROR_SYNC_MODE_INCREMENTAL) || if ((mode == MIRROR_SYNC_MODE_INCREMENTAL) ||
(mode == MIRROR_SYNC_MODE_BITMAP)) { (mode == MIRROR_SYNC_MODE_BITMAP)) {
error_setg(errp, "Sync mode '%s' not supported", error_setg(errp, "Sync mode '%s' not supported",
@ -1889,6 +1891,8 @@ BlockJob *commit_active_start(const char *job_id, BlockDriverState *bs,
bool base_read_only; bool base_read_only;
BlockJob *job; BlockJob *job;
GLOBAL_STATE_CODE();
base_read_only = bdrv_is_read_only(base); base_read_only = bdrv_is_read_only(base);
if (base_read_only) { if (base_read_only) {

View File

@ -56,6 +56,8 @@ BdrvDirtyBitmap *block_dirty_bitmap_lookup(const char *node,
BlockDriverState *bs; BlockDriverState *bs;
BdrvDirtyBitmap *bitmap; BdrvDirtyBitmap *bitmap;
GLOBAL_STATE_CODE();
if (!node) { if (!node) {
error_setg(errp, "Node cannot be NULL"); error_setg(errp, "Node cannot be NULL");
return NULL; return NULL;
@ -155,6 +157,8 @@ BdrvDirtyBitmap *block_dirty_bitmap_remove(const char *node, const char *name,
BdrvDirtyBitmap *bitmap; BdrvDirtyBitmap *bitmap;
AioContext *aio_context; AioContext *aio_context;
GLOBAL_STATE_CODE();
bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp); bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
if (!bitmap || !bs) { if (!bitmap || !bs) {
return NULL; return NULL;
@ -261,6 +265,8 @@ BdrvDirtyBitmap *block_dirty_bitmap_merge(const char *node, const char *target,
BlockDirtyBitmapMergeSourceList *lst; BlockDirtyBitmapMergeSourceList *lst;
Error *local_err = NULL; Error *local_err = NULL;
GLOBAL_STATE_CODE();
dst = block_dirty_bitmap_lookup(node, target, &bs, errp); dst = block_dirty_bitmap_lookup(node, target, &bs, errp);
if (!dst) { if (!dst) {
return NULL; return NULL;

View File

@ -220,6 +220,8 @@ void stream_start(const char *job_id, BlockDriverState *bs,
QDict *opts; QDict *opts;
int ret; int ret;
GLOBAL_STATE_CODE();
assert(!(base && bottom)); assert(!(base && bottom));
assert(!(backing_file_str && bottom)); assert(!(backing_file_str && bottom));

View File

@ -69,6 +69,7 @@ QTAILQ_HEAD(, BlockDriverState) monitor_bdrv_states =
void bdrv_set_monitor_owned(BlockDriverState *bs) void bdrv_set_monitor_owned(BlockDriverState *bs)
{ {
GLOBAL_STATE_CODE();
QTAILQ_INSERT_TAIL(&monitor_bdrv_states, bs, monitor_list); QTAILQ_INSERT_TAIL(&monitor_bdrv_states, bs, monitor_list);
} }
@ -629,6 +630,7 @@ BlockDriverState *bds_tree_init(QDict *bs_opts, Error **errp)
{ {
int bdrv_flags = 0; int bdrv_flags = 0;
GLOBAL_STATE_CODE();
/* bdrv_open() defaults to the values in bdrv_flags (for compatibility /* bdrv_open() defaults to the values in bdrv_flags (for compatibility
* with other callers) rather than what we want as the real defaults. * with other callers) rather than what we want as the real defaults.
* Apply the defaults here instead. */ * Apply the defaults here instead. */
@ -647,6 +649,7 @@ void blockdev_close_all_bdrv_states(void)
{ {
BlockDriverState *bs, *next_bs; BlockDriverState *bs, *next_bs;
GLOBAL_STATE_CODE();
QTAILQ_FOREACH_SAFE(bs, &monitor_bdrv_states, monitor_list, next_bs) { QTAILQ_FOREACH_SAFE(bs, &monitor_bdrv_states, monitor_list, next_bs) {
AioContext *ctx = bdrv_get_aio_context(bs); AioContext *ctx = bdrv_get_aio_context(bs);
@ -2300,6 +2303,8 @@ void qmp_transaction(TransactionActionList *dev_list,
BlkActionState *state, *next; BlkActionState *state, *next;
Error *local_err = NULL; Error *local_err = NULL;
GLOBAL_STATE_CODE();
QTAILQ_HEAD(, BlkActionState) snap_bdrv_states; QTAILQ_HEAD(, BlkActionState) snap_bdrv_states;
QTAILQ_INIT(&snap_bdrv_states); QTAILQ_INIT(&snap_bdrv_states);
@ -3602,6 +3607,8 @@ void qmp_blockdev_del(const char *node_name, Error **errp)
AioContext *aio_context; AioContext *aio_context;
BlockDriverState *bs; BlockDriverState *bs;
GLOBAL_STATE_CODE();
bs = bdrv_find_node(node_name); bs = bdrv_find_node(node_name);
if (!bs) { if (!bs) {
error_setg(errp, "Failed to find node with node-name='%s'", node_name); error_setg(errp, "Failed to find node with node-name='%s'", node_name);