[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH 4/4] blockjob: reimplement block_job_sleep_ns to
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-block] [PATCH 4/4] blockjob: reimplement block_job_sleep_ns to allow cancellation |
Date: |
Wed, 29 Nov 2017 13:54:39 +0100 |
User-agent: |
Mutt/1.9.1 (2017-09-22) |
Am 29.11.2017 um 11:25 hat Paolo Bonzini geschrieben:
> This reverts the effects of commit 4afeffc857 ("blockjob: do not allow
> coroutine double entry or entry-after-completion", 2017-11-21)
>
> This fixed the symptom of a bug rather than the root cause. Canceling the
> wait on a sleeping blockjob coroutine is generally fine, we just need to
> make it work correctly across AioContexts. To do so, use a QEMUTimer
> that calls block_job_enter. Use a mutex to ensure that block_job_enter
> synchronizes correctly with block_job_sleep_ns.
>
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
> blockjob.c | 57
> +++++++++++++++++++++++++++++++++++---------
> include/block/blockjob.h | 5 +++-
> include/block/blockjob_int.h | 4 ++--
> 3 files changed, 52 insertions(+), 14 deletions(-)
>
> diff --git a/blockjob.c b/blockjob.c
> index 4d22b7d2fb..3fdaabbc1f 100644
> --- a/blockjob.c
> +++ b/blockjob.c
> @@ -37,6 +37,26 @@
> #include "qemu/timer.h"
> #include "qapi-event.h"
>
> +/* Right now, this mutex is only needed to synchronize accesses to job->busy,
> + * especially concurrent calls to block_job_enter.
> + */
As discussed with Paolo on IRC, I'll replace the second line of this
comment, which he had in a different place originally and became prone
to misunderstanding now. The new version is:
/* Right now, this mutex is only needed to synchronize accesses to job->busy,
* such as concurrent calls to block_job_do_yield and block_job_enter.
*/
Kevin
- Re: [Qemu-block] [PATCH 1/4] block: Expect graph changes in bdrv_parent_drained_begin/end, (continued)
- [Qemu-block] [PATCH 2/4] blockjob: remove clock argument from block_job_sleep_ns, Paolo Bonzini, 2017/11/29
- [Qemu-block] [PATCH 3/4] blockjob: introduce block_job_do_yield, Paolo Bonzini, 2017/11/29
- [Qemu-block] [PATCH 4/4] blockjob: reimplement block_job_sleep_ns to allow cancellation, Paolo Bonzini, 2017/11/29
- Re: [Qemu-block] [PATCH 4/4] blockjob: reimplement block_job_sleep_ns to allow cancellation, Stefan Hajnoczi, 2017/11/29
- Re: [Qemu-block] [Qemu-devel] [PATCH 4/4] blockjob: reimplement block_job_sleep_ns to allow cancellation, Eric Blake, 2017/11/29
- Re: [Qemu-block] [PATCH 0/4] blockjob: reinstate busy=false/busy=true in block_job_sleep_ns, Jeff Cody, 2017/11/29
- Re: [Qemu-block] [PATCH 0/4] blockjob: reinstate busy=false/busy=true in block_job_sleep_ns, Fam Zheng, 2017/11/29