From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LNZ42-0004eV-7y for qemu-devel@nongnu.org; Thu, 15 Jan 2009 15:43:42 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LNZ40-0004cF-PC for qemu-devel@nongnu.org; Thu, 15 Jan 2009 15:43:41 -0500 Received: from [199.232.76.173] (port=51847 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LNZ40-0004c4-LB for qemu-devel@nongnu.org; Thu, 15 Jan 2009 15:43:40 -0500 Received: from savannah.gnu.org ([199.232.41.3]:38285 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 1LNZ40-0000gl-9t for qemu-devel@nongnu.org; Thu, 15 Jan 2009 15:43:40 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LNZ3z-0004Y3-KU for qemu-devel@nongnu.org; Thu, 15 Jan 2009 20:43:39 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LNZ3z-0004Xz-Ce for qemu-devel@nongnu.org; Thu, 15 Jan 2009 20:43:39 +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: Thu, 15 Jan 2009 20:43:39 +0000 Subject: [Qemu-devel] [6323] bdrv_write should not stop on partial write (Gleb Natapov) 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: 6323 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6323 Author: aliguori Date: 2009-01-15 20:43:39 +0000 (Thu, 15 Jan 2009) Log Message: ----------- bdrv_write should not stop on partial write (Gleb Natapov) Should return real error instead. Signed-off-by: Gleb Natapov Signed-off-by: Anthony Liguori Modified Paths: -------------- trunk/block.c Modified: trunk/block.c =================================================================== --- trunk/block.c 2009-01-15 20:37:28 UTC (rev 6322) +++ trunk/block.c 2009-01-15 20:43:39 UTC (rev 6323) @@ -565,21 +565,22 @@ if (bs->read_only) return -EACCES; if (drv->bdrv_pwrite) { - int ret, len; + int ret, len, count = 0; len = nb_sectors * 512; - ret = drv->bdrv_pwrite(bs, sector_num * 512, buf, len); - if (ret < 0) - return ret; - else if (ret != len) - return -EIO; - else { - bs->wr_bytes += (unsigned) len; - bs->wr_ops ++; - return 0; - } - } else { - return drv->bdrv_write(bs, sector_num, buf, nb_sectors); + do { + ret = drv->bdrv_pwrite(bs, sector_num * 512, buf, len - count); + if (ret < 0) { + printf("bdrv_write ret=%d\n", ret); + return ret; + } + count += ret; + buf += ret; + } while (count != len); + bs->wr_bytes += (unsigned) len; + bs->wr_ops ++; + return 0; } + return drv->bdrv_write(bs, sector_num, buf, nb_sectors); } static int bdrv_pread_em(BlockDriverState *bs, int64_t offset,