From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021139.outbound.protection.outlook.com [40.107.130.139]) by lore.virtuozzo.com (Postfix) with ESMTPS id 54C9F8017D for ; Mon, 26 Oct 2026 11:11:46 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l9oMqdJszhoApOwmfU8U1aKMyQp1xn6Kw4DLrXQQ1ShOk6oVkFoUdGrTTxFX1DNJjgm2/Op2UQUg8nSJwjDZCtXtFtYQhwjrG4X9SEfAARURrUPdSjxabgX7+CDN2pO2DGD3NaravMwJMzTKteqHRQwJZXHzE7J/eyH9S8WkICQ4MfCIfgAV7ZJbIHbPalj7H7ClyWu/d7XQOHtbrxxPLnH387MphZ5ZX/S8wLVB93q20lqzxfWGVDRbzgfXVqnE1AcxJTZ2L32AciHppttIqrQGg+/LskNVmkQMRWF/Ut9xbMKXPbt7zN+gdKKuTTjZQSb+Cb0HlVa6m8KYGodH6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=SAoqLSI2E4yvqJJ30/1tIxKvN40lB1o8raL0bX0DUkY=; b=TSQ6dpIzPdG6xQOXQEAf9kc0zRrpWjkwwK5jh3GDDXGfPBWcTidXyvoGpiemzHMFABXoSxzJGQG1o+iDe8R6YrNmc4orUgtNg1sfnPTxNq9//ERTkzWWTc8oPniW+1CgkvzH7YDv6wBcARS0LIjLtmF/90R5XXWRs7ZQuozfeyooOqWSMuDUamM3Z284uMFHvY45bmX7T/5EKjgiU++4MVFcd+q//uqL7dpduDxTiupCu7SvtOa5uBflB9CcOLOv9iG4NH2eepksNoYgPi/fpuX4Fua60Z5DmSayEbjEIYk8cANhOSNKOIQ/yl7DgYsz+IENW9g8locWIezD3JwHvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 2a00:1450:4864:20::634) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=openvz.org; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=openvz.org; dkim=pass (signature was verified) header.d=openvz.org; arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.onmicrosoft.com; s=selector2-virtuozzo-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SAoqLSI2E4yvqJJ30/1tIxKvN40lB1o8raL0bX0DUkY=; b=cfua7A3xEHwPFr9SZ+MOYNhwhT11Fgz72wWpm7XQ6LiRAh4tedMGqcu0HBft3mf25s1CvpZ1aq5HEZCJd8xQNNzS7Kdm/Y6WaigWJxD/HvL+34FDpuC9sYw6GiSHECFreA/Bo8Tg78JmhB5G+0wf+c5OzLCvbCfIk7s7iCHTZZM= Received: from AS4P251CA0004.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:5d2::6) by DB4PR08MB8080.eurprd08.prod.outlook.com (2603:10a6:10:384::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.22; Mon, 26 Oct 2026 11:11:39 +0000 Received: from DU6PEPF0000A7E1.eurprd02.prod.outlook.com (2603:10a6:20b:5d2:cafe::61) by AS4P251CA0004.outlook.office365.com (2603:10a6:20b:5d2::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.546.22 via Frontend Transport; Mon, 26 Oct 2026 11:11:39 +0000 Authentication-Results: mx.microsoft.com 1; spf=pass (sender IP is 2a00:1450:4864:20::634) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org; Received-SPF: Pass (protection.outlook.com: domain of openvz.org designates 2a00:1450:4864:20::634 as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:20::634; helo=mail-ej1-x634.google.com; pr=C Received: from mail-ej1-x634.google.com (2a00:1450:4864:20::634) by DU6PEPF0000A7E1.mail.protection.outlook.com (2603:10a6:18:3::88) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.569.4 via Frontend Transport; Mon, 26 Oct 2026 11:11:38 +0000 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-c37b612635bso354349166b.3 for ; Mon, 26 Oct 2026 04:11:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1793013098; x=1793617898; darn=virtuozzo.com; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SAoqLSI2E4yvqJJ30/1tIxKvN40lB1o8raL0bX0DUkY=; b=EQZ5Ww4ny51HyZ8iOE0OGdGoGxrRtmJfjosfSkDxIT02ihgC3PMpYbPLNY0ntSsgzR cdYgaJVkroA2vCIBzjxjVAxa1EdNkgRuSMELU5BFv4EVW9BMMUJiJLB6i3dNp8iurY17 AZn57S6zrFCPUQs/cURfFXhPY51jb3m7AwiXjYWDHtgjPlh7V7mlQxSrMe8RQiEH/bS0 ZAJuNCWn2OQXHpoe1aXajrFRkb6M3wDIJdA/jaDTZh3CA9DvmmigAn21KP4Fm1Tnbk62 tefcIBkDqyceQ/esztxrKMcBLAp+XDmCV9n7p2i9i6YDMM6eTe9oc8QPGF9ybjtbcO0L UZ9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793013098; x=1793617898; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=SAoqLSI2E4yvqJJ30/1tIxKvN40lB1o8raL0bX0DUkY=; b=11ytcvBgyXbZ1Y1Q/KsTVZowhbIP9itXW7A7pf7B8ku8ghCV2+oDnl0jlinu9kPnlA 8ezSQ//o1fadxljnNGZsxc3Pfa8qylctkYI+rVnLh9uor25Ng/dMBz59sbdLr7COJInp Cig4wKv2sVKVOhTTtQ/3oqX4+wBCj46EuzIj77hTk1nBoEBKZHnkwJ4p9EyYX4+NaCcz o5YRLxjxVSNhG9qra0/f65TQBjMp9n9FMKOgpZoRHtqa6uMXb6l8nlnEOgj2OFkEUC5T rG8jGGx2rQ0w0JfkHlcU/PVibfyylRWDkdhJ/lXka+/dzbV9h89BXDARJ5eh/8qp+Rls hJVw== X-Gm-Message-State: AFq9FYI8M/2XVIGOah8NZD6lslAsRdD1x8/JcRcjkqmDwFRx9VsG8EFu KR/6eoobcPknnZvpHfluGWpFd60o+hlFR536xiF82L2QilLYiTJv4vtSS07qo4FdRFfqhQ== X-Gm-Gg: AYBFou15wxuEcFsus3e9zXK4O3cdxGyLDs/eSIA07mhpn918ZoP+KHRPDIAs7T2ulia hLVnmsvScy66v51eT2kCGsNl/+C5ECa2Xd1oILiGHOg3cyVHkWZYpxRjAW67HfYQeiWg94O3uhc seqCM2jkXf0lXnsan/fl8e7N5fWimabAqiQ4IWj+FBhDlK4HHPABD7Jeewo/8pEhM3Nxzt8Fomm VMkI2zTDJF8gg4ZTnNrpK9FH3lv6zg5sF4t44k+Ck71S9VR+HtT0EkuKwVqUJ6r6rve9o3bgYEH 7p/pvCXaLTgZH4FppSXDfH6HGp0ldBryDCBBIvCUBbVjxev+1metibzXA6xk7E8ZImLLUWzIFh4 mgZiWrhd8qDdI6sMjcMWXorgd/JwJG79OuYcNzv2DjGjqg0YWALXUdHIwW8/mwsLlmbHjhEhdQg As8z3JT+OU81IliLCCONJu1oNBHb4m7pJ+ODa0ac9TVnm5+k+oHbaFtwYFg+FKJvmE7Q/J5K7yY NuNSjHeDo1aqgUDb694vElAcHsPU81T+08neSkmwtLoQ9yrx0c= X-Received: by 2002:a17:907:6ea4:b0:c41:b94c:4539 with SMTP id a640c23a62f3a-c46bdaa7f8dmr781236166b.6.1793013097896; Mon, 26 Oct 2026 04:11:37 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:1a6:7f7f:f573:ba9e]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48e3ece5e4asm15587335f8f.59.2026.10.26.04.11.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Oct 2026 04:11:37 -0700 (PDT) From: "Denis V. Lunev" To: andrey.drobyshev@virtuozzo.com Cc: svt-core@virtuozzo.com, den@openvz.org Subject: [PATCH hci-8.1 1/1] virtio-scsi: fix hot-plug event racing device realize #VSTOR-151351 Date: Mon, 26 Oct 2026 12:11:34 +0100 Message-ID: <20261026111134.145823-2-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261026111134.145823-1-den@openvz.org> References: <20261026111134.145823-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU6PEPF0000A7E1:EE_|DB4PR08MB8080:EE_ X-MS-Office365-Filtering-Correlation-Id: 0132feeb-a4e6-465d-4192-08df3351e7f6 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 0 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|704162011799003|376014|82310400026|6059299003|9140799003|48200799018|43022699015|61400799027|16102099003|22082099003|55112099003|18002099003|5063699009|56012099006|5023799004|261021121427099003|261021123027099003|10067099003|261009223027099003|261022075727099003|261022105027099003; X-Microsoft-Antispam-Message-Info: trSAhxQM9w27nTaNZA9txWSHlAoenvNF35ZYN6T+Vm3qO5juNyktUx6MdGktRoTLnCP+Jd61lOl6lPpOBGNx3rOrbmmg2ciSoCh67UNZ4NwWuIGuuGMgtAF7JU/U1Z/faAcwmBZB3KPvcMHM8BR1Tt7NCGFbj5uglciiGZzA8ZfJLG8DVzrGIFJcCcUcietF3p+NLJbVl5PTFIkchNuPITS4ly/BcmOyPXs6JWqRS0+0AGxt2bIJtLIQNCORONylIXt7uCccuwDuk2KDTA1UWwS2QBm21b+QYs7RKC4zujg6K3p7uoFFPFfInPjE8+gb738glV7mWQHb2bM78cYwz8ER3ol1uFjNW/wMHrzbrfcgrRknajzawZQgv7zxlzFIx+oC0dgoVDRqx4YEyboW7V72oYZv0K+s78U6Z5GOA2MqFqmoWmroYrHmVxCbsYuVs6w7C1GFH4uAzixUxvqHyEPi6vShEnOht8J1X5i/7jDTldSxHg/LMYFcD5PHahtkrQjMAifIqP9U1/JNd2bTH4cyp9LIhJhCq3pwDiQOujy1FAeAhK55266vxUpFL+Tilb0MNMQ+fYujG3at9cOv/6I5dYXQnE8bWEuWLhASmGfeRVRjFJhjpkHBRqrGW4wTR2AKe9kC87omErPmzeICdbkahWKWpTeT/q5Qzw0iPeRY3RoLxZXz+zc/Cq/ToBypcZiyKJW7qVl/VVgmGNfFhjq7xdIZXA9qjkldb+nqMoXeFKg5wKguGuk782FKHsfrqYGlP3jSqXkgu8dNqjBOpUOl7dc+6PQ2nxPRdbccgLLPi/QnuL3elbqyr2nep1MldGqwlJlerkUqVhxUmSkBIf2AFM46IjWLVEwrSPIKnpKwvBL+UBoFqhwHL9Eni8a8ND/FgwcAFnkDgSiL/z193w== X-Forefront-Antispam-Report: CIP:2a00:1450:4864:20::634;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-ej1-x634.google.com;PTR:mail-ej1-x634.google.com;CAT:NONE;SFS:(13230040)(704162011799003)(376014)(82310400026)(6059299003)(9140799003)(48200799018)(43022699015)(61400799027)(16102099003)(22082099003)(55112099003)(18002099003)(5063699009)(56012099006)(5023799004)(261021121427099003)(261021123027099003)(10067099003)(261009223027099003)(261022075727099003)(261022105027099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cGZubj2INKXmkh/HILi1p9aNsxK2ZszFwKLIhuMMkIBvlPDBo0inkp9cyEJ0N1jF51EZ5rHujYQbwux+PrM6Q7Ok6Gq8GEYeoZXy4TJoNyg3fGHhOj24QVkbgIWz2lwTSYaLfIGLMvO4XN847NYe+0/+GX6cZXHzk1b2TzIaMY+QLVKWdhg20Xf0Cb383enQ8INCi6TLzDG0p/bJEecPPAV03IqeIqb6tBWDCl/R16vjUsqYO34rUX6lFyBKrNrL6KWoAJY888BPhIQHWOOMdwq1gr7fyjPVl7L6AoYjv93/uQHQy+guwKrsMzcJsDdaD0sKyQ2b9FERcJRmDIM+nI2sxHhZ/mrq/t9JtZYlUeX0pU4abJPyuDEyVgniJ8mujerFsJueFcPgc9MYKVynHzm0ENm9oiuh1X/PR0QZtVQN1Aa/wvSSQsCa3Z1roail X-ExternalRecipientOutboundConnectors: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2026 11:11:38.6172 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0132feeb-a4e6-465d-4192-08df3351e7f6 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF0000A7E1.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB8080 List-Id: From: Denis V. Lunev virtio_scsi_hotplug() is the HotplugHandler plug() callback, which device_set_realized() calls before it sets dev->realized. The callback pushes VIRTIO_SCSI_T_TRANSPORT_RESET/RESCAN to the guest at once, but until realized is set the request path ignores the new device: virtio_scsi_device_get() -> scsi_device_get() skips unrealized devices, and so does REPORT LUNS. A guest that reacts to the event quickly, on a vCPU while the request queue is served by an iothread, scans the target and gets VIRTIO_SCSI_S_BAD_TARGET. Neither Linux nor Windows retries that scan, so the hot-plugged disk or CD-ROM stays invisible until somebody rescans the bus by hand. Linux calls scsi_scan_target() once from the event handler. Windows storport clears its rescan flag before enumerating the bus and never sets it again for a failed target. Push the event, and the REPORTED LUNS CHANGED unit attention that goes with it, from a main-loop bottom half instead. It runs under the BQL, which device_add holds until device_set_realized() returns, so the guest is only told about a device it can reach. The iothread context would not do: its bottom half could run before realized is set, and the realized check and scsi_bus_set_ua() rely on the BQL as plug() did. The bottom half is only scheduled when the guest negotiated VIRTIO_SCSI_F_HOTPLUG, as before, so cold-plugged devices do not get one. It still checks that the device is realized: nothing orders it against a device_del that follows device_add, and an unplugged device has no parent bus. Fixes: 8ddf958e8d62 ("scsi/scsi-bus: scsi_device_find: don't return unrealized devices") Cc: qemu-stable@nongnu.org Reported-by: Ilya Rudakov Signed-off-by: Denis V. Lunev Cc: Paolo Bonzini Cc: Fam Zheng Cc: "Michael S. Tsirkin" --- hw/scsi/virtio-scsi.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 3b635053b56..69b34adde22 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -1145,6 +1145,29 @@ static void virtio_scsi_pre_hotplug(HotplugHandler *hotplug_dev, sd->hba_supports_iothread = true; } +static void virtio_scsi_hotplug_notify_bh(void *opaque) +{ + SCSIDevice *sd = opaque; + DeviceState *dev = DEVICE(sd); + + /* Nothing orders us against a following device_del */ + if (qdev_is_realized(dev)) { + VirtIOSCSI *s = VIRTIO_SCSI(dev->parent_bus->parent); + VirtIOSCSIEventInfo info = { + .event = VIRTIO_SCSI_T_TRANSPORT_RESET, + .reason = VIRTIO_SCSI_EVT_RESET_RESCAN, + .address = { + .id = sd->id, + .lun = sd->lun, + }, + }; + + virtio_scsi_push_event(s, &info); + scsi_bus_set_ua(&s->bus, SENSE_CODE(REPORTED_LUNS_CHANGED)); + } + object_unref(OBJECT(sd)); +} + static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp) { @@ -1163,17 +1186,10 @@ static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev, } if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) { - VirtIOSCSIEventInfo info = { - .event = VIRTIO_SCSI_T_TRANSPORT_RESET, - .reason = VIRTIO_SCSI_EVT_RESET_RESCAN, - .address = { - .id = sd->id, - .lun = sd->lun, - }, - }; - - virtio_scsi_push_event(s, &info); - scsi_bus_set_ua(&s->bus, SENSE_CODE(REPORTED_LUNS_CHANGED)); + /* The request path ignores @sd until it is realized, so notify after */ + object_ref(OBJECT(sd)); + aio_bh_schedule_oneshot(qemu_get_aio_context(), + virtio_scsi_hotplug_notify_bh, sd); } } -- 2.53.0