121 lines
3.6 KiB
Diff
121 lines
3.6 KiB
Diff
|
Index: xen-3.3.0-testing/tools/blktap/drivers/tapdisk.h
|
||
|
===================================================================
|
||
|
--- xen-3.3.0-testing.orig/tools/blktap/drivers/tapdisk.h
|
||
|
+++ xen-3.3.0-testing/tools/blktap/drivers/tapdisk.h
|
||
|
@@ -159,16 +159,6 @@ extern struct tap_disk tapdisk_ram;
|
||
|
extern struct tap_disk tapdisk_qcow;
|
||
|
extern struct tap_disk tapdisk_qcow2;
|
||
|
|
||
|
-#define MAX_DISK_TYPES 20
|
||
|
-
|
||
|
-#define DISK_TYPE_AIO 0
|
||
|
-#define DISK_TYPE_SYNC 1
|
||
|
-#define DISK_TYPE_VMDK 2
|
||
|
-#define DISK_TYPE_RAM 3
|
||
|
-#define DISK_TYPE_QCOW 4
|
||
|
-#define DISK_TYPE_QCOW2 5
|
||
|
-#define DISK_TYPE_IOEMU 6
|
||
|
-
|
||
|
|
||
|
/*Define Individual Disk Parameters here */
|
||
|
static disk_info_t aio_disk = {
|
||
|
Index: xen-3.3.0-testing/tools/blktap/lib/blktaplib.h
|
||
|
===================================================================
|
||
|
--- xen-3.3.0-testing.orig/tools/blktap/lib/blktaplib.h
|
||
|
+++ xen-3.3.0-testing/tools/blktap/lib/blktaplib.h
|
||
|
@@ -205,6 +205,17 @@ typedef struct msg_pid {
|
||
|
#define CTLMSG_PID 9
|
||
|
#define CTLMSG_PID_RSP 10
|
||
|
|
||
|
+/* disk driver types */
|
||
|
+#define MAX_DISK_TYPES 20
|
||
|
+
|
||
|
+#define DISK_TYPE_AIO 0
|
||
|
+#define DISK_TYPE_SYNC 1
|
||
|
+#define DISK_TYPE_VMDK 2
|
||
|
+#define DISK_TYPE_RAM 3
|
||
|
+#define DISK_TYPE_QCOW 4
|
||
|
+#define DISK_TYPE_QCOW2 5
|
||
|
+#define DISK_TYPE_IOEMU 6
|
||
|
+
|
||
|
/* xenstore/xenbus: */
|
||
|
#define DOMNAME "Domain-0"
|
||
|
int setup_probe_watch(struct xs_handle *h);
|
||
|
Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c
|
||
|
===================================================================
|
||
|
--- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_blktap.c
|
||
|
+++ xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.c
|
||
|
@@ -218,21 +218,34 @@ static int map_new_dev(struct td_state *
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
-static int open_disk(struct td_state *s, char *path, int readonly)
|
||
|
+static int open_disk(struct td_state *s, char *path, int driver, int readonly)
|
||
|
{
|
||
|
struct disk_id id;
|
||
|
BlockDriverState* bs;
|
||
|
-
|
||
|
-#ifndef QEMU_TOOL
|
||
|
+ BlockDriver* drv;
|
||
|
int i;
|
||
|
-#endif
|
||
|
|
||
|
DPRINTF("Opening %s\n", path);
|
||
|
bs = bdrv_new("blktap");
|
||
|
|
||
|
memset(&id, 0, sizeof(struct disk_id));
|
||
|
|
||
|
- if (bdrv_open(bs, path, 0) != 0) {
|
||
|
+ /* Search for disk driver */
|
||
|
+ for (i = 0; blktap_drivers[i].idnum >= 0; i++) {
|
||
|
+ if (blktap_drivers[i].idnum == driver)
|
||
|
+ break;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (blktap_drivers[i].idnum < 0) {
|
||
|
+ fprintf(stderr, "Could not find image format id %d\n", driver);
|
||
|
+ return -ENOMEM;
|
||
|
+ }
|
||
|
+
|
||
|
+ drv = blktap_drivers[i].drv;
|
||
|
+ DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
|
||
|
+
|
||
|
+ /* Open the image */
|
||
|
+ if (bdrv_open2(bs, path, 0, drv) != 0) {
|
||
|
fprintf(stderr, "Could not open image file %s\n", path);
|
||
|
return -ENOMEM;
|
||
|
}
|
||
|
@@ -524,7 +537,7 @@ static void handle_blktap_ctrlmsg(void*
|
||
|
s = state_init();
|
||
|
|
||
|
/*Open file*/
|
||
|
- if (s == NULL || open_disk(s, path, msg->readonly)) {
|
||
|
+ if (s == NULL || open_disk(s, path, msg->drivertype, msg->readonly)) {
|
||
|
msglen = sizeof(msg_hdr_t);
|
||
|
msg->type = CTLMSG_IMG_FAIL;
|
||
|
msg->len = msglen;
|
||
|
Index: xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.h
|
||
|
===================================================================
|
||
|
--- xen-3.3.0-testing.orig/tools/ioemu/hw/xen_blktap.h
|
||
|
+++ xen-3.3.0-testing/tools/ioemu/hw/xen_blktap.h
|
||
|
@@ -54,4 +54,19 @@ typedef struct fd_list_entry {
|
||
|
struct fd_list_entry **pprev, *next;
|
||
|
} fd_list_entry_t;
|
||
|
|
||
|
+typedef struct disk_info {
|
||
|
+ int idnum;
|
||
|
+ struct BlockDriver *drv;
|
||
|
+} disk_info_t;
|
||
|
+
|
||
|
+static disk_info_t blktap_drivers[] = {
|
||
|
+ { DISK_TYPE_AIO, &bdrv_raw },
|
||
|
+ { DISK_TYPE_SYNC, &bdrv_raw },
|
||
|
+ { DISK_TYPE_VMDK, &bdrv_vmdk },
|
||
|
+ { DISK_TYPE_QCOW, &bdrv_qcow },
|
||
|
+ { DISK_TYPE_QCOW2, &bdrv_qcow2 },
|
||
|
+ { DISK_TYPE_IOEMU, NULL },
|
||
|
+ { -1, NULL }
|
||
|
+};
|
||
|
+
|
||
|
#endif /*XEN_BLKTAP_H_*/
|