From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lhxoe-0007Bm-AE for qemu-devel@nongnu.org; Thu, 12 Mar 2009 23:12:08 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lhxoc-0007Ba-06 for qemu-devel@nongnu.org; Thu, 12 Mar 2009 23:12:07 -0400 Received: from [199.232.76.173] (port=43262 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lhxob-0007BX-Ql for qemu-devel@nongnu.org; Thu, 12 Mar 2009 23:12:05 -0400 Received: from savannah.gnu.org ([199.232.41.3]:51474 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Lhxob-0003gE-J8 for qemu-devel@nongnu.org; Thu, 12 Mar 2009 23:12:05 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Lhxoa-00072r-R3 for qemu-devel@nongnu.org; Fri, 13 Mar 2009 03:12:04 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.69) (envelope-from ) id 1Lhxoa-00072n-BC for qemu-devel@nongnu.org; Fri, 13 Mar 2009 03:12:04 +0000 MIME-Version: 1.0 Errors-To: aliguori Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Anthony Liguori Message-Id: Date: Fri, 13 Mar 2009 03:12:04 +0000 Subject: [Qemu-devel] [6828] Fix regression introduced by r6824 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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 Reported-by: Herve Poussineau Signed-off-by: Anthony Liguori 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; }