Patchwork [1/2] migration: Clear fd also in error cases

login
register
mail settings
Submitter Juan Quintela
Date March 9, 2010, 11:10 p.m.
Message ID <45ea53fc070c1f076583945a62b18da10ee9687a.1268176134.git.quintela@redhat.com>
Download mbox | patch
Permalink /patch/47196/
State New
Headers show

Comments

Juan Quintela - March 9, 2010, 11:10 p.m.
Not clearing the fd and closing the file makes qemu spin using 100%CPU
after incoming migration error.

See for instance bug:
https://bugzilla.redhat.com/show_bug.cgi?id=518032

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration-exec.c |    4 ++--
 migration-fd.c   |    4 ++--
 migration-tcp.c  |    5 ++---
 migration-unix.c |    5 ++---
 4 files changed, 8 insertions(+), 10 deletions(-)
Anthony Liguori - March 17, 2010, 4:57 p.m.
On 03/09/2010 05:10 PM, Juan Quintela wrote:
> Not clearing the fd and closing the file makes qemu spin using 100%CPU
> after incoming migration error.
>
> See for instance bug:
> https://bugzilla.redhat.com/show_bug.cgi?id=518032
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
>    

Applied all.  Thanks.

Regards,

Anthony Liguori

> ---
>   migration-exec.c |    4 ++--
>   migration-fd.c   |    4 ++--
>   migration-tcp.c  |    5 ++---
>   migration-unix.c |    5 ++---
>   4 files changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/migration-exec.c b/migration-exec.c
> index 3edc026..6ff8449 100644
> --- a/migration-exec.c
> +++ b/migration-exec.c
> @@ -120,12 +120,12 @@ static void exec_accept_incoming_migration(void *opaque)
>       }
>       qemu_announce_self();
>       DPRINTF("successfully loaded vm state\n");
> -    /* we've successfully migrated, close the fd */
> -    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
> +
>       if (autostart)
>           vm_start();
>
>   err:
> +    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
>       qemu_fclose(f);
>   }
>
> diff --git a/migration-fd.c b/migration-fd.c
> index 0cc74ad..9cf52ce 100644
> --- a/migration-fd.c
> +++ b/migration-fd.c
> @@ -113,12 +113,12 @@ static void fd_accept_incoming_migration(void *opaque)
>       }
>       qemu_announce_self();
>       DPRINTF("successfully loaded vm state\n");
> -    /* we've successfully migrated, close the fd */
> -    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
> +
>       if (autostart)
>           vm_start();
>
>   err:
> +    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
>       qemu_fclose(f);
>   }
>
> diff --git a/migration-tcp.c b/migration-tcp.c
> index e7f307c..95ce722 100644
> --- a/migration-tcp.c
> +++ b/migration-tcp.c
> @@ -170,15 +170,14 @@ static void tcp_accept_incoming_migration(void *opaque)
>       qemu_announce_self();
>       DPRINTF("successfully loaded vm state\n");
>
> -    /* we've successfully migrated, close the server socket */
> -    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
> -    close(s);
>       if (autostart)
>           vm_start();
>
>   out_fopen:
>       qemu_fclose(f);
>   out:
> +    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
> +    close(s);
>       close(c);
>   }
>
> diff --git a/migration-unix.c b/migration-unix.c
> index b7aab38..ce59a2a 100644
> --- a/migration-unix.c
> +++ b/migration-unix.c
> @@ -176,13 +176,12 @@ static void unix_accept_incoming_migration(void *opaque)
>       qemu_announce_self();
>       DPRINTF("successfully loaded vm state\n");
>
> -    /* we've successfully migrated, close the server socket */
> -    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
> -    close(s);
>
>   out_fopen:
>       qemu_fclose(f);
>   out:
> +    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
> +    close(s);
>       close(c);
>   }
>
>

Patch

diff --git a/migration-exec.c b/migration-exec.c
index 3edc026..6ff8449 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -120,12 +120,12 @@  static void exec_accept_incoming_migration(void *opaque)
     }
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");
-    /* we've successfully migrated, close the fd */
-    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+
     if (autostart)
         vm_start();

 err:
+    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
     qemu_fclose(f);
 }

diff --git a/migration-fd.c b/migration-fd.c
index 0cc74ad..9cf52ce 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -113,12 +113,12 @@  static void fd_accept_incoming_migration(void *opaque)
     }
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");
-    /* we've successfully migrated, close the fd */
-    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+
     if (autostart)
         vm_start();

 err:
+    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
     qemu_fclose(f);
 }

diff --git a/migration-tcp.c b/migration-tcp.c
index e7f307c..95ce722 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -170,15 +170,14 @@  static void tcp_accept_incoming_migration(void *opaque)
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");

-    /* we've successfully migrated, close the server socket */
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
-    close(s);
     if (autostart)
         vm_start();

 out_fopen:
     qemu_fclose(f);
 out:
+    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    close(s);
     close(c);
 }

diff --git a/migration-unix.c b/migration-unix.c
index b7aab38..ce59a2a 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -176,13 +176,12 @@  static void unix_accept_incoming_migration(void *opaque)
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");

-    /* we've successfully migrated, close the server socket */
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
-    close(s);

 out_fopen:
     qemu_fclose(f);
 out:
+    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    close(s);
     close(c);
 }