2012-09-17 17:49:23 +02:00
|
|
|
Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/block.c
|
2009-08-01 11:53:46 +02:00
|
|
|
===================================================================
|
2012-09-17 17:49:23 +02:00
|
|
|
--- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/block.c
|
|
|
|
+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/block.c
|
2010-01-16 01:12:54 +01:00
|
|
|
@@ -350,7 +350,7 @@ int bdrv_file_open(BlockDriverState **pb
|
2009-06-12 20:43:24 +02:00
|
|
|
|
|
|
|
int bdrv_open(BlockDriverState *bs, const char *filename, int flags)
|
|
|
|
{
|
|
|
|
- return bdrv_open2(bs, filename, flags, NULL);
|
|
|
|
+ return bdrv_open2(bs, filename, flags|BDRV_O_RDWR, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
|
2010-01-16 01:12:54 +01:00
|
|
|
@@ -419,12 +419,13 @@ int bdrv_open2(BlockDriverState *bs, con
|
2009-06-12 20:43:24 +02:00
|
|
|
}
|
|
|
|
bs->drv = drv;
|
|
|
|
bs->opaque = qemu_mallocz(drv->instance_size);
|
|
|
|
- /* Note: for compatibility, we open disk image files as RDWR, and
|
|
|
|
- RDONLY as fallback */
|
|
|
|
if (!(flags & BDRV_O_FILE))
|
2010-09-28 00:07:21 +02:00
|
|
|
- open_flags = (flags & BDRV_O_ACCESS) | (flags & BDRV_O_CACHE_MASK);
|
2009-09-27 00:20:08 +02:00
|
|
|
+ open_flags = flags;
|
2009-06-12 20:43:24 +02:00
|
|
|
else
|
|
|
|
open_flags = flags & ~(BDRV_O_FILE | BDRV_O_SNAPSHOT);
|
|
|
|
+ if (!(open_flags & BDRV_O_RDWR))
|
|
|
|
+ bs->read_only = 1;
|
|
|
|
+
|
|
|
|
ret = drv->bdrv_open(bs, filename, open_flags);
|
|
|
|
if ((ret == -EACCES || ret == -EPERM) && !(flags & BDRV_O_FILE)) {
|
|
|
|
ret = drv->bdrv_open(bs, filename, open_flags & ~BDRV_O_RDWR);
|
2012-09-17 17:49:23 +02:00
|
|
|
Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/usb-msd.c
|
2009-08-01 11:53:46 +02:00
|
|
|
===================================================================
|
2012-09-17 17:49:23 +02:00
|
|
|
--- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/hw/usb-msd.c
|
|
|
|
+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/hw/usb-msd.c
|
2009-06-12 20:43:24 +02:00
|
|
|
@@ -551,7 +551,7 @@ USBDevice *usb_msd_init(const char *file
|
|
|
|
s = qemu_mallocz(sizeof(MSDState));
|
|
|
|
|
|
|
|
bdrv = bdrv_new("usb");
|
|
|
|
- if (bdrv_open2(bdrv, filename, 0, drv) < 0)
|
|
|
|
+ if (bdrv_open2(bdrv, filename, BDRV_O_RDWR, drv) < 0)
|
|
|
|
goto fail;
|
|
|
|
s->bs = bdrv;
|
|
|
|
*pbs = bdrv;
|
2012-09-17 17:49:23 +02:00
|
|
|
Index: xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/qemu-img.c
|
2009-08-01 11:53:46 +02:00
|
|
|
===================================================================
|
2012-09-17 17:49:23 +02:00
|
|
|
--- xen-4.2.0-testing.orig/tools/qemu-xen-traditional-dir-remote/qemu-img.c
|
|
|
|
+++ xen-4.2.0-testing/tools/qemu-xen-traditional-dir-remote/qemu-img.c
|
2009-06-12 20:43:24 +02:00
|
|
|
@@ -32,7 +32,7 @@
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Default to cache=writeback as data integrity is not important for qemu-tcg. */
|
|
|
|
-#define BRDV_O_FLAGS BDRV_O_CACHE_WB
|
|
|
|
+#define BDRV_O_FLAGS BDRV_O_CACHE_WB
|
|
|
|
|
|
|
|
static void QEMU_NORETURN error(const char *fmt, ...)
|
|
|
|
{
|
2010-09-28 00:07:21 +02:00
|
|
|
@@ -185,7 +185,7 @@ static int read_password(char *buf, int
|
2009-06-12 20:43:24 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
static BlockDriverState *bdrv_new_open(const char *filename,
|
|
|
|
- const char *fmt)
|
|
|
|
+ const char *fmt, int flags)
|
|
|
|
{
|
|
|
|
BlockDriverState *bs;
|
|
|
|
BlockDriver *drv;
|
|
|
|
@@ -201,7 +201,7 @@ static BlockDriverState *bdrv_new_open(c
|
|
|
|
} else {
|
|
|
|
drv = &bdrv_raw;
|
|
|
|
}
|
|
|
|
- if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) {
|
|
|
|
+ if (bdrv_open2(bs, filename, flags, drv) < 0) {
|
|
|
|
error("Could not open '%s'", filename);
|
|
|
|
}
|
|
|
|
if (bdrv_is_encrypted(bs)) {
|
|
|
|
@@ -253,7 +253,7 @@ static int img_create(int argc, char **a
|
|
|
|
size = 0;
|
|
|
|
if (base_filename) {
|
|
|
|
BlockDriverState *bs;
|
|
|
|
- bs = bdrv_new_open(base_filename, NULL);
|
|
|
|
+ bs = bdrv_new_open(base_filename, NULL, BDRV_O_RDWR);
|
|
|
|
bdrv_get_geometry(bs, &size);
|
|
|
|
size *= 512;
|
|
|
|
bdrv_delete(bs);
|
|
|
|
@@ -332,7 +332,7 @@ static int img_commit(int argc, char **a
|
|
|
|
} else {
|
|
|
|
drv = NULL;
|
|
|
|
}
|
|
|
|
- if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) {
|
|
|
|
+ if (bdrv_open2(bs, filename, BDRV_O_RDWR, drv) < 0) {
|
|
|
|
error("Could not open '%s'", filename);
|
|
|
|
}
|
|
|
|
ret = bdrv_commit(bs);
|
|
|
|
@@ -455,7 +455,8 @@ static int img_convert(int argc, char **
|
|
|
|
|
|
|
|
total_sectors = 0;
|
|
|
|
for (bs_i = 0; bs_i < bs_n; bs_i++) {
|
|
|
|
- bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt);
|
|
|
|
+ bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt,
|
|
|
|
+ BDRV_O_CACHE_WB|BDRV_O_RDONLY);
|
|
|
|
if (!bs[bs_i])
|
|
|
|
error("Could not open '%s'", argv[optind + bs_i]);
|
|
|
|
bdrv_get_geometry(bs[bs_i], &bs_sectors);
|
|
|
|
@@ -483,7 +484,7 @@ static int img_convert(int argc, char **
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- out_bs = bdrv_new_open(out_filename, out_fmt);
|
|
|
|
+ out_bs = bdrv_new_open(out_filename, out_fmt, BDRV_O_CACHE_WB|BDRV_O_RDWR);
|
|
|
|
|
|
|
|
bs_i = 0;
|
|
|
|
bs_offset = 0;
|
|
|
|
@@ -706,7 +707,7 @@ static int img_info(int argc, char **arg
|
|
|
|
} else {
|
|
|
|
drv = NULL;
|
|
|
|
}
|
|
|
|
- if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) {
|
|
|
|
+ if (bdrv_open2(bs, filename, BDRV_O_FLAGS|BDRV_O_RDWR, drv) < 0) {
|
|
|
|
error("Could not open '%s'", filename);
|
|
|
|
}
|
|
|
|
bdrv_get_format(bs, fmt_name, sizeof(fmt_name));
|
2010-09-28 00:07:21 +02:00
|
|
|
@@ -810,7 +811,7 @@ static void img_snapshot(int argc, char
|
2009-06-12 20:43:24 +02:00
|
|
|
if (!bs)
|
|
|
|
error("Not enough memory");
|
|
|
|
|
|
|
|
- if (bdrv_open2(bs, filename, 0, NULL) < 0) {
|
|
|
|
+ if (bdrv_open2(bs, filename, BDRV_O_RDWR, NULL) < 0) {
|
|
|
|
error("Could not open '%s'", filename);
|
|
|
|
}
|
|
|
|
|