thread-pool: add missing qemu_bh_cancel in completion function
commit3c80ca15
fixed a deadlock scenarion with nested aio_poll invocations. However, the rescheduling of the completion BH introcuded unnecessary spinning in the main-loop. On very fast file backends this can even lead to the "WARNING: I/O thread spun for 1000 iterations" message popping up. Callgrind reports about 3-4% less instructions with this patch running qemu-img bench on a ramdisk based VMDK file. Fixes:3c80ca158c
Cc: qemu-stable@nongnu.org Signed-off-by: Peter Lieven <pl@kamp.de> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
8cd1a3e470
commit
b7a745dc33
|
@ -188,6 +188,13 @@ restart:
|
|||
aio_context_release(pool->ctx);
|
||||
elem->common.cb(elem->common.opaque, elem->ret);
|
||||
aio_context_acquire(pool->ctx);
|
||||
|
||||
/* We can safely cancel the completion_bh here regardless of someone
|
||||
* else having scheduled it meanwhile because we reenter the
|
||||
* completion function anyway (goto restart).
|
||||
*/
|
||||
qemu_bh_cancel(pool->completion_bh);
|
||||
|
||||
qemu_aio_unref(elem);
|
||||
goto restart;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue