[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/9] block/qcow: Don't ignore immediate read/write a
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 2/9] block/qcow: Don't ignore immediate read/write and other failures |
Date: |
Wed, 16 Mar 2011 11:47:54 +0100 |
From: Stefan Weil <address@hidden>
This patch is similar to 171e3d6b9997c98a97d0c525867f7cd9b640cadd
which fixed qcow2:
Returning -EIO is far from optimal, but at least it's an error code.
In addition to read/write failures, -EIO is also returned when
decompress_cluster failed.
Cc: Kevin Wolf <address@hidden>
Signed-off-by: Stefan Weil <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/qcow.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/block/qcow.c b/block/qcow.c
index f67d3d3..a26c886 100644
--- a/block/qcow.c
+++ b/block/qcow.c
@@ -589,8 +589,10 @@ static void qcow_aio_read_cb(void *opaque, int ret)
qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1);
acb->hd_aiocb = bdrv_aio_readv(bs->backing_hd, acb->sector_num,
&acb->hd_qiov, acb->n, qcow_aio_read_cb, acb);
- if (acb->hd_aiocb == NULL)
+ if (acb->hd_aiocb == NULL) {
+ ret = -EIO;
goto done;
+ }
} else {
/* Note: in this case, no need to wait */
memset(acb->buf, 0, 512 * acb->n);
@@ -598,8 +600,10 @@ static void qcow_aio_read_cb(void *opaque, int ret)
}
} else if (acb->cluster_offset & QCOW_OFLAG_COMPRESSED) {
/* add AIO support for compressed blocks ? */
- if (decompress_cluster(bs, acb->cluster_offset) < 0)
+ if (decompress_cluster(bs, acb->cluster_offset) < 0) {
+ ret = -EIO;
goto done;
+ }
memcpy(acb->buf,
s->cluster_cache + index_in_cluster * 512, 512 * acb->n);
goto redo;
@@ -614,8 +618,10 @@ static void qcow_aio_read_cb(void *opaque, int ret)
acb->hd_aiocb = bdrv_aio_readv(bs->file,
(acb->cluster_offset >> 9) + index_in_cluster,
&acb->hd_qiov, acb->n, qcow_aio_read_cb, acb);
- if (acb->hd_aiocb == NULL)
+ if (acb->hd_aiocb == NULL) {
+ ret = -EIO;
goto done;
+ }
}
return;
@@ -700,8 +706,10 @@ static void qcow_aio_write_cb(void *opaque, int ret)
(cluster_offset >> 9) + index_in_cluster,
&acb->hd_qiov, acb->n,
qcow_aio_write_cb, acb);
- if (acb->hd_aiocb == NULL)
+ if (acb->hd_aiocb == NULL) {
+ ret = -EIO;
goto done;
+ }
return;
done:
--
1.7.2.3
- [Qemu-devel] [PULL 0/9] Block patches, Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 2/9] block/qcow: Don't ignore immediate read/write and other failures,
Kevin Wolf <=
- [Qemu-devel] [PATCH 1/9] block/vdi: Don't ignore immediate read/write failures, Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 5/9] Don't allow multiwrites against a block device without underlying medium, Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 3/9] Add error message for loading snapshot without VM state, Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 4/9] tools: Use real async.c instead of stubs, Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 6/9] Fix ATA SMART and CHECK POWER MODE, Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 7/9] Improve error handling in do_snapshot_blkdev(), Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 8/9] hw/xen_disk: aio_inflight not released in handling ioreq when nr_segments==0, Kevin Wolf, 2011/03/16
- [Qemu-devel] [PATCH 9/9] Add qcow2 documentation, Kevin Wolf, 2011/03/16
- [Qemu-devel] Re: [PULL 0/9] Block patches, Kevin Wolf, 2011/03/21