On 10/23/26 18:19, Denis V. Lunev wrote: > This email originated from an IP that might not be authorized by the domain > it was sent from. > Do not click links or open attachments unless it is an email you expected to > receive. > A disk or CD-ROM hot-plugged into virtio-scsi sometimes never shows up > in the guest. QEMU has the device, the guest has consumed the RESCAN > event, and a manual bus rescan finds the LUN at once. We see this in CI > with Windows Server guests (vioscsi) and with Linux guests, always with > the controller on an iothread. > > The event is pushed from the plug() callback, before the device is > realized, and the iothread request path does not see unrealized devices > since 8ddf958e8d62. A guest that scans right away gets BAD_TARGET and > does not retry. The patch moves the event to a main-loop bottom half. > The alternative, letting the request path see a plugged but unrealized > device, would undo what 8ddf958e8d62 protects against. > > There is no test in the patch. The window lies inside a single > device_add under the BQL, and a qtest or iotests client is served by the > same main loop, so it cannot send a request in between. To reproduce, I > booted a Linux guest with virtio-scsi on an iothread, ran QEMU under gdb > in non-stop mode and stalled the main thread for 3 s in > scsi_bus_set_ua(), right after the event is pushed, then hot-plugged a > scsi-cd: > > break scsi_bus_set_ua > commands > call (int)usleep(3000000) > continue > end > > Without the patch the guest never enumerated the LUN (3 of 3 runs). > With the patch the same stall falls after realize and the LUN appeared > every time (3 of 3). Without the stall both builds pass, which is why > this only shows up on loaded hosts. tests/qtest virtio-scsi passes. > > Every release since 5.2 has the bug, hence qemu-stable. > > Signed-off-by: Denis V. Lunev <[email protected]> > Cc: Paolo Bonzini <[email protected]> > Cc: Fam Zheng <[email protected]> > Cc: "Michael S. Tsirkin" <[email protected]> > > Denis V. Lunev (1): > virtio-scsi: fix hot-plug event racing device realize > > hw/scsi/virtio-scsi.c | 38 +++++++++++++++++++++++++++----------- > 1 file changed, 27 insertions(+), 11 deletions(-) > > > base-commit: b6c4b7e86dec12d07f5cac65265b986d38ee9002 ping
