[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Qemu-block] [PULL 1/4] blockjob: do not allow coroutin
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [Qemu-block] [PULL 1/4] blockjob: do not allow coroutine double entry or entry-after-completion |
Date: |
Wed, 22 Nov 2017 11:25:15 +0100 |
User-agent: |
Mutt/1.9.1 (2017-09-22) |
Am 21.11.2017 um 18:03 hat Jeff Cody geschrieben:
> When block_job_sleep_ns() is called, the co-routine is scheduled for
> future execution. If we allow the job to be re-entered prior to the
> scheduled time, we present a race condition in which a coroutine can be
> entered recursively, or even entered after the coroutine is deleted.
>
> The job->busy flag is used by blockjobs when a coroutine is busy
> executing. The function 'block_job_enter()' obeys the busy flag,
> and will not enter a coroutine if set. If we sleep a job, we need to
> leave the busy flag set, so that subsequent calls to block_job_enter()
> are prevented.
>
> This changes the prior behavior of block_job_cancel() being able to
> immediately wake up and cancel a job; in practice, this should not be an
> issue, as the coroutine sleep times are generally very small, and the
> cancel will occur the next time the coroutine wakes up.
>
> This fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1508708
>
> Signed-off-by: Jeff Cody <address@hidden>
> Reviewed-by: Stefan Hajnoczi <address@hidden>
git bisect says that this is the commit where qemu-iotests started to
break, e.g. case 020:
--- /home/kwolf/source/qemu/tests/qemu-iotests/020.out 2017-11-20
10:43:53.157894898 +0100
+++ /home/kwolf/source/qemu/tests/qemu-iotests/020.out.bad 2017-11-22
11:22:48.781344756 +0100
@@ -537,7 +537,8 @@
wrote 65536/65536 bytes at offset 4295098368
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
No errors were found on the image.
-Image committed.
+qemu-img: block/block-backend.c:2086: blk_root_drained_end: Assertion
`blk->quiesce_counter' failed.
+./common.rc: line 61: 17396 Aborted (core dumped) ( exec
"$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@" )
Reading from the backing file
- [Qemu-devel] [PULL 0/4] Late blockjob / coroutine patches for -rc2, Jeff Cody, 2017/11/21
- [Qemu-devel] [PULL 1/4] blockjob: do not allow coroutine double entry or entry-after-completion, Jeff Cody, 2017/11/21
- Re: [Qemu-devel] [Qemu-block] [PULL 1/4] blockjob: do not allow coroutine double entry or entry-after-completion,
Kevin Wolf <=
- [Qemu-devel] [PULL 2/4] coroutine: abort if we try to schedule or enter a pending coroutine, Jeff Cody, 2017/11/21
- [Qemu-devel] [PULL 4/4] qemu-iotest: add test for blockjob coroutine race condition, Jeff Cody, 2017/11/21
- [Qemu-devel] [PULL 3/4] qemu-iotests: add option in common.qemu for mismatch only, Jeff Cody, 2017/11/21
- Re: [Qemu-devel] [PULL 0/4] Late blockjob / coroutine patches for -rc2, Peter Maydell, 2017/11/21