[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 8/9] libxl: introduce specific error codes in libxl_device_cdrom_insert
Signed-off-by: Rob Hoes <rob.hoes@xxxxxxxxxx> --- tools/libxl/libxl.c | 12 ++++++------ tools/libxl/libxl_device.c | 6 +++--- tools/libxl/libxl_qmp.c | 4 +++- tools/libxl/libxl_types.idl | 22 +++++++++++++++++++++- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 2f56c6e..f41f291 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2848,25 +2848,25 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk, libxl_domain_type type = libxl__domain_type(gc, domid); if (type == LIBXL_DOMAIN_TYPE_INVALID) { - rc = ERROR_FAIL; + rc = ERROR_INVAL_DOMAIN_TYPE; goto out; } if (type != LIBXL_DOMAIN_TYPE_HVM) { LOG(ERROR, "cdrom-insert requires an HVM domain"); - rc = ERROR_INVAL; + rc = ERROR_NOHVM; goto out; } if (libxl_get_stubdom_id(ctx, domid) != 0) { LOG(ERROR, "cdrom-insert doesn't work for stub domains"); - rc = ERROR_INVAL; + rc = ERROR_STUBDOM; goto out; } dm_ver = libxl__device_model_version_running(gc, domid); if (dm_ver == -1) { LOG(ERROR, "cannot determine device model version"); - rc = ERROR_FAIL; + rc = ERROR_DM_VERSION_UNDETERMINED; goto out; } @@ -2881,7 +2881,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk, } if (i == num) { LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual device not found"); - rc = ERROR_FAIL; + rc = ERROR_DISK_VDEV_NOT_FOUND; goto out; } @@ -2941,7 +2941,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk, { LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Internal error: %s does not exist", libxl__sprintf(gc, "%s/frontend", path)); - rc = ERROR_FAIL; + rc = ERROR_INTERNAL; goto out; } diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c index 56c6e2e..1c5f659 100644 --- a/tools/libxl/libxl_device.c +++ b/tools/libxl/libxl_device.c @@ -271,7 +271,7 @@ int libxl__device_disk_set_backend(libxl__gc *gc, libxl_device_disk *disk) { if (disk->format == LIBXL_DISK_FORMAT_EMPTY) { if (!disk->is_cdrom) { LOG(ERROR, "Disk vdev=%s is empty but not cdrom", disk->vdev); - return ERROR_INVAL; + return ERROR_INVAL_DISK_FORMAT; } memset(&a.stab, 0, sizeof(a.stab)); } else if ((disk->backend == LIBXL_DISK_BACKEND_UNKNOWN || @@ -281,7 +281,7 @@ int libxl__device_disk_set_backend(libxl__gc *gc, libxl_device_disk *disk) { if (stat(disk->pdev_path, &a.stab)) { LOGE(ERROR, "Disk vdev=%s failed to stat: %s", disk->vdev, disk->pdev_path); - return ERROR_INVAL; + return ERROR_DISK_PDEV_NOT_FOUND; } } @@ -299,7 +299,7 @@ int libxl__device_disk_set_backend(libxl__gc *gc, libxl_device_disk *disk) { } if (!ok) { LOG(ERROR, "no suitable backend for disk %s", disk->vdev); - return ERROR_INVAL; + return ERROR_DISK_BACKEND_UNDETERMINED; } disk->backend = ok; return 0; diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c index 9aa7e2e..c687e86 100644 --- a/tools/libxl/libxl_qmp.c +++ b/tools/libxl/libxl_qmp.c @@ -817,9 +817,11 @@ static int qmp_run_command(libxl__gc *gc, int domid, qmp = libxl__qmp_initialize(gc, domid); if (!qmp) - return ERROR_FAIL; + return ERROR_QMP_INIT; rc = qmp_synchronous_send(qmp, cmd, args, callback, opaque, qmp->timeout); + if (rc < 0) + rc = ERROR_QMP_SEND; libxl__qmp_close(qmp); return rc; diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 15e4af2..88262ca 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -107,6 +107,10 @@ libxl_error = Enumeration("error", [ # Requested domain was not found (-21, "DOMAIN_NOTFOUND"), + # Internal error; not actionable by the caller other than by doing something like + # a retry/reboot (perhaps a libxl bug) + (ENUM_PREV, "INTERNAL"), + # Xenstore errors (ENUM_PREV, "XS_CONNECT"), (ENUM_PREV, "XS_READ"), @@ -132,12 +136,28 @@ libxl_error = Enumeration("error", [ # Disk parameters invalid (ENUM_PREV, "INVAL_DISK_VDEV"), (ENUM_PREV, "INVAL_DISK_BACKEND"), + (ENUM_PREV, "INVAL_DISK_FORMAT"), # Disk parameters could not be determined (ENUM_PREV, "DISK_VDEV_UNDETERMINED"), + (ENUM_PREV, "DISK_BACKEND_UNDETERMINED"), - # Physical disk device could not be found + # Physical/virtual disk device could not be found (ENUM_PREV, "DISK_PDEV_NOT_FOUND"), + (ENUM_PREV, "DISK_VDEV_NOT_FOUND"), + + # Operation requires an HVM domain + (ENUM_PREV, "NOHVM"), + + # Operation is not compatible with a stub domain + (ENUM_PREV, "STUBDOM"), + + # Device model version could not be determined + (ENUM_PREV, "DM_VERSION_UNDETERMINED"), + + # QMP errors + (ENUM_PREV, "QMP_INIT"), + (ENUM_PREV, "QMP_SEND"), ], value_namespace = "") libxl_domain_type = Enumeration("domain_type", [ -- 2.4.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |