diff options
author | Ian Jackson <Ian.Jackson@eu.citrix.com> | 2011-01-28 18:38:26 +0000 |
---|---|---|
committer | Ian Jackson <Ian.Jackson@eu.citrix.com> | 2011-01-28 18:38:26 +0000 |
commit | efdadb8156974e75bd2aa6eb61a69a4becf84bb0 (patch) | |
tree | 8605b94c741f85e1413a4ac155b7c924c91d1615 | |
parent | 91e6ad2242cf72683cf832e9c50158539a224dbf (diff) | |
download | xen-efdadb8156974e75bd2aa6eb61a69a4becf84bb0.tar.gz xen-efdadb8156974e75bd2aa6eb61a69a4becf84bb0.tar.bz2 xen-efdadb8156974e75bd2aa6eb61a69a4becf84bb0.zip |
libxl: during domain destruction, do not complain if no devices dir to destroy
Previously calling libxl__devices_destroy on a half-constructed or
half-destroyed domain would sometimes complain along these lines:
libxl: error: libxl_device.c:327:libxl__devices_destroy /local/domain/29/device is empty
This is (a) not a reasonable thing to complain about and (b) not an
accurate description of all the things that that particular failure of
libxl__xs_directory might mean.
Change the code to check errno, so that if errno==ENOENT we silently
continue, not destroying any devices, and if errno!=ENOENT, properly
log the problem and fail.
Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r-- | tools/libxl/libxl_device.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c index cf694d2f82..a7f3bda646 100644 --- a/tools/libxl/libxl_device.c +++ b/tools/libxl/libxl_device.c @@ -324,8 +324,12 @@ int libxl__devices_destroy(libxl_ctx *ctx, uint32_t domid, int force) path = libxl__sprintf(&gc, "/local/domain/%d/device", domid); l1 = libxl__xs_directory(&gc, XBT_NULL, path, &num1); if (!l1) { - LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "%s is empty", path); - goto out; + if (errno != ENOENT) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unable to get xenstore" + " device listing %s", path); + goto out; + } + num1 = 0; } for (i = 0; i < num1; i++) { if (!strcmp("vfs", l1[i])) |