From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
If the bdrv_inactivate_all fails near the end of the migration,
the migration will fail and often the only diagnostics in the log
are an I/O error which you can't distinguish from an error on
the socket connection.
Add an error so we know when it's actually a block problem.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
migration/savevm.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/migration/savevm.c b/migration/savevm.c
index fdd15fa0a7..7a55023d1a 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1157,6 +1157,8 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
* bdrv_invalidate_cache_all() on the other end won't fail. */
ret = bdrv_inactivate_all();
if (ret) {
+ error_report("%s: bdrv_inactivate_all() failed (%d)",
+ __func__, ret);
qemu_file_set_error(f, ret);
return ret;
}
--
2.13.5
On Tue, Aug 22, 2017 at 06:02:12PM +0100, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> If the bdrv_inactivate_all fails near the end of the migration,
> the migration will fail and often the only diagnostics in the log
> are an I/O error which you can't distinguish from an error on
> the socket connection.
>
> Add an error so we know when it's actually a block problem.
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
IMHO it would be nice if bdrv_inactivate_all() can print some error
message as soon as when the error occurs, then we can know more
details (or allow caller to pass in an Error *). But at least adding
one more error message never hurts, so:
Reviewed-by: Peter Xu <peterx@redhat.com>
> ---
> migration/savevm.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/migration/savevm.c b/migration/savevm.c
> index fdd15fa0a7..7a55023d1a 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1157,6 +1157,8 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
> * bdrv_invalidate_cache_all() on the other end won't fail. */
> ret = bdrv_inactivate_all();
> if (ret) {
> + error_report("%s: bdrv_inactivate_all() failed (%d)",
> + __func__, ret);
> qemu_file_set_error(f, ret);
> return ret;
> }
> --
> 2.13.5
>
--
Peter Xu
On Tue, Aug 22, 2017 at 06:02:12PM +0100, Dr. David Alan Gilbert (git) wrote: > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > If the bdrv_inactivate_all fails near the end of the migration, > the migration will fail and often the only diagnostics in the log > are an I/O error which you can't distinguish from an error on > the socket connection. > > Add an error so we know when it's actually a block problem. > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > migration/savevm.c | 2 ++ > 1 file changed, 2 insertions(+) Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
* Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> If the bdrv_inactivate_all fails near the end of the migration,
> the migration will fail and often the only diagnostics in the log
> are an I/O error which you can't distinguish from an error on
> the socket connection.
>
> Add an error so we know when it's actually a block problem.
>
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Queued for migration.
> ---
> migration/savevm.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/migration/savevm.c b/migration/savevm.c
> index fdd15fa0a7..7a55023d1a 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1157,6 +1157,8 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
> * bdrv_invalidate_cache_all() on the other end won't fail. */
> ret = bdrv_inactivate_all();
> if (ret) {
> + error_report("%s: bdrv_inactivate_all() failed (%d)",
> + __func__, ret);
> qemu_file_set_error(f, ret);
> return ret;
> }
> --
> 2.13.5
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
© 2016 - 2026 Red Hat, Inc.