Ian Campbell
2010-Sep-03 16:07 UTC
[Xen-devel] [PATCH] libxc: restore: reset I/O fd to flags to back to state caller passed us
# HG changeset patch
# User Ian Campbell <ian.campbell@citrix.com>
# Date 1283530025 -3600
# Node ID f23b8e767b18bbeb867ec18e3db9bf8639da40b0
# Parent 35cc5da0dd970c885fafaaf05bb3c1594dc68020
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@citrix.com>
diff -r 35cc5da0dd97 -r f23b8e767b18 tools/libxc/xc_domain_restore.c
--- a/tools/libxc/xc_domain_restore.c Fri Sep 03 16:53:12 2010 +0100
+++ b/tools/libxc/xc_domain_restore.c Fri Sep 03 17:07:05 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-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Ian Jackson
2010-Sep-03 17:54 UTC
[Xen-devel] [PATCH] libxc: restore: reset I/O fd to flags to back to state caller passed us
Ian Campbell writes ("[Xen-devel] [PATCH] libxc: restore: reset I/O fd to
flags to back to state caller passed us"):> 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.
This looks very sensible but I''ll wait for Brendan.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Brendan Cully
2010-Sep-03 18:30 UTC
Re: [Xen-devel] [PATCH] libxc: restore: reset I/O fd to flags to back to state caller passed us
On Friday, 03 September 2010 at 17:07, Ian Campbell wrote:> # HG changeset patch > # User Ian Campbell <ian.campbell@citrix.com> > # Date 1283530025 -3600 > # Node ID f23b8e767b18bbeb867ec18e3db9bf8639da40b0 > # Parent 35cc5da0dd970c885fafaaf05bb3c1594dc68020 > 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.Although I don''t think this currently does anything useful, it seems harmless. I''m applying and testing this and patch 3 of your previous series now. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Brendan Cully
2010-Sep-03 19:59 UTC
Re: [Xen-devel] [PATCH] libxc: restore: reset I/O fd to flags to back to state caller passed us
On Friday, 03 September 2010 at 17:07, Ian Campbell wrote:> # HG changeset patch > # User Ian Campbell <ian.campbell@citrix.com> > # Date 1283530025 -3600 > # Node ID f23b8e767b18bbeb867ec18e3db9bf8639da40b0 > # Parent 35cc5da0dd970c885fafaaf05bb3c1594dc68020 > 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@citrix.com>It doesn''t appear to break Remus. Acked-by: Brendan Cully <brendan@cs.ubc.ca> _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Jackson
2010-Sep-07 18:07 UTC
[Xen-devel] [PATCH] libxc: restore: reset I/O fd to flags to back to state caller passed us
Ian Campbell writes ("[Xen-devel] [PATCH] libxc: restore: reset I/O fd to
flags to back to state caller passed us"):> 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.
This one doesn''t apply any more. This hunk:
> - {
> - 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);
seems to have become stale. Have I applied these in the wrong order
or something ?
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Ian Jackson
2010-Sep-07 18:12 UTC
[Xen-devel] [PATCH] libxc: restore: reset I/O fd to flags to back to state caller passed us
I wrote:> This one doesn''t apply any more. This hunk:...> seems to have become stale. Have I applied these in the wrong order > or something ?Oh, I see, it needs to be on top of your other save/restore patch. Never mind, I''ve applied both now. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Campbell
2010-Sep-07 18:37 UTC
Re: [Xen-devel] [PATCH] libxc: restore: reset I/O fd to flags to back to state caller passed us
On Tue, 2010-09-07 at 19:12 +0100, Ian Jackson wrote:> I wrote: > > This one doesn''t apply any more. This hunk: > ... > > seems to have become stale. Have I applied these in the wrong order > > or something ? > > Oh, I see, it needs to be on top of your other save/restore patch. > Never mind, I''ve applied both now.Thanks, I''ll do a sweep through of my patch queue tomorrow to see if anything got missed, some of these patches were a bit scattershot as I noticed things. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel