The VM stop process has to flush outstanding I/O and this is a critical
failure scenario that is hard to diagnose. Add a probe point that
records the flush return code.
Reviewed-by: Connor Kuehl <ckuehl@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
#include "sysemu/whpx.h"
#include "hw/boards.h"
#include "hw/hw.h"
+#include "trace.h"
#ifdef CONFIG_LINUX
bdrv_drain_all();
ret = bdrv_flush_all();
+ trace_vm_stop_flush_all(ret);
return ret;
}
if (runstate_is_running()) {
return vm_stop(state);
} else {
+ int ret;
runstate_set(state);
bdrv_drain_all();
/* Make sure to return an error if the flush in a previous vm_stop()
* failed. */
- return bdrv_flush_all();
+ ret = bdrv_flush_all();
+ trace_vm_stop_flush_all(ret);
+ return ret;
}
}
flatview_destroy(void *view, void *root) "%p (root %p)"
flatview_destroy_rcu(void *view, void *root) "%p (root %p)"
+# softmmu.c
+vm_stop_flush_all(int ret) "ret %d"
+
# vl.c
vm_state_notify(int running, int reason, const char *reason_str) "running %d reason %d (%s)"
load_file(const char *name, const char *path) "name %s location %s"