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

Re: [xen-devel][PATCH 2/5] Xl interface change plus changes to code it impacts


  • To: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
  • From: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxx>
  • Date: Fri, 11 Feb 2011 10:19:04 -0500
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Fri, 11 Feb 2011 07:20:02 -0800
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type; b=K+RwkzL5e/77GGZF9/gclDTwC1e/qaGAwOurpIZgzK4FkTRWnCNRpHemr82QaxTmIT vRa9F/kpcul/ZJ2R8f/uuXA9nGZ+oMEEYorrMQM1cermCSTlQbB92H5X5mGuLuvnZz/8 nWh9dobBAOtNoRGGcXyj6gkzG34hNv8oBWzJw=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Stefano Stabellini wrote:
> On Thu, 10 Feb 2011, Kamala Narasimhan wrote:
>> Stefano - This includes a fix for empty cdrom case issue you found while 
>> testing.
>>
>> Description:
>>
>> This patch refactors xl disk specific interface to separate disk format and 
>> backend types, rename some variables, changes code that is impacted by this 
>> interface change.
>>
> 
> you need to update the ocaml bindings, otherwise the patch will cause
> build problems:
> 
> make[7]: Entering directory 
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs/xl'
>  CC       xl_stubs.o
> xl_stubs.c: In function 'device_disk_val':
> xl_stubs.c:195: error: 'libxl_device_disk' has no member named 'physpath'
> xl_stubs.c:196: error: 'libxl_device_disk' has no member named 'phystype'
> xl_stubs.c:196: error: 'PHYSTYPE_QCOW' undeclared (first use in this function)
> xl_stubs.c:196: error: (Each undeclared identifier is reported only once
> xl_stubs.c:196: error: for each function it appears in.)
> xl_stubs.c:197: error: 'libxl_device_disk' has no member named 'virtpath'
> make[7]: *** [xl_stubs.o] Error 1
> make[7]: Leaving directory 
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs/xl'
> make[6]: *** [subdir-install-xl] Error 2
> make[6]: Leaving directory 
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs'
> make[5]: *** [subdirs-install] Error 2
> make[5]: Leaving directory 
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs'
> make[4]: *** [subdir-install-libs] Error 2
> make[4]: Leaving directory 
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml'
> make[3]: *** [subdirs-install] Error 2
> make[3]: Leaving directory 
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml'
> make[2]: *** [subdir-install-ocaml] Error 2
> make[2]: Leaving directory `/local/scratch/sstabellini/xen-unstable.hg/tools'
> make[1]: *** [subdirs-install] Error 2
> make[1]: Leaving directory `/local/scratch/sstabellini/xen-unstable.hg/tools'
> make: *** [install-tools] Error 2
> 
> 
> apart from this it looks OK to me.

Stefano - Here is a revised patch that fixes the ocaml bindings build issues.  
While I confirmed that the build now works, I wouldn't even know where to start 
when it comes to testing it!

Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>

Kamala
diff -r 1967c7c290eb tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl.c       Fri Feb 11 10:08:40 2011 -0500
@@ -588,7 +588,7 @@ int libxl_wait_for_disk_ejects(libxl_ctx
     for (i = 0; i < num_disks; i++) {
         if (asprintf(&(waiter[i].path), "%s/device/vbd/%d/eject",
                      libxl__xs_get_dompath(&gc, domid),
-                     libxl__device_disk_dev_number(disks[i].virtpath)) < 0)
+                     libxl__device_disk_dev_number(disks[i].vdev)) < 0)
             goto out;
         if (asprintf(&(waiter[i].token), "%d", LIBXL_EVENT_DISK_EJECT) < 0)
             goto out;
@@ -668,10 +668,10 @@ int libxl_event_get_disk_eject_info(libx
 
     disk->backend_domid = 0;
     disk->domid = domid;
-    disk->physpath = strdup("");
-    disk->phystype = PHYSTYPE_EMPTY;
+    disk->pdev_path = strdup("");
+    disk->format = DISK_FORMAT_EMPTY;
     /* this value is returned to the user: do not free right away */
-    disk->virtpath = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
"%s/dev", backend));
+    disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev", 
backend));
     disk->unpluggable = 1;
     disk->readwrite = 0;
     disk->is_cdrom = 1;
