提交 42fb2807 编写于 作者: A aliguori

bdrv_write should not stop on partial write (Gleb Natapov)

Should return real error instead.
Signed-off-by: NGleb Natapov <gleb@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6323 c046a42c-6fe2-441c-8c8c-71466251a162
上级 c2b3b41a
......@@ -565,21 +565,22 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num,
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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册