]> xenbits.xensource.com Git - libvirt.git/commitdiff
xen: Return tap2 for tap2 disks
authorPhilipp Hahn <hahn@univention.de>
Wed, 12 Oct 2011 08:55:37 +0000 (10:55 +0200)
committerEric Blake <eblake@redhat.com>
Wed, 12 Oct 2011 20:37:48 +0000 (14:37 -0600)
For some versions of Xen the difference between "tap" and "tap2" is
important. When converting back from xen-sxpr to libvirt-xml, that
information is lost, which breaks re-defining the domain using that
data.

Explicitly return "tap2" for disks defined as "device/tap2".

Signed-off-by: Philipp Hahn <hahn@univention.de>
src/xenxs/xen_sxpr.c

index c172e61facf9726508f36d28799eae3a12e430ed..f2447f7856660f10ea4061f7ac8fe19118d91e6d 100644 (file)
@@ -397,14 +397,20 @@ xenParseSxprDisks(virDomainDefPtr def,
                     goto error;
                 }
 
-                if (VIR_ALLOC_N(disk->driverName, (offset-src)+1) < 0)
-                    goto no_memory;
-                if (virStrncpy(disk->driverName, src, offset-src,
-                              (offset-src)+1) == NULL) {
-                    XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
-                                 _("Driver name %s too big for destination"),
-                                 src);
-                    goto error;
+                if (sexpr_lookup(node, "device/tap2") &&
+                    STRPREFIX(src, "tap:")) {
+                    if (!(disk->driverName = strdup("tap2")))
+                        goto no_memory;
+                } else {
+                    if (VIR_ALLOC_N(disk->driverName, (offset-src)+1) < 0)
+                        goto no_memory;
+                    if (virStrncpy(disk->driverName, src, offset-src,
+                                   (offset-src)+1) == NULL) {
+                        XENXS_ERROR(VIR_ERR_INTERNAL_ERROR,
+                                    _("Driver name %s too big for destination"),
+                                    src);
+                        goto error;
+                    }
                 }
 
                 src = offset + 1;