[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxc: restore: reset I/O fd to flags to back to state caller passed us
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1283883181 -3600 # Node ID 7fddb93779f78afb010f5f8f46c0d74c0be80824 # Parent a936b806eae10f53a3ca59cd5a62b5ce2b201e7a libxc: restore: reset I/O fd to flags to back to state caller passed us In particular this causes us to turn O_NONBLOCK back off if we set it. The caller may continue to use the fd for it's own protocol needs and may not be prepared to have it become non-blocking. This probably only effects Remus now after my previous patch to signal the last checkpoint, since a regular migration will no longer set the fd non-blocking. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Acked-by: Brendan Cully <brendan@xxxxxxxxx> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libxc/xc_domain_restore.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff -r a936b806eae1 -r 7fddb93779f7 tools/libxc/xc_domain_restore.c --- a/tools/libxc/xc_domain_restore.c Tue Sep 07 19:08:11 2010 +0100 +++ b/tools/libxc/xc_domain_restore.c Tue Sep 07 19:13:01 2010 +0100 @@ -1094,6 +1094,8 @@ int xc_domain_restore(xc_interface *xch, void* vcpup; uint64_t console_pfn = 0; + int orig_io_fd_flags; + static struct restore_ctx _ctx = { .live_p2m = NULL, .p2m = NULL, @@ -1110,6 +1112,11 @@ int xc_domain_restore(xc_interface *xch, if ( superpages ) return 1; + + if ( (orig_io_fd_flags = fcntl(io_fd, F_GETFL, 0)) < 0 ) { + PERROR("unable to read IO FD flags"); + goto out; + } if ( read_exact(io_fd, &dinfo->p2m_size, sizeof(unsigned long)) ) { @@ -1294,7 +1301,6 @@ int xc_domain_restore(xc_interface *xch, // DPRINTF("Received all pages (%d races)\n", nraces); if ( !ctx->completed ) { - int flags = 0; if ( buffer_tail(xch, ctx, &tailbuf, io_fd, max_vcpu_id, vcpumap, ext_vcpucontext) < 0 ) { @@ -1308,11 +1314,7 @@ int xc_domain_restore(xc_interface *xch, * nonblocking mode for the remainder. */ if ( !ctx->last_checkpoint ) - { - if ( (flags = fcntl(io_fd, F_GETFL,0)) < 0 ) - flags = 0; - fcntl(io_fd, F_SETFL, flags | O_NONBLOCK); - } + fcntl(io_fd, F_SETFL, orig_io_fd_flags | O_NONBLOCK); } if ( ctx->last_checkpoint ) @@ -1805,8 +1807,10 @@ int xc_domain_restore(xc_interface *xch, /* discard cache for save file */ discard_file_cache(xch, io_fd, 1 /*flush*/); + fcntl(io_fd, F_SETFL, orig_io_fd_flags); + DPRINTF("Restore exit with rc=%d\n", rc); - + return rc; } /* _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |