 
	
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch v2 2/3] correct xc_domain_save()'s return value
 Wen Congyang writes ("[Patch v2 2/3] correct xc_domain_save()'s return value"):
> If suspend_and_state() fails, the errno may be 0. But we assume
> that the errno is not 0. So remove assert().
Thanks for spotting this.
I think this is going in the wrong direction.  Perhaps we could
instead do something like the patch below ?  Please let me know what
you think.
If you think this is a better idea, please submit it as a proper patch
with a proper commit message.
(Ideally we would fix the actual suspend hook in libxl, to always set
errno, but that's too invasive a set of changes to do now, I think.)
Thanks,
Ian.
Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
diff --git a/tools/libxc/include/xenguest.h b/tools/libxc/include/xenguest.h
index 40bbac8..3ab9dd8 100644
--- a/tools/libxc/include/xenguest.h
+++ b/tools/libxc/include/xenguest.h
@@ -35,7 +35,9 @@
 /* callbacks provided by xc_domain_save */
 struct save_callbacks {
     /* Called after expiration of checkpoint interval,
-     * to suspend the guest.
+     * to suspend the guest.  Returns 1 for success, or 0 for failure.
+     * On failure it should ideally set errno.  (If it leaves errno
+     * as 0, EIO will be used instead.)
      */
     int (*suspend)(void* data);
 
diff --git a/tools/libxc/xc_domain_save.c b/tools/libxc/xc_domain_save.c
index 254fdb3..444aac6 100644
--- a/tools/libxc/xc_domain_save.c
+++ b/tools/libxc/xc_domain_save.c
@@ -361,9 +361,15 @@ static int suspend_and_state(int (*suspend)(void*), void* 
data,
                              xc_interface *xch, int io_fd, int dom,
                              xc_dominfo_t *info)
 {
+    errno = 0;
     if ( !(*suspend)(data) )
     {
-        ERROR("Suspend request failed");
+        if (!errno) {
+            errno = EIO;
+            ERROR("Suspend request failed (without errno, using EINVAL)");
+        } else {
+            ERROR("Suspend request failed");
+        }
         return -1;
     }
 
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
 
 | 
|  | Lists.xenproject.org is hosted with RackSpace, monitoring our |