Fam Zheng
e92f0e1910
block: Use bdrv_coroutine_enter to start I/O coroutines
...
BDRV_POLL_WHILE waits for the started I/O by releasing bs's ctx then polling
the main context, which relies on the yielded coroutine continuing on bs->ctx
before notifying qemu_aio_context with bdrv_wakeup().
Thus, using qemu_coroutine_enter to start I/O is wrong because if the coroutine
is entered from main loop, co->ctx will be qemu_aio_context, as a result of the
"release, poll, acquire" loop of BDRV_POLL_WHILE, race conditions happen when
both main thread and the iothread access the same BDS:
main loop iothread
-----------------------------------------------------------------------
blockdev_snapshot
aio_context_acquire(bs->ctx)
virtio_scsi_data_plane_handle_cmd
bdrv_drained_begin(bs->ctx)
bdrv_flush(bs)
bdrv_co_flush(bs) aio_context_acquire(bs->ctx).enter
...
qemu_coroutine_yield(co)
BDRV_POLL_WHILE()
aio_context_release(bs->ctx)
aio_context_acquire(bs->ctx).return
...
aio_co_wake(co)
aio_poll(qemu_aio_context) ...
co_schedule_bh_cb() ...
qemu_coroutine_enter(co) ...
/* (A) bdrv_co_flush(bs) /* (B) I/O on bs */
continues... */
aio_context_release(bs->ctx)
aio_context_acquire(bs->ctx)
Note that in above case, bdrv_drained_begin() doesn't do the "release,
poll, acquire" in BDRV_POLL_WHILE, because bs->in_flight == 0.
Fix this by using bdrv_coroutine_enter and enter coroutine in the right
context.
iotests 109 output is updated because the coroutine reenter flow during
mirror job complete is different (now through co_queue_wakeup, instead
of the unconditional qemu_coroutine_switch before), making the end job
len different.
Signed-off-by: Fam Zheng <famz@redhat.com>
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
2017-04-11 20:07:15 +08:00
..
2016-03-14 16:46:42 +01:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-05-12 15:33:24 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-05-12 15:33:24 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-05-12 15:33:24 +02:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2017-03-13 12:49:33 +01:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-11-08 16:06:35 +00:00
2016-11-08 16:06:35 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-01-20 13:36:23 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-02-24 16:09:23 +01:00
2016-10-31 16:52:39 +01:00
2016-04-15 17:56:56 +02:00
2016-01-20 13:36:23 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-04-15 17:22:11 +02:00
2016-06-08 10:21:08 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-03-17 15:47:56 +01:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2016-05-12 15:33:24 +02:00
2015-11-11 16:25:47 +01:00
2015-11-11 16:25:47 +01:00
2017-04-07 14:44:06 +02:00
2017-04-07 14:44:06 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:36:17 +01:00
2012-11-14 18:19:21 +01:00
2014-04-01 15:21:03 +02:00
2013-09-12 10:12:47 +02:00
2013-09-12 10:12:47 +02:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-05-12 15:33:24 +02:00
2016-05-12 15:33:24 +02:00
2016-04-15 17:56:56 +02:00
2017-02-28 20:40:31 +01:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2017-02-24 16:09:23 +01:00
2017-02-28 20:40:36 +01:00
2016-05-12 15:33:24 +02:00
2016-05-12 15:33:24 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-02-28 20:40:37 +01:00
2016-09-05 19:06:48 +02:00
2015-12-03 11:08:07 +08:00
2015-12-03 11:08:07 +08:00
2016-09-05 19:06:47 +02:00
2013-09-12 10:12:47 +02:00
2016-04-15 17:56:56 +02:00
2013-12-04 15:19:00 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2016-01-13 15:16:18 +01:00
2016-04-15 17:56:56 +02:00
2016-05-12 15:33:24 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2013-09-06 15:25:07 +02:00
2016-04-15 17:56:56 +02:00
2015-01-23 12:41:32 -05:00
2015-03-10 14:02:20 +01:00
2013-10-11 16:49:50 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-10-24 17:54:03 +02:00
2016-09-23 13:45:36 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-01-13 15:16:18 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-10-24 17:54:03 +02:00
2017-01-09 13:30:52 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2013-12-04 14:31:39 +01:00
2013-12-04 14:31:39 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-06-07 14:40:51 +01:00
2016-06-07 14:40:51 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-10-24 17:54:03 +02:00
2016-03-14 17:35:06 +01:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-05-12 15:33:23 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-10-24 17:54:03 +02:00
2017-02-28 20:47:51 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-10-24 17:54:03 +02:00
2016-10-07 19:22:11 +02:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2016-07-18 18:19:01 -04:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2014-05-28 14:22:25 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-10-24 17:54:03 +02:00
2016-10-24 17:54:03 +02:00
2016-04-15 17:56:56 +02:00
2015-02-16 14:36:03 +00:00
2016-06-16 15:20:37 +02:00
2016-01-07 21:30:17 +01:00
2016-05-19 16:45:31 +02:00
2015-10-16 15:34:29 +02:00
2017-04-03 17:11:40 +02:00
2017-04-03 17:11:40 +02:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-08-22 11:01:12 +02:00
2016-04-15 17:56:56 +02:00
2014-11-03 11:41:47 +00:00
2016-04-15 17:56:56 +02:00
2016-01-13 15:16:18 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-10-03 10:30:33 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-11-14 22:47:34 -05:00
2017-04-11 20:07:15 +08:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:36:17 +01:00
2016-04-15 17:56:56 +02:00
2014-11-06 12:45:47 +01:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:34:43 +01:00
2016-04-15 17:56:56 +02:00
2014-12-10 10:31:20 +01:00
2016-04-15 17:56:56 +02:00
2016-01-13 15:16:18 +01:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-10-24 17:54:03 +02:00
2016-02-02 17:50:46 +01:00
2016-10-24 17:54:03 +02:00
2015-11-11 16:25:47 +01:00
2016-04-15 17:56:56 +02:00
2015-06-12 15:54:08 +02:00
2016-04-15 17:56:56 +02:00
2015-06-12 15:54:08 +02:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2016-03-30 12:16:03 +02:00
2016-04-15 17:56:56 +02:00
2015-02-16 15:07:18 +00:00
2016-11-14 22:47:34 -05:00
2016-11-14 22:47:34 -05:00
2016-04-15 17:56:56 +02:00
2015-03-10 14:02:24 +01:00
2015-04-28 15:36:09 +02:00
2015-04-28 15:36:09 +02:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2015-07-02 10:06:23 +01:00
2015-07-02 10:06:23 +01:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:34:43 +01:00
2016-04-15 17:56:56 +02:00
2016-03-30 12:12:15 +02:00
2016-04-15 17:56:56 +02:00
2015-07-27 17:19:07 +02:00
2016-05-19 16:56:58 +02:00
2016-05-19 16:45:31 +02:00
2017-02-24 16:09:22 +01:00
2016-05-12 15:33:24 +02:00
2016-04-15 17:56:56 +02:00
2015-09-14 16:51:37 +02:00
2017-03-28 15:23:23 +02:00
2016-09-23 13:45:36 +02:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2017-03-28 15:23:23 +02:00
2017-02-28 20:47:46 +01:00
2016-04-15 17:56:56 +02:00
2016-03-30 12:16:03 +02:00
2016-04-15 17:56:56 +02:00
2016-02-16 17:16:11 +01:00
2016-02-02 18:07:27 +01:00
2016-07-18 18:19:01 -04:00
2016-04-15 17:56:56 +02:00
2016-02-22 09:49:46 +01:00
2016-03-14 16:46:42 +01:00
2016-03-14 16:46:42 +01:00
2017-04-03 17:11:39 +02:00
2016-10-27 19:05:23 +02:00
2016-04-12 18:07:39 +02:00
2016-03-17 16:43:30 +01:00
2016-07-04 10:46:59 +01:00
2016-07-04 10:46:59 +01:00
2016-04-15 17:56:56 +02:00
2016-04-12 18:06:51 +02:00
2016-04-20 16:52:55 +02:00
2016-04-20 16:52:55 +02:00
2016-06-08 10:21:08 +02:00
2016-06-08 10:21:08 +02:00
2016-10-24 17:54:03 +02:00
2016-06-16 15:20:37 +02:00
2016-06-16 15:20:37 +02:00
2016-06-16 15:20:37 +02:00
2016-07-13 13:41:39 +02:00
2016-07-13 13:41:39 +02:00
2016-09-23 13:36:09 +02:00
2016-09-23 13:36:09 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
2016-11-11 15:56:22 +01:00
2016-10-24 17:54:03 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
2016-10-31 16:52:39 +01:00
2016-10-31 16:52:39 +01:00
2016-10-27 16:29:14 -04:00
2017-02-28 20:40:36 +01:00
2017-02-12 00:47:42 +01:00
2017-02-12 00:47:42 +01:00
2017-02-12 00:47:42 +01:00
2017-02-12 00:47:42 +01:00
2017-02-24 16:09:22 +01:00
2017-02-24 16:09:22 +01:00
2017-04-03 17:11:40 +02:00
2017-04-03 17:11:40 +02:00
2017-02-12 00:47:42 +01:00
2017-03-13 12:49:33 +01:00
2017-02-12 00:47:42 +01:00
2017-03-13 12:49:33 +01:00
2013-11-07 13:53:31 +01:00
2017-02-12 00:47:42 +01:00
2017-03-13 12:49:33 +01:00
2012-02-22 16:15:22 +01:00
2017-04-03 17:11:40 +02:00
2017-04-07 14:44:06 +02:00
2017-02-12 00:47:42 +01:00
2014-03-14 16:28:28 +01:00
2014-12-10 10:31:13 +01:00
2016-02-08 17:29:54 +01:00
2016-06-16 15:19:55 +02:00
2016-10-27 19:05:23 +02:00