[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 23/23] block: Handle multiwrite errors only when all
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 23/23] block: Handle multiwrite errors only when all requests have completed |
Date: |
Fri, 2 Jul 2010 18:38:32 +0200 |
Don't try to be clever by freeing all temporary data and calling all callbacks
when the return value (an error) is certain. Doing so has at least two
important problems:
* The temporary data that is freed (qiov, possibly zero buffer) is still used
by the requests that have not yet completed.
* Calling the callbacks for all requests in the multiwrite means for the caller
that it may free buffers etc. which are still in use.
Just remember the error value and do the cleanup when all requests have
completed.
Signed-off-by: Kevin Wolf <address@hidden>
---
block.c | 5 +----
1 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index e65971c..dd6dd76 100644
--- a/block.c
+++ b/block.c
@@ -2042,14 +2042,11 @@ static void multiwrite_cb(void *opaque, int ret)
if (ret < 0 && !mcb->error) {
mcb->error = ret;
- multiwrite_user_cb(mcb);
}
mcb->num_requests--;
if (mcb->num_requests == 0) {
- if (mcb->error == 0) {
- multiwrite_user_cb(mcb);
- }
+ multiwrite_user_cb(mcb);
qemu_free(mcb);
}
}
--
1.6.6.1
- [Qemu-devel] [PULL 00/23] Block patches, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 01/23] qcow2: Fix error handling during metadata preallocation, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 02/23] block: allow filenames with colons again for host devices, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 03/23] scsi: scsi_bus_legacy_handle_cmdline() can fail, fix callers, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 06/23] Don't reset bs->is_temporary in bdrv_open_common, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 10/23] blockdev: drive_get_by_id() is no longer used, remove, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 11/23] block: Catch attempt to attach multiple devices to a blockdev, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 19/23] ide: Make PIIX and ISA IDE init functions return the qdev, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 20/23] pc: Fix CMOS info for drives defined with -device, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 22/23] block: Fix early failure in multiwrite, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 23/23] block: Handle multiwrite errors only when all requests have completed,
Kevin Wolf <=
- [Qemu-devel] [PATCH 21/23] qemu-img: avoid calling exit(1) to release resources properly, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 15/23] blkdebug: Initialize state as 1, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 09/23] qdev: Decouple qdev_prop_drive from DriveInfo, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 07/23] blockdev: New drive_get_by_blockdev(), Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 08/23] blockdev: Clean up automatic drive deletion, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 17/23] block: Clean up bdrv_snapshots(), Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 18/23] block: Fix virtual media change for if=none, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 16/23] savevm: Survive hot-unplug of snapshot device, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 04/23] ide: Make it explicit that ide_create_drive() can't fail, Kevin Wolf, 2010/07/02
- [Qemu-devel] [PATCH 12/23] qemu-option: New qemu_opts_reset(), Kevin Wolf, 2010/07/02