WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 1/9] libxl: disks: Make LIBXL_DISK_BACKEND_UNKNOW

Ian Campbell writes ("Re: [Xen-devel] [PATCH 1/9] libxl: disks: Make 
LIBXL_DISK_BACKEND_UNKNOWN work"):
> I think this should be treated the same as you did above, by adding an
> explicit fallback before the switch statement, for clarity.

OK.  This results in two copies of the same comment.  Really we should
have a common function for figuring out the correct backend, but this
at least makes things no worse.

Ian.


commit ee4720b0f9b15be152b10656b9b3e13b83be6c55
Author: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Date:   Fri May 6 09:02:02 2011 +0100

    libxl: disks: Make LIBXL_DISK_BACKEND_UNKNOWN work
    
    libxl callers should not be required to specify the backend if they
    don't want to.  So LIBXL_DISK_BACKEND_UNKNOWN should instruct libxl to
    choose the backend for itself.
    
    For now, we do this by simply treating it the same as BACKEND_TAP,
    which itself falls back to other methods.
    
    More thorough fixes for the disk handling will follow.
    
    Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index c21cfe7..a36de58 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -991,6 +991,21 @@ int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid, 
libxl_device_disk *dis
     device.domid = domid;
     device.kind = DEVICE_VBD;
 
+
+    /*
+     * Fixing the incoming backend type to try to decide on which
+     * backend to use.  Unfortunately at the moment this code is
+     * utterly broken, but it more or less works.
+     */
+
+    /*
+     * Backend type UNKNOWN should mean "caller does not want to specify",
+     * not "break pointlessely".  (Callers should not be required to
+     * specify the backend if they don't want to.)
+     */
+    if (disk->backend == LIBXL_DISK_BACKEND_UNKNOWN)
+        disk->backend = LIBXL_DISK_BACKEND_TAP;
+
     /* If blktap is not available then fallback to qdisk */
     if (disk->backend == LIBXL_DISK_BACKEND_TAP && !libxl__blktap_enabled(&gc))
         disk->backend = LIBXL_DISK_BACKEND_QDISK;
@@ -1126,6 +1141,20 @@ char * libxl_device_disk_local_attach(libxl_ctx *ctx, 
libxl_device_disk *disk)
     char *dev = NULL;
     char *ret = NULL;
 
+    /*
+     * Fixing the incoming backend type to try to decide on which
+     * backend to use.  Unfortunately at the moment this code is
+     * utterly broken, but it more or less works.
+     */
+
+    /*
+     * Backend type UNKNOWN should mean "caller does not want to specify",
+     * not "break pointlessely".  (Callers should not be required to
+     * specify the backend if they don't want to.)
+     */
+    if (disk->backend == LIBXL_DISK_BACKEND_UNKNOWN)
+        disk->backend = LIBXL_DISK_BACKEND_TAP;
+
     switch (disk->backend) {
         case LIBXL_DISK_BACKEND_PHY:
             if (disk->format != LIBXL_DISK_FORMAT_RAW) {
@@ -1175,7 +1204,6 @@ char * libxl_device_disk_local_attach(libxl_ctx *ctx, 
libxl_device_disk *disk)
                 disk->pdev_path);
             dev = disk->pdev_path;
             break;
-        case LIBXL_DISK_BACKEND_UNKNOWN:
         default:
             LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend "
                 "type: %d", disk->backend);

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel