07.03.2017 13:02, Kevin Wolf wrote:
Am 25.02.2017 um 20:31 hat Vladimir Sementsov-Ogievskiy geschrieben:
We must invalidate on RUN_STATE_PRELAUNCH too, as it is available
through qmp_system_reset from RUN_STATE_POSTMIGRATE. Otherwise, we will
come to
qemu-kvm: block/io.c:1406: bdrv_co_do_pwritev:
Assertion `!(bs->open_flags & 0x0800)' failed.
on the first write after vm start.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com>
Wouldn't it make more sense to invalidate in qmp_system_reset() where
the migration states are left?
Or maybe BDRV_O_INACTIVE could even be tied directly to runstates? Not
sure how realistic this one is, but if we start adding invalidate_cache
calls all over the place, maybe that's a sign that we need to look for a
more central place.
I've proposed it in cover letter) These bugs and my fixes are just show
that something should be rethought.. I don't claim that these fixes are
true way, they are just the simplest.
Kevin
qmp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/qmp.c b/qmp.c
index dfaabac1a6..e61795d033 100644
--- a/qmp.c
+++ b/qmp.c
@@ -198,7 +198,8 @@ void qmp_cont(Error **errp)
/* Continuing after completed migration. Images have been inactivated to
* allow the destination to take control. Need to get control back now. */
if (runstate_check(RUN_STATE_FINISH_MIGRATE) ||
- runstate_check(RUN_STATE_POSTMIGRATE))
+ runstate_check(RUN_STATE_POSTMIGRATE) ||
+ runstate_check(RUN_STATE_PRELAUNCH))
{
bdrv_invalidate_cache_all(&local_err);
if (local_err) {
--
2.11.1
--
Best regards,
Vladimir