@@ -863,24 +863,25 @@ int libxl_vncviewer_exec(libxl_ctx *ctx,
 
 
/******************************************************************************/
 
-static int validate_virtual_disk(libxl_ctx *ctx, char *file_name, 
libxl_disk_phystype disk_type)
+static int validate_virtual_disk(libxl_ctx *ctx, char *file_name, 
+    libxl_disk_backend backend_type, libxl_disk_format format)
 {
     struct stat stat_buf;
 
-    if ( (file_name[0] == '\0') && (disk_type == PHYSTYPE_EMPTY) )
+    if ((file_name[0] == '\0') && (format == DISK_FORMAT_EMPTY))
         return 0;
 
-    if ( stat(file_name, &stat_buf) != 0 ) {
+    if (stat(file_name, &stat_buf) != 0) {
         LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s", 
file_name);
         return ERROR_INVAL;
     }
-    if ( disk_type == PHYSTYPE_PHY ) {
+    if (backend_type == DISK_BACKEND_PHY) {
         if ( !(S_ISBLK(stat_buf.st_mode)) ) {
             LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s is not a block 
device!\n",
                 file_name);
             return ERROR_INVAL;
         }
-    } else if ( S_ISREG(stat_buf.st_mode) && stat_buf.st_size == 0 ) {
+    } else if (S_ISREG(stat_buf.st_mode) && stat_buf.st_size == 0) {
         LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s size is 0!\n", 
file_name);
         return ERROR_INVAL;
     }
@@ -898,7 +899,8 @@ int libxl_device_disk_add(libxl_ctx *ctx
     libxl__device device;
     int major, minor, rc;
 
-    rc = validate_virtual_disk(ctx, disk->physpath, disk->phystype);
+    rc = validate_virtual_disk(ctx, disk->pdev_path, disk->backend, 
+             disk->format);
     if (rc)
         return rc;
 
@@ -913,11 +915,11 @@ int libxl_device_disk_add(libxl_ctx *ctx
         goto out_free;
     }
 
-    backend_type = libxl__device_disk_backend_type_of_phystype(disk->phystype);
-    devid = libxl__device_disk_dev_number(disk->virtpath);
+    backend_type = libxl__device_disk_string_of_backend(disk->backend);
+    devid = libxl__device_disk_dev_number(disk->vdev);
     if (devid==-1) {
         LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Invalid or unsupported"
-               " virtual disk identifier %s", disk->virtpath);
+               " virtual disk identifier %s", disk->vdev);
         rc = ERROR_INVAL;
         goto out_free;
     }
@@ -928,37 +930,33 @@ int libxl_device_disk_add(libxl_ctx *ctx
     device.domid = disk->domid;
     device.kind = DEVICE_VBD;
 
-    switch (disk->phystype) {
-        case PHYSTYPE_PHY: {
-
-            libxl__device_physdisk_major_minor(disk->physpath, &major, &minor);
+    switch (disk->backend) {
+        case DISK_BACKEND_PHY: {
+            libxl__device_physdisk_major_minor(disk->pdev_path, &major, 
&minor);
             flexarray_append(back, "physical-device");
             flexarray_append(back, libxl__sprintf(&gc, "%x:%x", major, minor));
 
             flexarray_append(back, "params");
-            flexarray_append(back, disk->physpath);
+            flexarray_append(back, disk->pdev_path);
 
             device.backend_kind = DEVICE_VBD;
             break;
         }
-        case PHYSTYPE_EMPTY:
-            break;
-        case PHYSTYPE_FILE:
-            /* let's pretend is tap:aio for the moment */
-            disk->phystype = PHYSTYPE_AIO;
-        case PHYSTYPE_AIO:
-        case PHYSTYPE_QCOW:
-        case PHYSTYPE_QCOW2:
-        case PHYSTYPE_VHD:
+        case DISK_BACKEND_TAP:
+        case DISK_BACKEND_QDISK: {
+            if (disk->format == DISK_FORMAT_EMPTY)
+                break;
             if (libxl__blktap_enabled(&gc)) {
                 const char *dev = libxl__blktap_devpath(&gc,
-                                               disk->physpath, disk->phystype);
+                                               disk->pdev_path, disk->format);
                 if (!dev) {
                     rc = ERROR_FAIL;
                     goto out_free;
                 }
                 flexarray_append(back, "tapdisk-params");
-                flexarray_append(back, libxl__sprintf(&gc, "%s:%s", 
libxl__device_disk_string_of_phystype(disk->phystype), disk->physpath));
+                flexarray_append(back, libxl__sprintf(&gc, "%s:%s", 
+                    libxl__device_disk_string_of_format(disk->format), 
+                    disk->pdev_path));
                 flexarray_append(back, "params");
                 flexarray_append(back, libxl__strdup(&gc, dev));
                 backend_type = "phy";
@@ -971,16 +969,17 @@ int libxl_device_disk_add(libxl_ctx *ctx
             }
             flexarray_append(back, "params");
             flexarray_append(back, libxl__sprintf(&gc, "%s:%s",
-                          
libxl__device_disk_string_of_phystype(disk->phystype), disk->physpath));
+                          libxl__device_disk_string_of_format(disk->format), 
disk->pdev_path));
 
-            if (libxl__blktap_enabled(&gc))
+            if (libxl__blktap_enabled(&gc) && 
+                 disk->format != DISK_BACKEND_QDISK)
                 device.backend_kind = DEVICE_TAP;
             else
                 device.backend_kind = DEVICE_QDISK;
             break;
-
+        }
         default:
-            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk physical 
type: %d\n", disk->phystype);
+            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend type: 
%d\n", disk->backend);
             rc = ERROR_INVAL;
             goto out_free;
     }
@@ -996,7 +995,7 @@ int libxl_device_disk_add(libxl_ctx *ctx
     flexarray_append(back, "state");
     flexarray_append(back, libxl__sprintf(&gc, "%d", 1));
     flexarray_append(back, "dev");
-    flexarray_append(back, disk->virtpath);
+    flexarray_append(back, disk->vdev);
     flexarray_append(back, "type");
     flexarray_append(back, backend_type);
     flexarray_append(back, "mode");
@@ -1036,11 +1035,11 @@ int libxl_device_disk_del(libxl_ctx *ctx
     libxl__device device;
     int devid;
 
-    devid = libxl__device_disk_dev_number(disk->virtpath);
+    devid = libxl__device_disk_dev_number(disk->vdev);
     device.backend_domid    = disk->backend_domid;
     device.backend_devid    = devid;
     device.backend_kind     = 
-        (disk->phystype == PHYSTYPE_PHY) ? DEVICE_VBD : DEVICE_TAP;
+        (disk->backend == DISK_BACKEND_PHY) ? DEVICE_VBD : DEVICE_TAP;
     device.domid            = disk->domid;
     device.devid            = devid;
     device.kind             = DEVICE_VBD;
@@ -1052,36 +1051,67 @@ char * libxl_device_disk_local_attach(li
     libxl__gc gc = LIBXL_INIT_GC(ctx);
     const char *dev = NULL;
     char *ret = NULL;
-    int phystype = disk->phystype;
-    switch (phystype) {
-        case PHYSTYPE_PHY: {
-            fprintf(stderr, "attaching PHY disk %s to domain 0\n", 
disk->physpath);
-            dev = disk->physpath;
+
+    switch (disk->backend) {
+        case DISK_BACKEND_PHY: {
+            if (disk->format != DISK_FORMAT_RAW) {
+                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "physical block device must"
+                    " be raw");
+                break;
+            }
+            LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "attaching PHY disk %s to domain 
0",
+                disk->pdev_path);
+            dev = disk->pdev_path;
             break;
         }
-        case PHYSTYPE_FILE:
-            /* let's pretend is tap:aio for the moment */
-            phystype = PHYSTYPE_AIO;
-        case PHYSTYPE_AIO:
-            if (!libxl__blktap_enabled(&gc)) {
-                dev = disk->physpath;
+        case DISK_BACKEND_TAP: {
+            if (disk->format == DISK_FORMAT_VHD || disk->format == 
DISK_FORMAT_RAW)
+            {
+                if (libxl__blktap_enabled(&gc))
+                    dev = libxl__blktap_devpath(&gc, disk->pdev_path, 
disk->format);
+                else {
+                    if (disk->format != DISK_FORMAT_RAW) {
+                        LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "tapdisk2 is 
required"
+                            " to open a vhd disk");
+                        break;
+                    } else {
+                        LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "attaching tap disk 
%s to domain 0",
+                            disk->pdev_path);
+                        dev = disk->pdev_path;
+                        break;
+                    }
+                }
+                break;
+            } else if (disk->format == DISK_FORMAT_QCOW ||
+                       disk->format == DISK_FORMAT_QCOW2) {
+                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a 
qcow or qcow2 disk image");
+                break;
+            } else {
+                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend "
+                    "type: %d", disk->backend);
                 break;
             }
-        case PHYSTYPE_VHD:
-            if (libxl__blktap_enabled(&gc))
-                dev = libxl__blktap_devpath(&gc, disk->physpath, phystype);
-            else
-                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "tapdisk2 is required to 
open a vhd disk\n");
-            break;
-        case PHYSTYPE_QCOW:
-        case PHYSTYPE_QCOW2:
-            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a qcow or 
qcow2 disk image\n");
+        }
+        case DISK_BACKEND_QDISK: {
+            if (disk->format != DISK_FORMAT_RAW) {
+                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a 
qdisk "
+                    "image if the format is not raw");
+                break;
+            }
+            LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "attaching qdisk %s to domain 
0\n",
+                disk->pdev_path);
+            dev = disk->pdev_path;
             break;
 
-        default:
-            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk physical 
type: %d\n", phystype);
+        }
+        case DISK_BACKEND_UNKNOWN:
+        default: {
+            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend "
+                "type: %d", disk->backend);
             break;
+        }
     }
