aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Jackson <ian.jackson@eu.citrix.com>2013-04-15 18:04:35 +0100
committerIan Jackson <Ian.Jackson@eu.citrix.com>2013-04-15 18:07:43 +0100
commit1a438e0e124523fa62628620c7e6f877a9e4ed11 (patch)
tree59f5efbeec90b3d360412bf232cfd7bce50099be
parent321e742eab7a36ffd18ac64f246f341015a007e0 (diff)
downloadxen-1a438e0e124523fa62628620c7e6f877a9e4ed11.tar.gz
xen-1a438e0e124523fa62628620c7e6f877a9e4ed11.tar.bz2
xen-1a438e0e124523fa62628620c7e6f877a9e4ed11.zip
libxl: don't launch more than one tapdisk process for each disk
When adding a disk don't launch multiple tapdisk instances for the same disk, if transaction fails in device_disk_add reuse the same tapdisk for further tries instead of creating a new instance each time a transaction fails. Reported-by: Darren Shepherd <darren.s.shepherd@gmail.com> Signed-off-by: Roger Pau Monne <roger.pau@citrix.com> Tested-by: Darren Shepherd <darren.s.shepherd@gmail.com> Backport-requested-by: Pasi Karkkainen <pasik@iki.fi> (cherry picked from commit ec398660e89ca18bb8d061d5047d682bd383778a) Conflicts: tools/libxl/libxl.c Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/libxl.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 5783cd2535..3a58ef4b36 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1783,7 +1783,7 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
STATE_AO_GC(aodev->ao);
flexarray_t *front = NULL;
flexarray_t *back = NULL;
- char *dev, *script;
+ char *dev = NULL, *script;
libxl__device *device;
int rc;
libxl_ctx *ctx = gc->owner;
@@ -1858,12 +1858,15 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
break;
case LIBXL_DISK_BACKEND_TAP:
- dev = libxl__blktap_devpath(gc, disk->pdev_path, disk->format);
- if (!dev) {
- LOG(ERROR, "failed to get blktap devpath for %p\n",
- disk->pdev_path);
- rc = ERROR_FAIL;
- goto out_free;
+ if (dev == NULL) {
+ dev = libxl__blktap_devpath(gc, disk->pdev_path,
+ disk->format);
+ if (!dev) {
+ LOG(ERROR, "failed to get blktap devpath for %p\n",
+ disk->pdev_path);
+ rc = ERROR_FAIL;
+ goto out_free;
+ }
}
flexarray_append(back, "tapdisk-params");
flexarray_append(back, libxl__sprintf(gc, "%s:%s",