[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH] block-backend: Preserve AioContext of root across m
From: |
Fam Zheng |
Subject: |
[Qemu-block] [PATCH] block-backend: Preserve AioContext of root across medium change |
Date: |
Fri, 23 Sep 2016 18:58:19 +0800 |
This is nop for non-dataplane case, but it prevents crash
(virtio_scsi_ctx_check assertion failure) when a scsi-cd change
operation happens on a virtio-scsi dataplane device.
Cc: address@hidden
Signed-off-by: Fam Zheng <address@hidden>
---
block/block-backend.c | 7 +++++++
include/block/block_int.h | 1 +
2 files changed, 8 insertions(+)
diff --git a/block/block-backend.c b/block/block-backend.c
index d1349d9..c2cae9a 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1570,6 +1570,7 @@ void blk_update_root_state(BlockBackend *blk)
blk->root_state.open_flags = blk->root->bs->open_flags;
blk->root_state.read_only = blk->root->bs->read_only;
blk->root_state.detect_zeroes = blk->root->bs->detect_zeroes;
+ blk->root_state.aio_context = blk->root->bs->aio_context;
}
/*
@@ -1579,7 +1580,13 @@ void blk_update_root_state(BlockBackend *blk)
*/
void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs)
{
+ AioContext *ctx = blk->root_state.aio_context;
bs->detect_zeroes = blk->root_state.detect_zeroes;
+ if (ctx && ctx != qemu_get_aio_context()) {
+ aio_context_acquire(ctx);
+ bdrv_set_aio_context(bs, ctx);
+ aio_context_release(ctx);
+ }
}
/*
diff --git a/include/block/block_int.h b/include/block/block_int.h
index ef3c047..23c64d2 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -534,6 +534,7 @@ struct BlockBackendRootState {
int open_flags;
bool read_only;
BlockdevDetectZeroesOptions detect_zeroes;
+ AioContext *aio_context;
};
typedef enum BlockMirrorBackingMode {
--
2.7.4
- [Qemu-block] [PATCH] block-backend: Preserve AioContext of root across medium change,
Fam Zheng <=