* [PATCH] qemu-xen: Fix open_disk for blktap disks
@ 2008-10-06 14:38 Kevin Wolf
0 siblings, 0 replies; only message in thread
From: Kevin Wolf @ 2008-10-06 14:38 UTC (permalink / raw)
To: Ian Jackson; +Cc: xen-devel
[-- Attachment #1: Type: text/plain, Size: 265 bytes --]
qemu-xen: Fix open_disk for blktap disks
If blktap drives are registered properly, qemu code is much less likely
to get confused by them. Use bdrv_new(), assign a device name and create
an entry in drives_table for them.
Signed-off-by: Kevin Wolf <kwolf@suse.de>
[-- Attachment #2: ioemu-blktap-fix-open.patch --]
[-- Type: text/x-patch, Size: 2494 bytes --]
Index: qemu-xen/hw/xen_blktap.c
===================================================================
--- qemu-xen.orig/hw/xen_blktap.c
+++ qemu-xen/hw/xen_blktap.c
@@ -32,6 +32,11 @@
#include <errno.h>
#include <stdlib.h>
+#ifndef QEMU_TOOL
+#include "qemu-common.h"
+#include "sysemu.h"
+#endif
+
#include "xen_blktap.h"
#include "block_int.h"
#include "qemu-char.h"
@@ -217,13 +222,15 @@ static int map_new_dev(struct td_state *
static int open_disk(struct td_state *s, char *path, int readonly)
{
- struct disk_id id;
BlockDriverState* bs;
+ char* devname;
+ static int devnumber = 0;
+ int i;
- DPRINTF("Opening %s\n", path);
- bs = calloc(1, sizeof(*bs));
-
- memset(&id, 0, sizeof(struct disk_id));
+ DPRINTF("Opening %s as blktap%d\n", path, devnumber);
+ asprintf(&devname, "blktap%d", devnumber++);
+ bs = bdrv_new(devname);
+ free(devname);
if (bdrv_open(bs, path, 0) != 0) {
fprintf(stderr, "Could not open image file %s\n", path);
@@ -237,6 +244,18 @@ static int open_disk(struct td_state *s,
s->info = ((s->flags & TD_RDONLY) ? VDISK_READONLY : 0);
+#ifndef QEMU_TOOL
+ for (i = 0; i < MAX_DRIVES + 1; i++) {
+ if (drives_table[i].bdrv == NULL) {
+ drives_table[i].bdrv = bs;
+ drives_table[i].type = IF_BLKTAP;
+ drives_table[i].bus = 0;
+ drives_table[i].unit = 0;
+ break;
+ }
+ }
+#endif
+
return 0;
}
Index: qemu-xen/hw/xen_blktap.h
===================================================================
--- qemu-xen.orig/hw/xen_blktap.h
+++ qemu-xen/hw/xen_blktap.h
@@ -30,11 +30,6 @@ typedef uint32_t td_flag_t;
#define TD_RDONLY 1
-struct disk_id {
- char *name;
- int drivertype;
-};
-
/* This structure represents the state of an active virtual disk. */
struct td_state {
BlockDriverState* bs;
Index: qemu-xen/sysemu.h
===================================================================
--- qemu-xen.orig/sysemu.h
+++ qemu-xen/sysemu.h
@@ -116,6 +116,7 @@ extern unsigned int nb_prom_envs;
#endif
typedef enum {
+ IF_BLKTAP,
IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD
} BlockInterfaceType;
Index: qemu-xen/vl.c
===================================================================
--- qemu-xen.orig/vl.c
+++ qemu-xen/vl.c
@@ -5408,6 +5408,9 @@ static int drive_init(struct drive_opt *
case IF_PFLASH:
case IF_MTD:
break;
+ case IF_BLKTAP:
+ /* Cannot happen - silence gcc warning */
+ break;
}
if (!file[0])
return 0;
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-10-06 14:38 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-06 14:38 [PATCH] qemu-xen: Fix open_disk for blktap disks Kevin Wolf
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.