# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1202134788 0
# Node ID ed0d685da5fce837ab4f745da6637bec022ef1aa
# Parent 28a761908f4ba6b5b5e42b6ba066867c5bfa353e
ioemu: strip tap subtype prefix from image name
Currently I am not able to mount or boot from an HVM CDROM when it is
configured for 'tap:aio' instead of 'file'.
disk=[ 'tap:aio:/var/lib/xen/images/sles10-sp2-fv/disk0,hda,w', '
tap:aio:/home/iso/sles/SLES10.iso,hdc:cdrom,r', ]
With this patch I am able to boot from the CDROM and or mount it.
Patch changes xenstore.c:xenstore_process_event() to strip the tap
subtype prefix from the image name.
Signed-off-by: Pat Campbell <plc@xxxxxxxxxx>
xen-unstable changeset: 16944:0343aa1361011e5a280b4d78707a773a62231691
xen-unstable date: Wed Jan 30 14:25:55 2008 +0000
ioemu: Fix xenstore access changes.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
xen-unstable changeset: 16945:5f997b5b8a58a559020a06b1656534dce0086301
xen-unstable date: Wed Jan 30 15:19:22 2008 +0000
---
tools/ioemu/xenstore.c | 24 +++++++++++++++++++++---
1 files changed, 21 insertions(+), 3 deletions(-)
diff -r 28a761908f4b -r ed0d685da5fc tools/ioemu/xenstore.c
--- a/tools/ioemu/xenstore.c Mon Feb 04 14:19:20 2008 +0000
+++ b/tools/ioemu/xenstore.c Mon Feb 04 14:19:48 2008 +0000
@@ -314,7 +314,7 @@ void xenstore_process_logdirty_event(voi
void xenstore_process_event(void *opaque)
{
- char **vec, *image = NULL;
+ char **vec, *offset, *bpath = NULL, *buf = NULL, *drv = NULL, *image =
NULL;
unsigned int len, num, hd_index;
vec = xs_read_watch(xsh, &num);
@@ -331,8 +331,23 @@ void xenstore_process_event(void *opaque
goto out;
hd_index = vec[XS_WATCH_TOKEN][2] - 'a';
image = xs_read(xsh, XBT_NULL, vec[XS_WATCH_PATH], &len);
- if (image == NULL || !strcmp(image, bs_table[hd_index]->filename))
- goto out; /* gone or identical */
+ if (image == NULL)
+ goto out; /* gone */
+
+ /* Strip off blktap sub-type prefix */
+ bpath = strdup(vec[XS_WATCH_PATH]);
+ if (bpath == NULL)
+ goto out;
+ if ((offset = strrchr(bpath, '/')) != NULL)
+ *offset = '\0';
+ if (pasprintf(&buf, "%s/type", bpath) == -1)
+ goto out;
+ drv = xs_read(xsh, XBT_NULL, buf, &len);
+ if (drv && !strcmp(drv, "tap") && ((offset = strchr(image, ':')) != NULL))
+ memmove(image, offset+1, strlen(offset+1)+1);
+
+ if (!strcmp(image, bs_table[hd_index]->filename))
+ goto out; /* identical */
do_eject(0, vec[XS_WATCH_TOKEN]);
bs_table[hd_index]->filename[0] = 0;
@@ -347,6 +362,9 @@ void xenstore_process_event(void *opaque
}
out:
+ free(drv);
+ free(buf);
+ free(bpath);
free(image);
free(vec);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|