Message ID | 20180907161520.26349-6-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
Series | Fix some jobs/drain/aio_poll related hangs | expand |
On Fri, 09/07 18:15, Kevin Wolf wrote: > This is a regression test for a deadlock that occurred in block job > completion callbacks (via job_defer_to_main_loop) because the AioContext > lock was taken twice: once in job_finish_sync() and then again in > job_defer_to_main_loop_bh(). This would cause AIO_WAIT_WHILE() to hang. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com>
diff --git a/tests/test-bdrv-drain.c b/tests/test-bdrv-drain.c index ab055e85f8..9641a20dd8 100644 --- a/tests/test-bdrv-drain.c +++ b/tests/test-bdrv-drain.c @@ -776,6 +776,11 @@ typedef struct TestBlockJob { static void test_job_completed(Job *job, void *opaque) { + TestBlockJob *s = container_of(job, TestBlockJob, common.job); + + /* Provoke an AIO_WAIT_WHILE() call to verify there is no deadlock */ + blk_flush(s->common.blk); + job_completed(job, 0, NULL); }
This is a regression test for a deadlock that occurred in block job completion callbacks (via job_defer_to_main_loop) because the AioContext lock was taken twice: once in job_finish_sync() and then again in job_defer_to_main_loop_bh(). This would cause AIO_WAIT_WHILE() to hang. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- tests/test-bdrv-drain.c | 5 +++++ 1 file changed, 5 insertions(+)