|
@@ -771,7 +771,14 @@ void block_job_resume_all(void)
|
|
|
|
|
|
void block_job_enter(BlockJob *job)
|
|
void block_job_enter(BlockJob *job)
|
|
{
|
|
{
|
|
- if (job->co && !job->busy) {
|
|
|
|
|
|
+ if (!block_job_started(job)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (job->deferred_to_main_loop) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!job->busy) {
|
|
bdrv_coroutine_enter(blk_bs(job->blk), job->co);
|
|
bdrv_coroutine_enter(blk_bs(job->blk), job->co);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -899,7 +906,6 @@ static void block_job_defer_to_main_loop_bh(void *opaque)
|
|
aio_context_acquire(aio_context);
|
|
aio_context_acquire(aio_context);
|
|
}
|
|
}
|
|
|
|
|
|
- data->job->deferred_to_main_loop = false;
|
|
|
|
data->fn(data->job, data->opaque);
|
|
data->fn(data->job, data->opaque);
|
|
|
|
|
|
if (aio_context != data->aio_context) {
|
|
if (aio_context != data->aio_context) {
|