[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] libxl: Rewind toolstack_save_fd in libxl_save_helper when using remus

commit(b327a3f421bb57d262b7d1fb3c43b710852b103b) move the rewinding
of toolstack_save_fd to libxl, this breaks remus, because in remus
mode, toolstack_save_cb will be called in every checkpoint, if
we don't rewind it in libxl_save_helper, it will surely encounted

I know this fix is just a hack, in fact the whole toolstack save
thing should be done in libxl. But this fix should solve Jason's
case and remus thing. Until migration v2 is upstreamed, this fix
should be fine.

Signed-off-by: Yang Hongyang <yanghy@xxxxxxxxxxxxxx>
CC: Jason Andryuk <andryuk@xxxxxxxx>
CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CC: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
 tools/libxl/libxl_save_helper.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/tools/libxl/libxl_save_helper.c b/tools/libxl/libxl_save_helper.c
index b259bd0..4619fa3 100644
--- a/tools/libxl/libxl_save_helper.c
+++ b/tools/libxl/libxl_save_helper.c
@@ -159,6 +159,7 @@ int helper_getreply(void *user)
 static int toolstack_save_fd;
 static uint32_t toolstack_save_len;
+static struct save_callbacks helper_save_callbacks;
 static int toolstack_save_cb(uint32_t domid, uint8_t **buf,
                              uint32_t *len, void *data)
@@ -167,6 +168,12 @@ static int toolstack_save_cb(uint32_t domid, uint8_t **buf,
     assert(toolstack_save_fd > 0);
+    /* This is a hack for remus */
+    if (helper_save_callbacks.checkpoint) {
+        r = lseek(toolstack_save_fd, 0, SEEK_SET);
+        if (r) fail(errno,"rewind toolstack data tmpfile");
+    }
     *buf = xmalloc(toolstack_save_len);
     r = read_exactly(toolstack_save_fd, *buf, toolstack_save_len);
     if (r<0) fail(errno,"read toolstack data");
@@ -191,7 +198,6 @@ static void complete(int retval) {
-static struct save_callbacks helper_save_callbacks;
 static struct restore_callbacks helper_restore_callbacks;
 int main(int argc, char **argv)

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.