All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [6828] Fix regression introduced by r6824
@ 2009-03-13  3:12 Anthony Liguori
  0 siblings, 0 replies; only message in thread
From: Anthony Liguori @ 2009-03-13  3:12 UTC (permalink / raw)
  To: qemu-devel

Revision: 6828
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6828
Author:   aliguori
Date:     2009-03-13 03:12:03 +0000 (Fri, 13 Mar 2009)
Log Message:
-----------
Fix regression introduced by r6824

The changes introduced by r6824 broke a subtle, and admittedly obscure, aspect
of the block API.  While bdrv_{pread,pwrite} return the number of bytes read
or written upon success, bdrv_{read,write} returns a zero upon success.

When using bdrv_pread for bdrv_read, special care must be taken to handle this
case.

This fixes certain guest images (notably linux-0.2 provided on the qemu
website).

Reported-by: malc <av1474@comtv.ru>
Reported-by: Herve Poussineau <hpoussin@reactos.org>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>

Modified Paths:
--------------
    trunk/block-raw-posix.c
    trunk/block-raw-win32.c

Modified: trunk/block-raw-posix.c
===================================================================
--- trunk/block-raw-posix.c	2009-03-12 20:25:12 UTC (rev 6827)
+++ trunk/block-raw-posix.c	2009-03-13 03:12:03 UTC (rev 6828)
@@ -361,7 +361,12 @@
 static int raw_read(BlockDriverState *bs, int64_t sector_num,
                     uint8_t *buf, int nb_sectors)
 {
-    return raw_pread(bs, sector_num * 512, buf, (uint64_t)nb_sectors * 512);
+    int ret;
+
+    ret = raw_pread(bs, sector_num * 512, buf, nb_sectors * 512);
+    if (ret == (nb_sectors * 512))
+        ret = 0;
+    return ret;
 }
 
 /*
@@ -445,7 +450,11 @@
 static int raw_write(BlockDriverState *bs, int64_t sector_num,
                      const uint8_t *buf, int nb_sectors)
 {
-    return raw_pwrite(bs, sector_num * 512, buf, (uint64_t)nb_sectors * 512);
+    int ret;
+    ret = raw_pwrite(bs, sector_num * 512, buf, nb_sectors * 512);
+    if (ret == (nb_sectors * 512))
+        ret = 0;
+    return ret;
 }
 
 #ifdef CONFIG_AIO

Modified: trunk/block-raw-win32.c
===================================================================
--- trunk/block-raw-win32.c	2009-03-12 20:25:12 UTC (rev 6827)
+++ trunk/block-raw-win32.c	2009-03-13 03:12:03 UTC (rev 6828)
@@ -145,6 +145,8 @@
 #endif
             return ret_count;
     }
+    if (ret_count == count)
+        ret_count = 0;
     return ret_count;
 }
 
@@ -171,6 +173,8 @@
 #endif
             return ret_count;
     }
+    if (ret_count == count)
+        ret_count = 0;
     return ret_count;
 }
 

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-03-13  3:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-03-13  3:12 [Qemu-devel] [6828] Fix regression introduced by r6824 Anthony Liguori

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.