+
     if (dev != NULL)
         ret = strdup(dev);
     libxl__free_all(&gc);
@@ -1677,13 +1707,15 @@ static unsigned int libxl_append_disk_li
             pdisk->domid = domid;
             physpath_tmp = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, 
"%s/%s/params", be_path, *dir), &len);
             if (physpath_tmp && strchr(physpath_tmp, ':')) {
-                pdisk->physpath = strdup(strchr(physpath_tmp, ':') + 1);
+                pdisk->pdev_path = strdup(strchr(physpath_tmp, ':') + 1);
                 free(physpath_tmp);
             } else {
-                pdisk->physpath = physpath_tmp;
+                pdisk->pdev_path = physpath_tmp;
             }
-            libxl_string_to_phystype(ctx, libxl__xs_read(&gc, XBT_NULL, 
libxl__sprintf(&gc, "%s/%s/type", be_path, *dir)), &(pdisk->phystype));
-            pdisk->virtpath = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, 
"%s/%s/dev", be_path, *dir), &len);
+            libxl_string_to_backend(ctx, libxl__xs_read(&gc, XBT_NULL, 
+                libxl__sprintf(&gc, "%s/%s/type", be_path, *dir)), 
+                &(pdisk->backend));
+            pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, 
"%s/%s/dev", be_path, *dir), &len);
             pdisk->unpluggable = atoi(libxl__xs_read(&gc, XBT_NULL, 
libxl__sprintf(&gc, "%s/%s/removable", be_path, *dir)));
             if (!strcmp(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
"%s/%s/mode", be_path, *dir)), "w"))
                 pdisk->readwrite = 1;
