85 lines
3.1 KiB
Diff
85 lines
3.1 KiB
Diff
bug #239173
|
|
bug #242953
|
|
|
|
Index: xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
===================================================================
|
|
--- xen-3.1-testing.orig/tools/python/xen/xend/XendDomainInfo.py
|
|
+++ xen-3.1-testing/tools/python/xen/xend/XendDomainInfo.py
|
|
@@ -1833,7 +1833,7 @@ class XendDomainInfo:
|
|
(fn, BOOTLOADER_LOOPBACK_DEVICE))
|
|
|
|
vbd = {
|
|
- 'mode': 'RO',
|
|
+ 'mode': 'RW',
|
|
'device': BOOTLOADER_LOOPBACK_DEVICE,
|
|
}
|
|
|
|
Index: xen-3.1-testing/tools/ioemu/xenstore.c
|
|
===================================================================
|
|
--- xen-3.1-testing.orig/tools/ioemu/xenstore.c
|
|
+++ xen-3.1-testing/tools/ioemu/xenstore.c
|
|
@@ -81,9 +81,9 @@ void xenstore_parse_domain_config(int do
|
|
{
|
|
char **e = NULL;
|
|
char *buf = NULL, *path;
|
|
- char *fpath = NULL, *bpath = NULL,
|
|
+ char *fpath = NULL, *bpath = NULL, *btype = NULL,
|
|
*dev = NULL, *params = NULL, *type = NULL, *media_present = NULL;
|
|
- int i, is_scsi;
|
|
+ int i, is_scsi, is_tap;
|
|
unsigned int len, num, hd_index;
|
|
|
|
for(i = 0; i < MAX_DISKS + MAX_SCSI_DISKS; i++)
|
|
@@ -116,6 +116,14 @@ void xenstore_parse_domain_config(int do
|
|
bpath = xs_read(xsh, XBT_NULL, buf, &len);
|
|
if (bpath == NULL)
|
|
continue;
|
|
+ /* check to see if type is tap or not */
|
|
+ if (pasprintf(&buf, "%s/type", bpath) == -1)
|
|
+ continue;
|
|
+ free(btype);
|
|
+ btype = xs_read(xsh, XBT_NULL, buf, &len);
|
|
+ if (btype == NULL)
|
|
+ continue;
|
|
+ is_tap = !strncmp(btype, "tap", 3);
|
|
/* read the name of the device */
|
|
if (pasprintf(&buf, "%s/dev", bpath) == -1)
|
|
continue;
|
|
@@ -123,6 +131,13 @@ void xenstore_parse_domain_config(int do
|
|
dev = xs_read(xsh, XBT_NULL, buf, &len);
|
|
if (dev == NULL)
|
|
continue;
|
|
+ /* Force xvdN to look like hdN */
|
|
+ if (is_tap && !strncmp(dev, "xvd", 3)) {
|
|
+ memmove(dev, dev+1, strlen(dev));
|
|
+ dev[0] = 'h';
|
|
+ dev[1] = 'd';
|
|
+ fprintf(stderr, "Got blktap '%s'\n", dev);
|
|
+ }
|
|
is_scsi = !strncmp(dev, "sd", 2);
|
|
if ((strncmp(dev, "hd", 2) && !is_scsi) || strlen(dev) != 3 )
|
|
continue;
|
|
@@ -140,6 +155,14 @@ void xenstore_parse_domain_config(int do
|
|
params = xs_read(xsh, XBT_NULL, buf, &len);
|
|
if (params == NULL)
|
|
continue;
|
|
+ /* Strip off blktap sub-type prefix aio: etc */
|
|
+ if (is_tap) {
|
|
+ char *offset = strchr(params, ':');
|
|
+ if (!offset)
|
|
+ continue;
|
|
+ memmove(params, offset+1, strlen(offset+1)+1);
|
|
+ fprintf(stderr, "Got params '%s'\n", params);
|
|
+ }
|
|
/*
|
|
* check if device has a phantom vbd; the phantom is hooked
|
|
* to the frontend device (for ease of cleanup), so lookup
|
|
@@ -196,6 +219,7 @@ void xenstore_parse_domain_config(int do
|
|
free(type);
|
|
free(params);
|
|
free(dev);
|
|
+ free(btype);
|
|
free(bpath);
|
|
free(buf);
|
|
free(path);
|