From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 13A101FF0AF for ; Thu, 10 Sep 2026 13:08:55 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 2639121673; Thu, 10 Sep 2026 13:08:38 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server 6/6] hotplug: remove iothread if adding drive device failed Date: Thu, 10 Sep 2026 13:00:33 +0200 Message-ID: <20260910110832.2822954-7-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260910110832.2822954-1-d.csapak@proxmox.com> References: <20260910110832.2822954-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.483 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: V5VOUAYJP6H7OCVUZUXVC6TSPK6NEW3N X-Message-ID-Hash: V5VOUAYJP6H7OCVUZUXVC6TSPK6NEW3N X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Otherwise it is left over after a failed attempt to add a drive with iothreads. Modify the relevant test that highlighted this problem. The failure can be tested by disabling hotplug, e.g. for a i440fx guest one can use the following commandline switches: -global PIIX4_PM.acpi-root-pci-hotplug=off -global PIIX4_PM.acpi-pci-hotplug-with-bridge-support=off -global pci-bridge.shpc=off to disable hotplug on all pci bridges and the pci root bus. Signed-off-by: Dominik Csapak --- src/PVE/QemuServer.pm | 11 ++++++++++- src/test/hotplug/disk-add-fail.conf.expected | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm index 34073ee8..8fade3fa 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -3906,6 +3906,8 @@ sub vm_deviceplug { if (my $err = $@) { eval { qemu_drivedel($vmid, $deviceid); }; warn $@ if $@; + eval { qemu_iothread_del($vmid, $deviceid, $device) }; + warn $@ if $@; die $err; } } elsif ($deviceid =~ m/^(virtioscsi|scsihw)(\d+)$/) { @@ -3925,7 +3927,14 @@ sub vm_deviceplug { } qemu_deviceadd($vmid, $devicefull); - qemu_deviceaddverify($vmid, $deviceid); + eval { qemu_deviceaddverify($vmid, $deviceid) }; + if (my $err = $@) { + if ($deviceid =~ m/^virtioscsi(\d+)$/ && $device->{iothread}) { + eval { qemu_iothread_del($vmid, $deviceid, $device) }; + warn $@ if $@; + } + die $err; + } } elsif ($deviceid =~ m/^(scsi)(\d+)$/) { qemu_findorcreatescsihw($storecfg, $conf, $vmid, $device, $arch, $machine_type); qemu_driveadd($storecfg, $vmid, $device); diff --git a/src/test/hotplug/disk-add-fail.conf.expected b/src/test/hotplug/disk-add-fail.conf.expected index 8a36d951..28ec8e89 100644 --- a/src/test/hotplug/disk-add-fail.conf.expected +++ b/src/test/hotplug/disk-add-fail.conf.expected @@ -7,12 +7,12 @@ qmp blockdev-add {"detect-zeroes":"on","discard":"ignore","driver":"throttle","f hmp device_add driver=virtio-blk-pci,drive=drive-virtio1,id=virtio1,bus=pci.0,addr=0xb,iothread=iothread-virtio1,write-cache=on qmp blockdev-del {"node-name":"drive-virtio1"} qmp object-del {"id":"throttle-drive-virtio1"} +qmp object-del {"id":"iothread-virtio1"} # hotplug errors virtio1: hotplug problem - error on hotplug device 'virtio1' # differences to a freshly started VM -object iothread-virtio1: only present in running VM # resulting config bootdisk: scsi0 -- 2.47.3