commit 51259318c6d40d5dd962c92c561826714361120a Author: Kevin Wolf Date: Wed Jul 23 10:51:07 2008 +0200 qemu-xen: Fix open_disk for blktap disks Signed-off-by: Kevin Wolf Index: xen-3.3.1-testing/tools/ioemu-remote/hw/xen_blktap.c =================================================================== --- xen-3.3.1-testing.orig/tools/ioemu-remote/hw/xen_blktap.c +++ xen-3.3.1-testing/tools/ioemu-remote/hw/xen_blktap.c @@ -32,6 +32,11 @@ #include #include +#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: xen-3.3.1-testing/tools/ioemu-remote/hw/xen_blktap.h =================================================================== --- xen-3.3.1-testing.orig/tools/ioemu-remote/hw/xen_blktap.h +++ xen-3.3.1-testing/tools/ioemu-remote/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: xen-3.3.1-testing/tools/ioemu-remote/sysemu.h =================================================================== --- xen-3.3.1-testing.orig/tools/ioemu-remote/sysemu.h +++ xen-3.3.1-testing/tools/ioemu-remote/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: xen-3.3.1-testing/tools/ioemu-remote/vl.c =================================================================== --- xen-3.3.1-testing.orig/tools/ioemu-remote/vl.c +++ xen-3.3.1-testing/tools/ioemu-remote/vl.c @@ -5414,6 +5414,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;