aboutsummaryrefslogtreecommitdiff
path: root/block/create.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2023-02-03 16:21:55 +0100
committerKevin Wolf <kwolf@redhat.com>2023-02-23 19:49:23 +0100
commit4ec8df0183d0906ae6704d65ef6d8082c970ecdf (patch)
tree45fc829fcb4ea5851b8547cfce9d79ae7a73875e /block/create.c
parent7b9e8b22bca534e0e86915c0856d77a7ae99e160 (diff)
downloadqemu-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.c9
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;
}