WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] ioemu: fix flags in bdrv_open2

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] ioemu: fix flags in bdrv_open2
From: Wei Kong <weikong.cn@xxxxxxxxx>
Date: Mon, 1 Jun 2009 13:53:10 +0800
Cc: qemu-devel@xxxxxxxxxx
Delivery-date: Sun, 31 May 2009 22:53:44 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:cc:content-type; bh=UmXL1YHzjF9V7pBmwVY17nXGINl/mSPxTq24zJi3cAs=; b=rcLVgZxxUyj1XyP8kWYigBVtRRWcR2oRtyY0hvDVPxE8zZuXc0Wr2PiaqLUOC8URMZ hfg1XZtrXgSdm2JdOTv5sfv8zX+gE5Xs+MqIgB2yiGncS4MDmE/1pPP76JB8iZx5dujB KJtyisQf0gbjEY8OuoRFSbmkCaGuUOG5uX4to=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; b=s2L9W4e+syNpLciMZsSzUA60y22vqcPo32UkoSuTYGu9zms5oALMhN+VH7QwUS9YTB HVAKjRcEjfebnNqoKg7/SeUZPBOILxNIkx1g7xdZazllJOL/9xA7Ui/u+roT6HM436ij /fJyybQAf8snwrRddpiClGcP+6uCT31CrKanQ=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
this patch against for qemu-0.10.5, it's also for xen unstable.

---
If BDRV_O_FILE not set in flags, it doesn't means O_RDWR, the O_RDONLY in flags should be useful.

Signed-off-by: Wei Kong <weikong.cn@gmail.com>

diff -uNrp qemu-0.10.5/block.c qemu-0.10.5.new/block.c
--- qemu-0.10.5/block.c 2009-05-21 04:46:58.000000000 +0800
+++ qemu-0.10.5.new/block.c     2009-06-01 10:30:42.000000000 +0800
@@ -393,12 +393,13 @@ int bdrv_open2(BlockDriverState *bs, con
     }
     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))
-        open_flags = BDRV_O_RDWR | (flags & BDRV_O_CACHE_MASK);
+        open_flags = flags & BDRV_O_CACHE_MASK;
     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);
diff -uNrp qemu-0.10.5/hw/usb-msd.c qemu-0.10.5.new/hw/usb-msd.c
--- qemu-0.10.5/hw/usb-msd.c    2009-05-21 04:46:59.000000000 +0800
+++ qemu-0.10.5.new/hw/usb-msd.c        2009-06-01 10:14:17.000000000 +0800
@@ -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;
diff -uNrp qemu-0.10.5/qemu-img.c qemu-0.10.5.new/qemu-img.c
--- qemu-0.10.5/qemu-img.c      2009-05-21 04:47:00.000000000 +0800
+++ qemu-0.10.5.new/qemu-img.c  2009-06-01 10:28:46.000000000 +0800
@@ -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, ...)
 {
@@ -185,7 +185,7 @@ static int read_password(char *buf, int
 #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 = NULL;
     }
-    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);
@@ -334,7 +334,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_FLAGS|BDRV_O_RDWR, drv) < 0) {
         error("Could not open '%s'", filename);
     }
     ret = bdrv_commit(bs);
@@ -457,7 +457,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);
@@ -487,7 +488,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;
@@ -710,7 +711,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_RDONLY, drv) < 0) {
         error("Could not open '%s'", filename);
     }
     bdrv_get_format(bs, fmt_name, sizeof(fmt_name));
@@ -814,7 +815,7 @@ static void img_snapshot(int argc, char
     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);
     }


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] ioemu: fix flags in bdrv_open2, Wei Kong <=