qemu-xen: Fix open_disk for blktap disks
PATCH 1/1 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 <[email protected]>
hw/xen_blktap.c +24 -5
@@ -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 ; }
hw/xen_blktap.h +0 -5
@@ -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;
sysemu.h +1 -0
@@ -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 ;
vl.c +3 -0
@@ -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
[email protected]
http://lists.xensource.com/xen-devel