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 2/5] Xl interface change plus changes to code it i

To: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxx>
Subject: Re: [xen-devel][PATCH 2/5] Xl interface change plus changes to code it impacts
From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date: Tue, 8 Feb 2011 16:42:45 +0000
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Tue, 08 Feb 2011 08:41:21 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4D50628A.2000307@xxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4D50628A.2000307@xxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)
> diff -r e4406b9fb064 tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c     Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl.c     Mon Feb 07 11:28:10 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,18 +863,19 @@ 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 ) {
>          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_BLKBACK ) {
>          if ( !(S_ISBLK(stat_buf.st_mode)) ) {
>              LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s is not a 
> block device!\n",
>                  file_name);
> @@ -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_BLKBACK: {
> +            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_TAPDISK2:
> +        case DISK_BACKEND_QEMU: {
> +            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->backend);
>                  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_QEMU )
>                  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_BLKBACK) ? DEVICE_VBD : DEVICE_TAP;
>      device.domid            = disk->domid;
>      device.devid            = devid;
>      device.kind             = DEVICE_VBD;
> @@ -1052,36 +1051,44 @@ 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_BLKBACK: {
> +            fprintf(stderr, "attaching PHY disk %s to domain 0\n", 
> 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_TAPDISK2: {
> +            if ( disk->format == DISK_FORMAT_VHD )
> +            {
> +                if (libxl__blktap_enabled(&gc))
> +                    dev = libxl__blktap_devpath(&gc, disk->pdev_path, 
> disk->backend);
> +                else
> +                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "tapdisk2 is required to 
> open a vhd disk\n");
> +                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\n");
> +                break;
> +            } else {
> +                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend 
> "
> +                    "type: %d\n", 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");
> +        }
> +        case DISK_BACKEND_QEMU: {
> +            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a qdisk 
> "
> +                "image\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_UNKNOWN:
> +        default: {
> +            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend "
> +                "type: %d\n", disk->backend);
>              break;
> +        }
> +    }
>  
> -        default:
> -            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk physical 
> type: %d\n", phystype);
> -            break;
> -    }
>      if (dev != NULL)
>          ret = strdup(dev);
>      libxl__free_all(&gc);
> @@ -1677,13 +1684,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 +1727,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 +1761,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 e4406b9fb064 tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h     Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl.h     Mon Feb 07 11:28:10 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_BLKBACK,
> +    DISK_BACKEND_TAPDISK2,
> +    DISK_BACKEND_QEMU,
> +} libxl_disk_backend;
>  
>  typedef enum {
>      NICTYPE_IOEMU = 1,
> diff -r e4406b9fb064 tools/libxl/libxl.idl
> --- a/tools/libxl/libxl.idl   Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl.idl   Mon Feb 07 11:28:10 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 e4406b9fb064 tools/libxl/libxl_blktap2.c
> --- a/tools/libxl/libxl_blktap2.c     Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl_blktap2.c     Mon Feb 07 11:28:10 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_backend backend)
>  {
>      const char *type;
>      char *params, *devname = NULL;
>      int minor, err;
>  
> -    type = libxl__device_disk_string_of_phystype(phystype);
> +    type = libxl__device_disk_string_of_backend(backend);

This should be libxl__device_disk_string_of_format and a
libxl_disk_format should be passed as an argument to
libxl__blktap_devpath instead of libxl_disk_backend.


>      minor = tap_ctl_find_minor(type, disk);
>      if (minor >= 0) {
>          devname = libxl__sprintf(gc, "/dev/xen/blktap-2/tapdev%d", minor);
> diff -r e4406b9fb064 tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c      Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl_device.c      Mon Feb 07 11:28:10 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 "file"; 

This should be 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_QEMU: return "qdisk";
> +        case DISK_BACKEND_TAPDISK2: return "tap";
> +        case DISK_BACKEND_BLKBACK: return "phy";
>          default: return NULL;
>      }
>  }
> diff -r e4406b9fb064 tools/libxl/libxl_dm.c
> --- a/tools/libxl/libxl_dm.c  Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl_dm.c  Mon Feb 07 11:28:10 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 e4406b9fb064 tools/libxl/libxl_internal.h
> --- a/tools/libxl/libxl_internal.h    Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl_internal.h    Mon Feb 07 11:28:10 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_backend backend);
>  
>  _hidden char *libxl__uuid2string(libxl__gc *gc, const libxl_uuid uuid);
>  
> diff -r e4406b9fb064 tools/libxl/libxl_utils.c
> --- a/tools/libxl/libxl_utils.c       Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl_utils.c       Mon Feb 07 11:28:10 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_BLKBACK;
>      } else if (!strcmp(s, "file")) {
> -        *phystype = PHYSTYPE_FILE;
> +        *backend = DISK_BACKEND_TAPDISK2;
>      } 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_TAPDISK2;
>          } else if (!strcmp(p, "qcow")) {
> -            *phystype = PHYSTYPE_QCOW;
> +            *backend = DISK_BACKEND_QEMU;
>          } else if (!strcmp(p, "qcow2")) {
> -            *phystype = PHYSTYPE_QCOW2;
> +            *backend = DISK_BACKEND_QEMU;
>          }
>      }
>  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 e4406b9fb064 tools/libxl/libxl_utils.h
> --- a/tools/libxl/libxl_utils.h       Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/libxl_utils.h       Mon Feb 07 11:28:10 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 e4406b9fb064 tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c        Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/libxl/xl_cmdimpl.c        Mon Feb 07 11:28:10 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(pdev_path %s)\n", d_config->disks[i].pdev_path);
> +        printf("\t\t\t(backend %d)\n", d_config->disks[i].backend);
> +        printf("\t\t\t(vdev %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);
> @@ -460,10 +460,12 @@ static int parse_disk_config(libxl_devic
>                  *p = '\0';
>                  if ( !strcmp(tok, "phy") ) {
>                      state = DSTATE_PHYSPATH;
> -                    disk->phystype = PHYSTYPE_PHY;
> +                    disk->format = DISK_FORMAT_RAW;
> +                    disk->backend = DISK_BACKEND_BLKBACK;
>                  }else if ( !strcmp(tok, "file") ) {
>                      state = DSTATE_PHYSPATH;
> -                    disk->phystype = PHYSTYPE_FILE;
> +                    disk->format = DISK_FORMAT_RAW;
> +                    disk->backend = DISK_BACKEND_TAPDISK2;
>                  }else if ( !strcmp(tok, "tap") ) {
>                      state = DSTATE_TAP;
>                  }else{
> @@ -473,8 +475,8 @@ static int parse_disk_config(libxl_devic
>                  tok = p + 1;
>              } else if (*p == ',') {
>                  state = DSTATE_VIRTPATH;
> -                disk->phystype = PHYSTYPE_EMPTY;
> -                disk->physpath = strdup("");
> +                disk->backend = DISK_FORMAT_EMPTY;
> +                disk->pdev_path = strdup("");
>                  tok = p + 1;
>              }
>              break;
> @@ -482,13 +484,17 @@ static int parse_disk_config(libxl_devic
>              if ( *p == ':' ) {
>                  *p = '\0';
>                  if ( !strcmp(tok, "aio") ) {
> -                    disk->phystype = PHYSTYPE_AIO;
> +                    disk->format = DISK_FORMAT_RAW;
> +                    disk->backend = DISK_BACKEND_TAPDISK2;
>                  }else if ( !strcmp(tok, "vhd") ) {
> -                    disk->phystype = PHYSTYPE_VHD;
> +                    disk->format = DISK_FORMAT_VHD;
> +                    disk->backend = DISK_BACKEND_TAPDISK2;
>                  }else if ( !strcmp(tok, "qcow") ) {
> -                    disk->phystype = PHYSTYPE_QCOW;
> +                    disk->format = DISK_FORMAT_QCOW;
> +                    disk->backend = DISK_BACKEND_QEMU;
>                  }else if ( !strcmp(tok, "qcow2") ) {
> -                    disk->phystype = PHYSTYPE_QCOW2;
> +                    disk->format = DISK_FORMAT_QCOW2;
> +                    disk->backend = DISK_BACKEND_QEMU;
>                  }else {
>                      fprintf(stderr, "Unknown tapdisk type: %s\n", tok);
>                      return 0;
> @@ -503,7 +509,7 @@ static int parse_disk_config(libxl_devic
>                  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 */
> @@ -532,7 +538,7 @@ static int parse_disk_config(libxl_devic
>                  if ( tok == p )
>                      goto out;
>                  *p = '\0';
> -                disk->virtpath = (*tok) ? strdup(tok) : NULL;
> +                disk->vdev = (*tok) ? strdup(tok) : NULL;
>                  tok = p + 1;
>              }
>              break;
> @@ -1838,25 +1844,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_BLKBACK;
>              } else {
>                  fprintf(stderr, "assuming file:\n");
> -                disk.phystype = PHYSTYPE_FILE;
> +                disk.backend = DISK_BACKEND_TAPDISK2; 
>              }
>          } 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 +4389,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_BLKBACK;
>      } else if (!strcmp(tok, "file")) {
> -        disk.phystype = PHYSTYPE_FILE;
> +        disk.backend = DISK_BACKEND_TAPDISK2;
>      } else if (!strcmp(tok, "tap")) {
>          tok = strtok(NULL, ":");
>          if (!strcmp(tok, "aio")) {
> -            disk.phystype = PHYSTYPE_AIO;
> +            disk.backend = DISK_BACKEND_TAPDISK2;
>          } else if (!strcmp(tok, "vhd")) {
> -            disk.phystype = PHYSTYPE_VHD;
> +            disk.format = DISK_FORMAT_VHD;
> +            disk.backend = DISK_BACKEND_TAPDISK2;
>          } else if (!strcmp(tok, "qcow")) {
> -            disk.phystype = PHYSTYPE_QCOW;
> +            disk.format = DISK_FORMAT_QCOW;
> +            disk.backend = DISK_BACKEND_QEMU;
>          } else if (!strcmp(tok, "qcow2")) {
> -            disk.phystype = PHYSTYPE_QCOW2;
> +            disk.format = DISK_FORMAT_QCOW2;
> +            disk.backend = DISK_BACKEND_QEMU;
>          } else {
>              fprintf(stderr, "Error: `%s' is not a valid disk image.\n", tok);
>              return 1;
> @@ -4404,12 +4413,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 e4406b9fb064 tools/python/xen/lowlevel/xl/xl.c
> --- a/tools/python/xen/lowlevel/xl/xl.c       Mon Feb 07 15:04:32 2011 +0000
> +++ b/tools/python/xen/lowlevel/xl/xl.c       Mon Feb 07 11:28:10 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_BLKBACK);
> +    _INT_CONST(m, DISK_BACKEND_TAPDISK2);
> +    _INT_CONST(m, DISK_BACKEND_QEMU);
>  
>      _INT_CONST(m, NICTYPE_IOEMU);
>      _INT_CONST(m, NICTYPE_VIF);

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