@@ -1718,7 +1750,7 @@ int libxl_device_disk_getinfo(libxl_ctx 
     char *val;
 
     dompath = libxl__xs_get_dompath(&gc, domid);
-    diskinfo->devid = libxl__device_disk_dev_number(disk->virtpath);
+    diskinfo->devid = libxl__device_disk_dev_number(disk->vdev);
 
     /* tap devices entries in xenstore are written as vbd devices. */
     diskpath = libxl__sprintf(&gc, "%s/device/vbd/%d", dompath, 
diskinfo->devid);
@@ -1752,13 +1784,13 @@ int libxl_cdrom_insert(libxl_ctx *ctx, u
     libxl_device_disk *disks;
     int ret = ERROR_FAIL;
 
-    if (!disk->physpath) {
-        disk->physpath = strdup("");
-        disk->phystype = PHYSTYPE_EMPTY;
+    if (!disk->pdev_path) {
+        disk->pdev_path = strdup("");
+        disk->format = DISK_FORMAT_EMPTY;
     }
     disks = libxl_device_disk_list(ctx, domid, &num);
     for (i = 0; i < num; i++) {
-        if (disks[i].is_cdrom && !strcmp(disk->virtpath, disks[i].virtpath))
+        if (disks[i].is_cdrom && !strcmp(disk->vdev, disks[i].vdev))
             /* found */
             break;
     }
diff -r 1967c7c290eb tools/libxl/libxl.h
--- a/tools/libxl/libxl.h       Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl.h       Fri Feb 11 10:08:40 2011 -0500
@@ -172,14 +172,20 @@ typedef enum {
 } libxl_console_consback;
 
 typedef enum {
-    PHYSTYPE_QCOW = 1,
-    PHYSTYPE_QCOW2,
-    PHYSTYPE_VHD,
-    PHYSTYPE_AIO,
-    PHYSTYPE_FILE,
-    PHYSTYPE_PHY,
-    PHYSTYPE_EMPTY,
-} libxl_disk_phystype;
+    DISK_FORMAT_UNKNOWN = 0,
+    DISK_FORMAT_QCOW,
+    DISK_FORMAT_QCOW2,
+    DISK_FORMAT_VHD,
+    DISK_FORMAT_RAW,
+    DISK_FORMAT_EMPTY,
+} libxl_disk_format;
+
+typedef enum {
+    DISK_BACKEND_UNKNOWN = 0,
+    DISK_BACKEND_PHY,
+    DISK_BACKEND_TAP,
+    DISK_BACKEND_QDISK,
+} libxl_disk_backend;
 
 typedef enum {
     NICTYPE_IOEMU = 1,
diff -r 1967c7c290eb tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl     Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl.idl     Fri Feb 11 10:08:40 2011 -0500
@@ -11,7 +11,8 @@ libxl_qemu_machine_type = Number("qemu_m
 libxl_qemu_machine_type = Number("qemu_machine_type", namespace="libxl_")
 libxl_console_consback = Number("console_consback", namespace="libxl_")
 libxl_console_constype = Number("console_constype", namespace="libxl_")
-libxl_disk_phystype = Number("disk_phystype", namespace="libxl_")
+libxl_disk_format = Number("disk_format", namespace="libxl_")
+libxl_disk_backend = Number("disk_backend", namespace="libxl_")
 libxl_nic_type = Number("nic_type", namespace="libxl_")
 libxl_cpuid_policy_list = Builtin("cpuid_policy_list", 
destructor_fn="libxl_cpuid_destroy", passby=PASS_BY_REFERENCE)
 
@@ -203,9 +204,10 @@ libxl_device_disk = Struct("device_disk"
 libxl_device_disk = Struct("device_disk", [
     ("backend_domid", uint32),
     ("domid", domid),
-    ("physpath", string),
-    ("phystype", libxl_disk_phystype),
-    ("virtpath", string),
+    ("pdev_path", string),
+    ("vdev", string),
+    ("backend", libxl_disk_backend),
+    ("format", libxl_disk_format),
     ("unpluggable", integer),
     ("readwrite", integer),
     ("is_cdrom", integer),
diff -r 1967c7c290eb tools/libxl/libxl_blktap2.c
--- a/tools/libxl/libxl_blktap2.c       Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_blktap2.c       Fri Feb 11 10:08:40 2011 -0500
@@ -26,13 +26,13 @@ int libxl__blktap_enabled(libxl__gc *gc)
 
 const char *libxl__blktap_devpath(libxl__gc *gc,
                                  const char *disk,
-                                 libxl_disk_phystype phystype)
+                                 libxl_disk_format format)
 {
     const char *type;
     char *params, *devname = NULL;
     int minor, err;
 
-    type = libxl__device_disk_string_of_phystype(phystype);
+    type = libxl__device_disk_string_of_format(format);
     minor = tap_ctl_find_minor(type, disk);
     if (minor >= 0) {
         devname = libxl__sprintf(gc, "/dev/xen/blktap-2/tapdev%d", minor);
diff -r 1967c7c290eb tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c        Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_device.c        Fri Feb 11 10:08:40 2011 -0500
@@ -121,31 +121,24 @@ out:
     return rc;
 }
 
-char *libxl__device_disk_string_of_phystype(libxl_disk_phystype phystype)
+char *libxl__device_disk_string_of_format(libxl_disk_format format)
 {
-    switch (phystype) {
-        case PHYSTYPE_QCOW: return "qcow";
-        case PHYSTYPE_QCOW2: return "qcow2";
-        case PHYSTYPE_VHD: return "vhd";
-        case PHYSTYPE_AIO: return "aio";
-        case PHYSTYPE_FILE: return "file";
-        case PHYSTYPE_PHY: return "phy";
-        case PHYSTYPE_EMPTY: return "file";
-        default: return NULL;
+    switch (format) {
+        case DISK_FORMAT_QCOW: return "qcow";
+        case DISK_FORMAT_QCOW2: return "qcow2"; 
+        case DISK_FORMAT_VHD: return "vhd"; 
+        case DISK_FORMAT_RAW:
+        case DISK_FORMAT_EMPTY: return "aio"; 
+        default: return NULL; 
     }
 }
 
-char *libxl__device_disk_backend_type_of_phystype(libxl_disk_phystype phystype)
+char *libxl__device_disk_string_of_backend(libxl_disk_backend backend)
 {
-    switch (phystype) {
-        case PHYSTYPE_QCOW: return "tap";
-        case PHYSTYPE_QCOW2: return "tap";
-        case PHYSTYPE_VHD: return "tap";
-        case PHYSTYPE_AIO: return "tap";
-        /* let's pretend file is tap:aio */
-        case PHYSTYPE_FILE: return "tap";
-        case PHYSTYPE_EMPTY: return "tap";
-        case PHYSTYPE_PHY: return "phy";
+    switch (backend) {
+        case DISK_BACKEND_QDISK: return "qdisk";
+        case DISK_BACKEND_TAP: return "tap";
+        case DISK_BACKEND_PHY: return "phy";
         default: return NULL;
     }
 }
diff -r 1967c7c290eb tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c    Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_dm.c    Fri Feb 11 10:08:40 2011 -0500
@@ -316,10 +316,10 @@ static char ** libxl_build_device_model_
         for (i; i < nb; i++) {
             if (disks[i].is_cdrom) {
                 flexarray_append(dm_args, "-cdrom");
-                flexarray_append(dm_args, libxl__strdup(gc, 
disks[i].physpath));
+                flexarray_append(dm_args, libxl__strdup(gc, 
disks[i].pdev_path));
             } else {
-                flexarray_append(dm_args, libxl__sprintf(gc, "-%s", 
disks[i].virtpath));
-                flexarray_append(dm_args, libxl__strdup(gc, 
disks[i].physpath));
+                flexarray_append(dm_args, libxl__sprintf(gc, "-%s", 
disks[i].vdev));
+                flexarray_append(dm_args, libxl__strdup(gc, 
disks[i].pdev_path));
             }
             libxl_device_disk_destroy(&disks[i]);
         }
diff -r 1967c7c290eb tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h      Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_internal.h      Fri Feb 11 10:08:40 2011 -0500
@@ -178,8 +178,8 @@ _hidden void libxl__userdata_destroyall(
 _hidden void libxl__userdata_destroyall(libxl_ctx *ctx, uint32_t domid);
 
 /* from xl_device */
-_hidden char *libxl__device_disk_backend_type_of_phystype(libxl_disk_phystype 
phystype);
-_hidden char *libxl__device_disk_string_of_phystype(libxl_disk_phystype 
phystype);
+_hidden char *libxl__device_disk_string_of_backend(libxl_disk_backend backend);
+_hidden char *libxl__device_disk_string_of_format(libxl_disk_format format);
 
 _hidden int libxl__device_physdisk_major_minor(const char *physpath, int 
*major, int *minor);
 _hidden int libxl__device_disk_dev_number(char *virtpath);
@@ -306,7 +306,7 @@ _hidden int libxl__blktap_enabled(libxl_
  */
 _hidden const char *libxl__blktap_devpath(libxl__gc *gc,
                                  const char *disk,
-                                 libxl_disk_phystype phystype);
+                                 libxl_disk_format format);
 
 _hidden char *libxl__uuid2string(libxl__gc *gc, const libxl_uuid uuid);
 
diff -r 1967c7c290eb tools/libxl/libxl_noblktap2.c
--- a/tools/libxl/libxl_noblktap2.c     Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_noblktap2.c     Fri Feb 11 10:08:40 2011 -0500
@@ -23,7 +23,7 @@ int libxl__blktap_enabled(libxl__gc *gc)
 
 const char *libxl__blktap_devpath(libxl__gc *gc,
                                  const char *disk,
-                                 libxl_disk_phystype phystype)
+                                 libxl_disk_format format)
 {
     return NULL;
 }
diff -r 1967c7c290eb tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_utils.c Fri Feb 11 10:08:40 2011 -0500
@@ -275,15 +275,15 @@ out:
     return rc;
 }
 
-int libxl_string_to_phystype(libxl_ctx *ctx, char *s, libxl_disk_phystype 
*phystype)
+int libxl_string_to_backend(libxl_ctx *ctx, char *s, libxl_disk_backend 
*backend)
 {
     char *p;
     int rc = 0;
 
     if (!strcmp(s, "phy")) {
-        *phystype = PHYSTYPE_PHY;
+        *backend = DISK_BACKEND_PHY;
     } else if (!strcmp(s, "file")) {
-        *phystype = PHYSTYPE_FILE;
+        *backend = DISK_BACKEND_TAP;
     } else if (!strcmp(s, "tap")) {
         p = strchr(s, ':');
         if (!p) {
@@ -291,14 +291,12 @@ int libxl_string_to_phystype(libxl_ctx *
             goto out;
         }
         p++;
-        if (!strcmp(p, "aio")) {
-            *phystype = PHYSTYPE_AIO;
-        } else if (!strcmp(p, "vhd")) {
-            *phystype = PHYSTYPE_VHD;
+        if (!strcmp(p, "vhd")) {
+            *backend = DISK_BACKEND_TAP;
         } else if (!strcmp(p, "qcow")) {
-            *phystype = PHYSTYPE_QCOW;
+            *backend = DISK_BACKEND_QDISK;
         } else if (!strcmp(p, "qcow2")) {
-            *phystype = PHYSTYPE_QCOW2;
+            *backend = DISK_BACKEND_QDISK;
         }
     }
 out:
@@ -553,10 +551,10 @@ int libxl_devid_to_device_disk(libxl_ctx
     disk->backend_domid = strtoul(val, NULL, 10);
     disk->domid = domid;
     be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend", 
diskpath));
-    disk->physpath = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
"%s/params", be_path));
+    disk->pdev_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
"%s/params", be_path));
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", 
be_path));
-    libxl_string_to_phystype(ctx, val, &(disk->phystype));
-    disk->virtpath = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
"%s/dev", be_path));
+    libxl_string_to_backend(ctx, val, &(disk->backend));
+    disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev", 
be_path));
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", 
be_path));
     disk->unpluggable = !strcmp(val, "1");
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/mode", 
be_path));
diff -r 1967c7c290eb tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_utils.h Fri Feb 11 10:08:40 2011 -0500
@@ -29,7 +29,7 @@ int libxl_get_stubdom_id(libxl_ctx *ctx,
 int libxl_get_stubdom_id(libxl_ctx *ctx, int guest_domid);
 int libxl_is_stubdom(libxl_ctx *ctx, uint32_t domid, uint32_t *target_domid);
 int libxl_create_logfile(libxl_ctx *ctx, char *name, char **full_name);
-int libxl_string_to_phystype(libxl_ctx *ctx, char *s, libxl_disk_phystype 
*phystype);
+int libxl_string_to_backend(libxl_ctx *ctx, char *s, libxl_disk_backend 
*backend);
 
 int libxl_read_file_contents(libxl_ctx *ctx, const char *filename,
                              void **data_r, int *datalen_r);
diff -r 1967c7c290eb tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/xl_cmdimpl.c  Fri Feb 11 10:08:40 2011 -0500
@@ -361,9 +361,9 @@ static void printf_info(int domid,
         printf("\t\t(tap\n");
         printf("\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
         printf("\t\t\t(domid %d)\n", d_config->disks[i].domid);
-        printf("\t\t\t(physpath %s)\n", d_config->disks[i].physpath);
-        printf("\t\t\t(phystype %d)\n", d_config->disks[i].phystype);
-        printf("\t\t\t(virtpath %s)\n", d_config->disks[i].virtpath);
+        printf("\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
+        printf("\t\t\t(phystype %d)\n", d_config->disks[i].backend);
+        printf("\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
         printf("\t\t\t(unpluggable %d)\n", d_config->disks[i].unpluggable);
         printf("\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
         printf("\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
@@ -456,15 +456,17 @@ static int parse_disk_config(libxl_devic
     for(tok = p = buf2, end = buf2 + strlen(buf2) + 1; p < end; p++) {
         switch(state){
         case DSTATE_INITIAL:
-            if ( *p == ':' ) {
+            if (*p == ':') {
                 *p = '\0';
-                if ( !strcmp(tok, "phy") ) {
+                if (!strcmp(tok, "phy")) {
                     state = DSTATE_PHYSPATH;
-                    disk->phystype = PHYSTYPE_PHY;
-                }else if ( !strcmp(tok, "file") ) {
+                    disk->format = DISK_FORMAT_RAW;
+                    disk->backend = DISK_BACKEND_PHY;
+                }else if (!strcmp(tok, "file")) {
                     state = DSTATE_PHYSPATH;
-                    disk->phystype = PHYSTYPE_FILE;
-                }else if ( !strcmp(tok, "tap") ) {
+                    disk->format = DISK_FORMAT_RAW;
+                    disk->backend = DISK_BACKEND_TAP;
+                }else if (!strcmp(tok, "tap")) {
                     state = DSTATE_TAP;
                 }else{
                     fprintf(stderr, "Unknown disk type: %s\n", tok);
@@ -473,22 +475,27 @@ static int parse_disk_config(libxl_devic
                 tok = p + 1;
             } else if (*p == ',') {
                 state = DSTATE_VIRTPATH;
-                disk->phystype = PHYSTYPE_EMPTY;
-                disk->physpath = strdup("");
+                disk->format = DISK_FORMAT_EMPTY;
+                disk->backend = DISK_BACKEND_TAP;
+                disk->pdev_path = strdup("");
                 tok = p + 1;
             }
             break;
         case DSTATE_TAP:
             if ( *p == ':' ) {
                 *p = '\0';
-                if ( !strcmp(tok, "aio") ) {
-                    disk->phystype = PHYSTYPE_AIO;
-                }else if ( !strcmp(tok, "vhd") ) {
-                    disk->phystype = PHYSTYPE_VHD;
-                }else if ( !strcmp(tok, "qcow") ) {
-                    disk->phystype = PHYSTYPE_QCOW;
-                }else if ( !strcmp(tok, "qcow2") ) {
-                    disk->phystype = PHYSTYPE_QCOW2;
+                if (!strcmp(tok, "aio")) {
+                    disk->format = DISK_FORMAT_RAW;
+                    disk->backend = DISK_BACKEND_TAP;
+                }else if (!strcmp(tok, "vhd")) {
+                    disk->format = DISK_FORMAT_VHD;
+                    disk->backend = DISK_BACKEND_TAP;
+                }else if (!strcmp(tok, "qcow")) {
+                    disk->format = DISK_FORMAT_QCOW;
+                    disk->backend = DISK_BACKEND_QDISK;
+                }else if (!strcmp(tok, "qcow2")) {
+                    disk->format = DISK_FORMAT_QCOW2;
+                    disk->backend = DISK_BACKEND_QDISK;
                 }else {
                     fprintf(stderr, "Unknown tapdisk type: %s\n", tok);
                     return 0;
@@ -499,17 +506,17 @@ static int parse_disk_config(libxl_devic
             }
             break;
         case DSTATE_PHYSPATH:
-            if ( *p == ',' ) {
+            if (*p == ',') {
                 int ioemu_len;
 
                 *p = '\0';
-                disk->physpath = (*tok) ? strdup(tok) : NULL;
+                disk->pdev_path = (*tok) ? strdup(tok) : NULL;
                 tok = p + 1;
 
                 /* hack for ioemu disk spec */
                 ioemu_len = strlen("ioemu:");
                 state = DSTATE_VIRTPATH;
-                if ( tok + ioemu_len < end &&
+                if (tok + ioemu_len < end &&
                     !strncmp(tok, "ioemu:", ioemu_len)) {
                     tok += ioemu_len;
                     p += ioemu_len;
@@ -517,7 +524,7 @@ static int parse_disk_config(libxl_devic
             }
             break;
         case DSTATE_VIRTPATH:
-            if ( *p == ',' || *p == ':' || *p == '\0' ) {
+            if (*p == ',' || *p == ':' || *p == '\0') {
                 switch(*p) {
                 case ':':
                     state = DSTATE_VIRTTYPE;
@@ -529,17 +536,17 @@ static int parse_disk_config(libxl_devic
                     state = DSTATE_TERMINAL;
                     break;
                 }
-                if ( tok == p )
+                if (tok == p)
                     goto out;
                 *p = '\0';
-                disk->virtpath = (*tok) ? strdup(tok) : NULL;
+                disk->vdev = (*tok) ? strdup(tok) : NULL;
                 tok = p + 1;
             }
             break;
         case DSTATE_VIRTTYPE:
-            if ( *p == ',' || *p == '\0' ) {
+            if (*p == ',' || *p == '\0') {
                 *p = '\0';
-                if ( !strcmp(tok, "cdrom") ) {
+                if (!strcmp(tok, "cdrom")) {
                     disk->is_cdrom = 1;
                     disk->unpluggable = 1;
                 }else{
@@ -551,7 +558,7 @@ static int parse_disk_config(libxl_devic
             }
             break;
         case DSTATE_RW:
-            if ( *p == '\0' ) {
+            if (*p == '\0') {
                 disk->readwrite = (tok[0] == 'w');
                 tok = p + 1;
                 state = DSTATE_TERMINAL;
@@ -563,7 +570,7 @@ static int parse_disk_config(libxl_devic
     }
 
 out:
-    if ( tok != p || state != DSTATE_TERMINAL ) {
+    if (tok != p || state != DSTATE_TERMINAL) {
         fprintf(stderr, "parse error in disk config near '%s'\n", tok);
         return 0;
     }
@@ -1838,25 +1845,25 @@ static void cd_insert(const char *dom, c
         p = strchr(phys, ':');
         if (!p) {
             fprintf(stderr, "No type specified, ");
-            disk.physpath = phys;
+            disk.pdev_path = phys;
             if (!strncmp(phys, "/dev", 4)) {
                 fprintf(stderr, "assuming phy:\n");
-                disk.phystype = PHYSTYPE_PHY;
+                disk.backend = DISK_BACKEND_PHY;
             } else {
                 fprintf(stderr, "assuming file:\n");
-                disk.phystype = PHYSTYPE_FILE;
+                disk.backend = DISK_BACKEND_TAP; 
             }
         } else {
             *p = '\0';
             p++;
-            disk.physpath = p;
-            libxl_string_to_phystype(&ctx, phys, &disk.phystype);
-        }
-    } else {
-            disk.physpath = strdup("");
-            disk.phystype = PHYSTYPE_EMPTY;
-    }
-    disk.virtpath = (char*)virtdev;
+            disk.pdev_path = p;
+            libxl_string_to_backend(&ctx, phys, &disk.backend);
+        }
+    } else {
+            disk.pdev_path = strdup("");
+            disk.format = DISK_FORMAT_EMPTY;
+    }
+    disk.vdev = (char*)virtdev;
     disk.unpluggable = 1;
     disk.readwrite = 0;
     disk.is_cdrom = 1;
@@ -4383,19 +4390,22 @@ int main_blockattach(int argc, char **ar
 
     tok = strtok(argv[optind+1], ":");
     if (!strcmp(tok, "phy")) {
-        disk.phystype = PHYSTYPE_PHY;
+        disk.backend = DISK_BACKEND_PHY;
     } else if (!strcmp(tok, "file")) {
-        disk.phystype = PHYSTYPE_FILE;
+        disk.backend = DISK_BACKEND_TAP;
     } else if (!strcmp(tok, "tap")) {
         tok = strtok(NULL, ":");
         if (!strcmp(tok, "aio")) {
-            disk.phystype = PHYSTYPE_AIO;
+            disk.backend = DISK_BACKEND_TAP;
         } else if (!strcmp(tok, "vhd")) {
-            disk.phystype = PHYSTYPE_VHD;
+            disk.format = DISK_FORMAT_VHD;
+            disk.backend = DISK_BACKEND_TAP;
         } else if (!strcmp(tok, "qcow")) {
-            disk.phystype = PHYSTYPE_QCOW;
+            disk.format = DISK_FORMAT_QCOW;
+            disk.backend = DISK_BACKEND_QDISK;
         } else if (!strcmp(tok, "qcow2")) {
-            disk.phystype = PHYSTYPE_QCOW2;
+            disk.format = DISK_FORMAT_QCOW2;
+            disk.backend = DISK_BACKEND_QDISK;
         } else {
             fprintf(stderr, "Error: `%s' is not a valid disk image.\n", tok);
             return 1;
@@ -4404,12 +4414,12 @@ int main_blockattach(int argc, char **ar
         fprintf(stderr, "Error: `%s' is not a valid block device.\n", tok);
         return 1;
     }
-    disk.physpath = strtok(NULL, "\0");
-    if (!disk.physpath) {
+    disk.pdev_path = strtok(NULL, "\0");
+    if (!disk.pdev_path) {
         fprintf(stderr, "Error: missing path to disk image.\n");
         return 1;
     }
-    disk.virtpath = argv[optind+2];
+    disk.vdev = argv[optind+2];
     disk.unpluggable = 1;
     disk.readwrite = ((argc-optind <= 3) || (argv[optind+3][0] == 'w'));
 
diff -r 1967c7c290eb tools/ocaml/libs/xl/xl_stubs.c
--- a/tools/ocaml/libs/xl/xl_stubs.c    Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/ocaml/libs/xl/xl_stubs.c    Fri Feb 11 10:08:40 2011 -0500
@@ -192,12 +192,13 @@ static int device_disk_val(caml_gc *gc, 
        CAMLparam1(v);
 
        c_val->backend_domid = Int_val(Field(v, 0));
-       c_val->physpath = dup_String_val(gc, Field(v, 1));
-       c_val->phystype = (Int_val(Field(v, 2))) + PHYSTYPE_QCOW;
-       c_val->virtpath = dup_String_val(gc, Field(v, 3));
-       c_val->unpluggable = Bool_val(Field(v, 4));
-       c_val->readwrite = Bool_val(Field(v, 5));
-       c_val->is_cdrom = Bool_val(Field(v, 6));
+       c_val->pdev_path = dup_String_val(gc, Field(v, 1));
+       c_val->vdev = dup_String_val(gc, Field(v, 2));
+        c_val->backend = (Int_val(Field(v, 3)));
+        c_val->format = (Int_val(Field(v, 4)));
+       c_val->unpluggable = Bool_val(Field(v, 5));
+       c_val->readwrite = Bool_val(Field(v, 6));
+       c_val->is_cdrom = Bool_val(Field(v, 7));
 
        CAMLreturn(0);
 }
diff -r 1967c7c290eb tools/python/xen/lowlevel/xl/xl.c
--- a/tools/python/xen/lowlevel/xl/xl.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/python/xen/lowlevel/xl/xl.c Fri Feb 11 10:08:40 2011 -0500
@@ -779,12 +779,17 @@ PyMODINIT_FUNC initxl(void)
     _INT_CONST_LIBXL(m, CONSBACK_XENCONSOLED);
     _INT_CONST_LIBXL(m, CONSBACK_IOEMU);
 
-    _INT_CONST(m, PHYSTYPE_QCOW);
-    _INT_CONST(m, PHYSTYPE_QCOW2);
-    _INT_CONST(m, PHYSTYPE_VHD);
-    _INT_CONST(m, PHYSTYPE_AIO);
-    _INT_CONST(m, PHYSTYPE_FILE);
-    _INT_CONST(m, PHYSTYPE_PHY);
+    _INT_CONST(m, DISK_FORMAT_UNKNOWN);
+    _INT_CONST(m, DISK_FORMAT_QCOW);
+    _INT_CONST(m, DISK_FORMAT_QCOW2);
+    _INT_CONST(m, DISK_FORMAT_VHD);
+    _INT_CONST(m, DISK_FORMAT_RAW);
+    _INT_CONST(m, DISK_FORMAT_EMPTY);
+
+    _INT_CONST(m, DISK_BACKEND_UNKNOWN);
+    _INT_CONST(m, DISK_BACKEND_PHY);
+    _INT_CONST(m, DISK_BACKEND_TAP);
+    _INT_CONST(m, DISK_BACKEND_QDISK);
 
     _INT_CONST(m, NICTYPE_IOEMU);
     _INT_CONST(m, NICTYPE_VIF);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

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