diff options
author | Kevin Wolf <kwolf@redhat.com> | 2023-02-03 16:21:55 +0100 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2023-02-23 19:49:23 +0100 |
commit | 4ec8df0183d0906ae6704d65ef6d8082c970ecdf (patch) | |
tree | 45fc829fcb4ea5851b8547cfce9d79ae7a73875e /block/create.c | |
parent | 7b9e8b22bca534e0e86915c0856d77a7ae99e160 (diff) | |
download | qemu-4ec8df0183d0906ae6704d65ef6d8082c970ecdf.zip qemu-4ec8df0183d0906ae6704d65ef6d8082c970ecdf.tar.gz qemu-4ec8df0183d0906ae6704d65ef6d8082c970ecdf.tar.bz2 |
block: Mark bdrv_co_create() and callers GRAPH_RDLOCK
This adds GRAPH_RDLOCK annotations to declare that callers of
bdrv_co_create() need to hold a reader lock for the graph.
Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20230203152202.49054-17-kwolf@redhat.com>
Reviewed-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block/create.c')
-rw-r--r-- | block/create.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/block/create.c b/block/create.c index 4df43f1..bf67b99 100644 --- a/block/create.c +++ b/block/create.c @@ -43,6 +43,7 @@ static int coroutine_fn blockdev_create_run(Job *job, Error **errp) int ret; GLOBAL_STATE_CODE(); + GRAPH_RDLOCK_GUARD(); job_progress_set_remaining(&s->common, 1); ret = s->drv->bdrv_co_create(s->opts, errp); @@ -59,6 +60,12 @@ static const JobDriver blockdev_create_job_driver = { .run = blockdev_create_run, }; +/* Checking whether the function is present doesn't require the graph lock */ +static inline bool TSA_NO_TSA has_bdrv_co_create(BlockDriver *drv) +{ + return drv->bdrv_co_create; +} + void qmp_blockdev_create(const char *job_id, BlockdevCreateOptions *options, Error **errp) { @@ -79,7 +86,7 @@ void qmp_blockdev_create(const char *job_id, BlockdevCreateOptions *options, } /* Error out if the driver doesn't support .bdrv_co_create */ - if (!drv->bdrv_co_create) { + if (!has_bdrv_co_create(drv)) { error_setg(errp, "Driver does not support blockdev-create"); return; } |