From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 2/5] Xl interface change plus changes to code it impacts Date: Tue, 8 Feb 2011 16:42:45 +0000 Message-ID: References: <4D50628A.2000307@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Return-path: In-Reply-To: <4D50628A.2000307@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Kamala Narasimhan Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org > 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);