44 lines
1.6 KiB
Diff
44 lines
1.6 KiB
Diff
|
|
From 87d8b7dcd880e0cef0c043dfef5ae649652cfe21 Mon Sep 17 00:00:00 2001
|
||
|
|
From: WangJian <wangjian161@huawei.com>
|
||
|
|
Date: Wed, 9 Feb 2022 11:51:43 +0800
|
||
|
|
Subject: [PATCH] block: bugfix: disable process AIO when attach scsi disk
|
||
|
|
|
||
|
|
When initializing the virtio-scsi disk, hd_geometry_guess() will
|
||
|
|
be called to process AIO. At this time, the scsi disk has not
|
||
|
|
been fully initialized, and some fields in struct SCSIDiskState,
|
||
|
|
such as vendor and version, are NULL. If processing AIO at this
|
||
|
|
time, qemu may crash down.
|
||
|
|
|
||
|
|
Add aio_disable_external() before hd_geometry_guess() to disable
|
||
|
|
processing AIO at that time.
|
||
|
|
|
||
|
|
Signed-off-by: wangjian161 <wangjian161@huawei.com>
|
||
|
|
---
|
||
|
|
hw/block/block.c | 7 +++++++
|
||
|
|
1 file changed, 7 insertions(+)
|
||
|
|
|
||
|
|
diff --git a/hw/block/block.c b/hw/block/block.c
|
||
|
|
index 26c0767552..2cfc93a68e 100644
|
||
|
|
--- a/hw/block/block.c
|
||
|
|
+++ b/hw/block/block.c
|
||
|
|
@@ -224,9 +224,16 @@ bool blkconf_geometry(BlockConf *conf, int *ptrans,
|
||
|
|
Error **errp)
|
||
|
|
{
|
||
|
|
if (!conf->cyls && !conf->heads && !conf->secs) {
|
||
|
|
+ AioContext *ctx = blk_get_aio_context(conf->blk);
|
||
|
|
+
|
||
|
|
+ /* Callers may not expect this function to dispatch aio handlers, so
|
||
|
|
+ * disable external aio such as guest device emulation.
|
||
|
|
+ */
|
||
|
|
+ aio_disable_external(ctx);
|
||
|
|
hd_geometry_guess(conf->blk,
|
||
|
|
&conf->cyls, &conf->heads, &conf->secs,
|
||
|
|
ptrans);
|
||
|
|
+ aio_enable_external(ctx);
|
||
|
|
} else if (ptrans && *ptrans == BIOS_ATA_TRANSLATION_AUTO) {
|
||
|
|
*ptrans = hd_bios_chs_auto_trans(conf->cyls, conf->heads, conf->secs);
|
||
|
|
}
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|