From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id A10351FF13B for ; Wed, 03 Jun 2026 10:26:57 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 18B9C2A4E; Wed, 3 Jun 2026 10:26:56 +0200 (CEST) From: Jakob Klocker To: pve-devel@lists.proxmox.com Subject: [PATCH storage] fix #7598: qemu-img resize: tolerate timeout if resize succeeded Date: Wed, 3 Jun 2026 10:25:57 +0200 Message-ID: <20260603082557.25359-1-j.klocker@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.100 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Message-ID-Hash: ZGUS45UER66GTLC6MKCBXAMGQPBWGUK5 X-Message-ID-Hash: ZGUS45UER66GTLC6MKCBXAMGQPBWGUK5 X-MailFrom: root@dev.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 CC: Jakob Klocker X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On slow storages there is a chance the 10 second timeout is triggered when resizing a volume. If the timeout fires while the resize is in a certain state near the end, the operation can still complete successfully even though a timeout error is thrown. In that case the config is never updated and keeps the old, wrong size. Because the config is out of sync, the volume is then displayed with the wrong size in the web interface. Link: https://bugzilla.proxmox.com/show_bug.cgi?id=7598 Signed-off-by: Jakob Klocker --- src/PVE/Storage/Common.pm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/PVE/Storage/Common.pm b/src/PVE/Storage/Common.pm index 3932aee..ee2ea00 100644 --- a/src/PVE/Storage/Common.pm +++ b/src/PVE/Storage/Common.pm @@ -277,7 +277,17 @@ sub qemu_img_resize { push $cmd->@*, '-f', $format, $path, $size; $timeout = 10 if !$timeout; - run_command($cmd, timeout => $timeout); + eval { run_command($cmd, timeout => $timeout); }; + if (my $err = $@) { + + die $err if $err !~ /got timeout/; + + my $info = JSON::decode_json(qemu_img_info($path, $format)); + die $err if !$info; + + my $actual_size = $info->{'virtual-size'}; + die $err if !defined($actual_size) || $actual_size < $size; + } } 1; -- 2.47.3