|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-devel
[Xen-devel] [PATCH] Propagate kernel errors in libxc
 
When the hypervisor returns and error through the kernel
or when simply when the kernel returns an error, the ioctl()
call in userspace returns -1 with the error value in errno.
This lib_xc was dropping this useful errno value by only
returning the -1.  This change continues to propagate the
-errno value up the call chain.
The impetus for this change was xc_domain_getinfo() previously
it was not possible to distinguish the difference between an
error and the domainID (or greater) not existing in the hypervisor.
Now callers can compare the return value against -ESRCH to distinguish
the difference between errors and the domain not existing.
Signed-off-by: Josh Nicholas <jnicholas@xxxxxxxxxxxxxxx>
Signed-off-by: Ben Guthro <bguthro@xxxxxxxxxxxxxxx>
 
 |  
 diff -r fcd625c4f896 tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c    Mon Nov 05 10:39:07 2007 -0500
+++ b/tools/libxc/xc_linux.c    Mon Nov 05 10:39:07 2007 -0500
@@ -153,7 +153,12 @@ int xc_map_foreign_ranges(int xc_handle,
 
 static int do_privcmd(int xc_handle, unsigned int cmd, unsigned long data)
 {
-    return ioctl(xc_handle, cmd, data);
+    int ret = ioctl(xc_handle, cmd, data);
+       if (ret >= 0)
+               return ret;
+       if (errno) // kernel errors are passed through errno with ioctl() ret 
== -1
+               return (errno > 0) ? -errno : errno;
+       return ret;
 }
 
 int do_xen_hypercall(int xc_handle, privcmd_hypercall_t *hypercall)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 
 |   
 
| <Prev in Thread] | 
Current Thread | 
[Next in Thread> |  
- [Xen-devel] [PATCH] Propagate kernel errors in libxc,
Ben Guthro <=
  
 |  
  
 | 
    | 
  
  
    |   | 
    |