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

[Xen-devel] [PATCH RFC 7/9] libxl: introduce specific error codes in libxl_device_disk_add



Signed-off-by: Rob Hoes <rob.hoes@xxxxxxxxxx>
---
 tools/libxl/libxl.c         | 21 ++++++++++++++-------
 tools/libxl/libxl_types.idl | 13 +++++++++++++
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index f622981..2f56c6e 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2008,9 +2008,16 @@ static int libxl__device_nextid(libxl__gc *gc, uint32_t 
domid, char *device)
 static int libxl__resolve_domid(libxl__gc *gc, const char *name,
                                 uint32_t *domid)
 {
+    int rc;
     if (!name)
         return 0;
-    return libxl_domain_qualifier_to_domid(CTX, name, domid);
+
+    rc = libxl_domain_qualifier_to_domid(CTX, name, domid);
+
+    if (rc < 0)
+        return ERROR_DOMAIN_NOTFOUND;
+    else
+        return rc;
 }
 
 
/******************************************************************************/
@@ -2326,7 +2333,7 @@ int libxl__device_from_disk(libxl__gc *gc, uint32_t domid,
     if (devid==-1) {
         LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Invalid or unsupported"
                " virtual disk identifier %s", disk->vdev);
-        return ERROR_INVAL;
+        return ERROR_INVAL_DISK_VDEV;
     }
 
     device->backend_domid = disk->backend_domid;
@@ -2345,7 +2352,7 @@ int libxl__device_from_disk(libxl__gc *gc, uint32_t domid,
         default:
             LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend type: 
%d\n",
                        disk->backend);
-            return ERROR_INVAL;
+            return ERROR_INVAL_DISK_BACKEND;
     }
 
     device->domid = domid;
@@ -2391,7 +2398,7 @@ static void device_disk_add(libxl__egc *egc, uint32_t 
domid,
 
     libxl_domain_type type = libxl__domain_type(gc, domid);
     if (type == LIBXL_DOMAIN_TYPE_INVALID) {
-        rc = ERROR_FAIL;
+        rc = ERROR_INVAL_DOMAIN_TYPE;
         goto out;
     }
 
@@ -2423,7 +2430,7 @@ static void device_disk_add(libxl__egc *egc, uint32_t 
domid,
             assert(get_vdev_user);
             disk->vdev = get_vdev(gc, get_vdev_user, t);
             if (disk->vdev == NULL) {
-                rc = ERROR_FAIL;
+                rc = ERROR_DISK_VDEV_UNDETERMINED;
                 goto out;
             }
         }
@@ -2488,7 +2495,7 @@ static void device_disk_add(libxl__egc *egc, uint32_t 
domid,
                     if (!dev) {
                         LOG(ERROR, "failed to get blktap devpath for %p\n",
                             disk->pdev_path);
-                        rc = ERROR_FAIL;
+                        rc = ERROR_DISK_PDEV_NOT_FOUND;
                         goto out;
                     }
                 }
@@ -2511,7 +2518,7 @@ static void device_disk_add(libxl__egc *egc, uint32_t 
domid,
                 break;
             default:
                 LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend 
type: %d\n", disk->backend);
-                rc = ERROR_INVAL;
+                rc = ERROR_INVAL_DISK_BACKEND;
                 goto out;
         }
 
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 3c44b41..15e4af2 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -125,6 +125,19 @@ libxl_error = Enumeration("error", [
     
     # Unable to initialise device connection watch
     (ENUM_PREV, "DEVICE_WAIT_INIT"),
+    
+    # Domain type invalid
+    (ENUM_PREV, "INVAL_DOMAIN_TYPE"),
+    
+    # Disk parameters invalid
+    (ENUM_PREV, "INVAL_DISK_VDEV"),
+    (ENUM_PREV, "INVAL_DISK_BACKEND"),
+    
+    # Disk parameters could not be determined
+    (ENUM_PREV, "DISK_VDEV_UNDETERMINED"),
+    
+    # Physical disk device could not be found
+    (ENUM_PREV, "DISK_PDEV_NOT_FOUND"),
     ], value_namespace = "")
 
 libxl_domain_type = Enumeration("domain_type", [
-- 
2.4.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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