[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] qemu-xen: Fix open_disk for blktap disks
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@xxxxxxx> 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; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |