[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 01/12] blkdebug: Use QLIST_FOREACH_SAFE to resume
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH v8 01/12] blkdebug: Use QLIST_FOREACH_SAFE to resume IO |
Date: |
Fri, 13 Dec 2013 15:35:09 +0800 |
Qemu-iotest 030 was broken.
When the coroutine runs and finishes, it will remove itself from the req
list, so let's use safe version of foreach to avoid use after free.
Signed-off-by: Fam Zheng <address@hidden>
---
block/blkdebug.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/block/blkdebug.c b/block/blkdebug.c
index 37cf028..957be2c 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -594,9 +594,9 @@ static int blkdebug_debug_breakpoint(BlockDriverState *bs,
const char *event,
static int blkdebug_debug_resume(BlockDriverState *bs, const char *tag)
{
BDRVBlkdebugState *s = bs->opaque;
- BlkdebugSuspendedReq *r;
+ BlkdebugSuspendedReq *r, *next;
- QLIST_FOREACH(r, &s->suspended_reqs, next) {
+ QLIST_FOREACH_SAFE(r, &s->suspended_reqs, next, next) {
if (!strcmp(r->tag, tag)) {
qemu_coroutine_enter(r->co, NULL);
return 0;
@@ -609,7 +609,7 @@ static int
blkdebug_debug_remove_breakpoint(BlockDriverState *bs,
const char *tag)
{
BDRVBlkdebugState *s = bs->opaque;
- BlkdebugSuspendedReq *r;
+ BlkdebugSuspendedReq *r, *r_next;
BlkdebugRule *rule, *next;
int i, ret = -ENOENT;
@@ -622,7 +622,7 @@ static int
blkdebug_debug_remove_breakpoint(BlockDriverState *bs,
}
}
}
- QLIST_FOREACH(r, &s->suspended_reqs, next) {
+ QLIST_FOREACH_SAFE(r, &s->suspended_reqs, next, r_next) {
if (!strcmp(r->tag, tag)) {
qemu_coroutine_enter(r->co, NULL);
ret = 0;
--
1.8.5.1
- [Qemu-devel] [PATCH v8 00/12] Drop in_use from BlockDriverState and enable point-in-time snapshot exporting over NBD, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 01/12] blkdebug: Use QLIST_FOREACH_SAFE to resume IO,
Fam Zheng <=
- [Qemu-devel] [PATCH v8 04/12] block: Replace in_use with operation blocker, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 05/12] block: Move op_blocker check from block_job_create to its caller, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 02/12] qapi: Add BlockOperationType enum, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 06/12] block: Add bdrv_set_backing_hd(), Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 08/12] block: Parse "backing" option to reference existing BDS, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 12/12] block: Allow backup on referenced named BlockDriverState, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 03/12] block: Introduce op_blockers to BlockDriverState, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 10/12] stream: Use bdrv_drop_intermediate and drop close_unused_images, Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 11/12] qmp: Add command 'blockdev-backup', Fam Zheng, 2013/12/13
- [Qemu-devel] [PATCH v8 09/12] block: Support dropping active in bdrv_drop_intermediate, Fam Zheng, 2013/12/13