Just as for the job API, rename block_job functions that are always called under job lock.
No functional change intended. Signed-off-by: Emanuele Giuseppe Esposito <eespo...@redhat.com> --- block.c | 3 ++- block/backup.c | 4 ++-- blockdev.c | 12 +++++++----- blockjob.c | 39 ++++++++++++++++++++++----------------- include/block/blockjob.h | 29 ++++++++++++++++++----------- monitor/qmp-cmds.c | 5 +++-- qemu-img.c | 2 +- 7 files changed, 55 insertions(+), 39 deletions(-) diff --git a/block.c b/block.c index 1edb59aaae..e42a99d2af 100644 --- a/block.c +++ b/block.c @@ -6148,7 +6148,8 @@ XDbgBlockGraph *bdrv_get_xdbg_block_graph(Error **errp) } WITH_JOB_LOCK_GUARD() { - for (job = block_job_next(NULL); job; job = block_job_next(job)) { + for (job = block_job_next_locked(NULL); job; + job = block_job_next_locked(job)) { GSList *el; xdbg_graph_add_node(gr, job, X_DBG_BLOCK_GRAPH_NODE_TYPE_BLOCK_JOB, diff --git a/block/backup.c b/block/backup.c index c53041772c..c29f3c1ae8 100644 --- a/block/backup.c +++ b/block/backup.c @@ -316,8 +316,8 @@ static void coroutine_fn backup_set_speed(BlockJob *job, int64_t speed) BackupBlockJob *s = container_of(job, BackupBlockJob, common); /* - * block_job_set_speed() is called first from block_job_create(), when we - * don't yet have s->bcs. + * block_job_set_speed_locked() is called first from block_job_create(), + * when we don't yet have s->bcs. */ if (s->bcs) { block_copy_set_speed(s->bcs, speed); diff --git a/blockdev.c b/blockdev.c index 4bcb09ad9e..fd436024b4 100644 --- a/blockdev.c +++ b/blockdev.c @@ -152,7 +152,8 @@ void blockdev_mark_auto_del(BlockBackend *blk) JOB_LOCK_GUARD(); - for (job = block_job_next(NULL); job; job = block_job_next(job)) { + for (job = block_job_next_locked(NULL); job; + job = block_job_next_locked(job)) { if (block_job_has_bdrv(job, blk_bs(blk))) { AioContext *aio_context = job->job.aio_context; aio_context_acquire(aio_context); @@ -3325,7 +3326,7 @@ static BlockJob *find_block_job(const char *id, AioContext **aio_context, *aio_context = NULL; job_lock(); - job = block_job_get(id); + job = block_job_get_locked(id); if (!job) { error_set(errp, ERROR_CLASS_DEVICE_NOT_ACTIVE, @@ -3349,7 +3350,7 @@ void qmp_block_job_set_speed(const char *device, int64_t speed, Error **errp) return; } - block_job_set_speed(job, speed, errp); + block_job_set_speed_locked(job, speed, errp); aio_context_release(aio_context); job_unlock(); } @@ -3734,13 +3735,14 @@ BlockJobInfoList *qmp_query_block_jobs(Error **errp) JOB_LOCK_GUARD(); - for (job = block_job_next(NULL); job; job = block_job_next(job)) { + for (job = block_job_next_locked(NULL); job; + job = block_job_next_locked(job)) { BlockJobInfo *value; if (block_job_is_internal(job)) { continue; } - value = block_job_query(job, errp); + value = block_job_query_locked(job, errp); if (!value) { qapi_free_BlockJobInfoList(head); return NULL; diff --git a/blockjob.c b/blockjob.c index c9b811e911..24eac9d0e3 100644 --- a/blockjob.c +++ b/blockjob.c @@ -59,7 +59,7 @@ static bool is_block_job(Job *job) job_type(job) == JOB_TYPE_STREAM; } -BlockJob *block_job_next(BlockJob *bjob) +BlockJob *block_job_next_locked(BlockJob *bjob) { Job *job = bjob ? &bjob->job : NULL; assert(qemu_in_main_thread()); @@ -71,7 +71,7 @@ BlockJob *block_job_next(BlockJob *bjob) return job ? container_of(job, BlockJob, job) : NULL; } -BlockJob *block_job_get(const char *id) +BlockJob *block_job_get_locked(const char *id) { Job *job = job_get_locked(id); assert(qemu_in_main_thread()); @@ -256,7 +256,8 @@ int block_job_add_bdrv(BlockJob *job, const char *name, BlockDriverState *bs, return 0; } -static void block_job_on_idle(Notifier *n, void *opaque) +/* Called with job_mutex lock held. */ +static void block_job_on_idle_locked(Notifier *n, void *opaque) { /* * we can't kick with job_mutex held, but we also want @@ -283,7 +284,7 @@ static bool job_timer_pending(Job *job) return timer_pending(&job->sleep_timer); } -bool block_job_set_speed(BlockJob *job, int64_t speed, Error **errp) +bool block_job_set_speed_locked(BlockJob *job, int64_t speed, Error **errp) { const BlockJobDriver *drv = block_job_driver(job); int64_t old_speed = job->speed; @@ -324,7 +325,7 @@ int64_t block_job_ratelimit_get_delay(BlockJob *job, uint64_t n) return ratelimit_calculate_delay(&job->limit, n); } -BlockJobInfo *block_job_query(BlockJob *job, Error **errp) +BlockJobInfo *block_job_query_locked(BlockJob *job, Error **errp) { BlockJobInfo *info; uint64_t progress_current, progress_total; @@ -369,7 +370,8 @@ static void block_job_iostatus_set_err(BlockJob *job, int error) } } -static void block_job_event_cancelled(Notifier *n, void *opaque) +/* Called with job_mutex lock held. */ +static void block_job_event_cancelled_locked(Notifier *n, void *opaque) { BlockJob *job = opaque; uint64_t progress_current, progress_total; @@ -388,7 +390,8 @@ static void block_job_event_cancelled(Notifier *n, void *opaque) job->speed); } -static void block_job_event_completed(Notifier *n, void *opaque) +/* Called with job_mutex lock held. */ +static void block_job_event_completed_locked(Notifier *n, void *opaque) { BlockJob *job = opaque; const char *msg = NULL; @@ -414,7 +417,8 @@ static void block_job_event_completed(Notifier *n, void *opaque) msg); } -static void block_job_event_pending(Notifier *n, void *opaque) +/* Called with job_mutex lock held. */ +static void block_job_event_pending_locked(Notifier *n, void *opaque) { BlockJob *job = opaque; @@ -426,7 +430,8 @@ static void block_job_event_pending(Notifier *n, void *opaque) job->job.id); } -static void block_job_event_ready(Notifier *n, void *opaque) +/* Called with job_mutex lock held. */ +static void block_job_event_ready_locked(Notifier *n, void *opaque) { BlockJob *job = opaque; uint64_t progress_current, progress_total; @@ -477,11 +482,11 @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver, ratelimit_init(&job->limit); - job->finalize_cancelled_notifier.notify = block_job_event_cancelled; - job->finalize_completed_notifier.notify = block_job_event_completed; - job->pending_notifier.notify = block_job_event_pending; - job->ready_notifier.notify = block_job_event_ready; - job->idle_notifier.notify = block_job_on_idle; + job->finalize_cancelled_notifier.notify = block_job_event_cancelled_locked; + job->finalize_completed_notifier.notify = block_job_event_completed_locked; + job->pending_notifier.notify = block_job_event_pending_locked; + job->ready_notifier.notify = block_job_event_ready_locked; + job->idle_notifier.notify = block_job_on_idle_locked; WITH_JOB_LOCK_GUARD() { notifier_list_add(&job->job.on_finalize_cancelled, @@ -504,7 +509,7 @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver, bdrv_op_unblock(bs, BLOCK_OP_TYPE_DATAPLANE, job->blocker); WITH_JOB_LOCK_GUARD() { - ret = block_job_set_speed(job, speed, errp); + ret = block_job_set_speed_locked(job, speed, errp); } if (!ret) { goto fail; @@ -517,7 +522,7 @@ fail: return NULL; } -void block_job_iostatus_reset(BlockJob *job) +void block_job_iostatus_reset_locked(BlockJob *job) { assert(qemu_in_main_thread()); if (job->iostatus == BLOCK_DEVICE_IO_STATUS_OK) { @@ -532,7 +537,7 @@ void block_job_user_resume(Job *job) BlockJob *bjob = container_of(job, BlockJob, job); assert(qemu_in_main_thread()); WITH_JOB_LOCK_GUARD() { - block_job_iostatus_reset(bjob); + block_job_iostatus_reset_locked(bjob); } } diff --git a/include/block/blockjob.h b/include/block/blockjob.h index 6525e16fd5..000f5a1d21 100644 --- a/include/block/blockjob.h +++ b/include/block/blockjob.h @@ -46,7 +46,7 @@ typedef struct BlockJob { /** Status that is published by the query-block-jobs QMP API */ BlockDeviceIoStatus iostatus; - /** Speed that was set with @block_job_set_speed. */ + /** Speed that was set with @block_job_set_speed_locked. */ int64_t speed; /** Rate limiting data structure for implementing @speed. */ @@ -82,25 +82,27 @@ typedef struct BlockJob { */ /** - * block_job_next: + * block_job_next_locked: * @job: A block job, or %NULL. * * Get the next element from the list of block jobs after @job, or the * first one if @job is %NULL. * * Returns the requested job, or %NULL if there are no more jobs left. + * Called with job_mutex lock held. */ -BlockJob *block_job_next(BlockJob *job); +BlockJob *block_job_next_locked(BlockJob *job); /** - * block_job_get: + * block_job_get_locked: * @id: The id of the block job. * * Get the block job identified by @id (which must not be %NULL). * * Returns the requested job, or %NULL if it doesn't exist. + * Called with job_mutex lock held. */ -BlockJob *block_job_get(const char *id); +BlockJob *block_job_get_locked(const char *id); /** * block_job_add_bdrv: @@ -135,32 +137,37 @@ void block_job_remove_all_bdrv(BlockJob *job); bool block_job_has_bdrv(BlockJob *job, BlockDriverState *bs); /** - * block_job_set_speed: + * block_job_set_speed_locked: * @job: The job to set the speed for. * @speed: The new value * @errp: Error object. * * Set a rate-limiting parameter for the job; the actual meaning may * vary depending on the job type. + * + * Called with job_mutex lock held. May temporarly release the lock. */ -bool block_job_set_speed(BlockJob *job, int64_t speed, Error **errp); +bool block_job_set_speed_locked(BlockJob *job, int64_t speed, Error **errp); /** - * block_job_query: + * block_job_query_locked: * @job: The job to get information about. * * Return information about a job. + * Called with job_mutex lock held. */ -BlockJobInfo *block_job_query(BlockJob *job, Error **errp); +BlockJobInfo *block_job_query_locked(BlockJob *job, Error **errp); /** - * block_job_iostatus_reset: + * block_job_iostatus_reset_locked: * @job: The job whose I/O status should be reset. * * Reset I/O status on @job and on BlockDriverState objects it uses, * other than job->blk. + * + * Called with job_mutex lock held. */ -void block_job_iostatus_reset(BlockJob *job); +void block_job_iostatus_reset_locked(BlockJob *job); /* * block_job_get_aio_context: diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c index 97a16efcdc..ff78110d76 100644 --- a/monitor/qmp-cmds.c +++ b/monitor/qmp-cmds.c @@ -135,8 +135,9 @@ void qmp_cont(Error **errp) } WITH_JOB_LOCK_GUARD() { - for (job = block_job_next(NULL); job; job = block_job_next(job)) { - block_job_iostatus_reset(job); + for (job = block_job_next_locked(NULL); job; + job = block_job_next_locked(job)) { + block_job_iostatus_reset_locked(job); } } diff --git a/qemu-img.c b/qemu-img.c index 315c9c2a31..222c9fdf5c 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -1083,7 +1083,7 @@ static int img_commit(int argc, char **argv) } WITH_JOB_LOCK_GUARD() { - job = block_job_get("commit"); + job = block_job_get_locked("commit"); } assert(job); run_block_job(job, &local_err); -- 2.31.1