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 2231E1FF17C for ; Mon, 09 Mar 2026 18:00:24 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A98435940; Mon, 9 Mar 2026 17:59:37 +0100 (CET) From: Fiona Ebner To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server v2 12/18] block job: switch qemu_blockjobs_cancel() to use QMP peer Date: Mon, 9 Mar 2026 17:58:38 +0100 Message-ID: <20260309165913.219308-13-f.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260309165913.219308-1-f.ebner@proxmox.com> References: <20260309165913.219308-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1773075525167 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.004 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 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: JIBJGC2IB7NAXPW4DK6OCH23C4IPMXJE X-Message-ID-Hash: JIBJGC2IB7NAXPW4DK6OCH23C4IPMXJE X-MailFrom: f.ebner@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: Signed-off-by: Fiona Ebner --- src/PVE/API2/Qemu.pm | 6 ++++-- src/PVE/QemuMigrate.pm | 4 ++-- src/PVE/QemuServer/BlockJob.pm | 16 ++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/PVE/API2/Qemu.pm b/src/PVE/API2/Qemu.pm index 59ff8181..dff4802d 100644 --- a/src/PVE/API2/Qemu.pm +++ b/src/PVE/API2/Qemu.pm @@ -35,7 +35,7 @@ use PVE::QemuServer::CPUConfig; use PVE::QemuServer::Drive qw(checked_volume_format checked_parse_volname); use PVE::QemuServer::Helpers; use PVE::QemuServer::ImportDisk; -use PVE::QemuServer::Monitor qw(mon_cmd); +use PVE::QemuServer::Monitor qw(mon_cmd vm_qmp_peer); use PVE::QemuServer::Machine; use PVE::QemuServer::Memory qw(get_current_memory); use PVE::QemuServer::MetaInfo; @@ -4613,7 +4613,9 @@ __PACKAGE__->register_method({ PVE::AccessControl::add_vm_to_pool($newid, $pool) if $pool; }; if (my $err = $@) { - eval { PVE::QemuServer::BlockJob::qemu_blockjobs_cancel($vmid, $jobs) }; + eval { + PVE::QemuServer::BlockJob::qemu_blockjobs_cancel(vm_qmp_peer($vmid), $jobs); + }; sleep 1; # some storage like rbd need to wait before release volume - really? foreach my $volid (@$newvollist) { diff --git a/src/PVE/QemuMigrate.pm b/src/PVE/QemuMigrate.pm index f7ec3227..c5ddf829 100644 --- a/src/PVE/QemuMigrate.pm +++ b/src/PVE/QemuMigrate.pm @@ -33,7 +33,7 @@ use PVE::QemuServer::CPUConfig; use PVE::QemuServer::Drive qw(checked_volume_format); use PVE::QemuServer::Helpers qw(min_version); use PVE::QemuServer::Machine; -use PVE::QemuServer::Monitor qw(mon_cmd); +use PVE::QemuServer::Monitor qw(mon_cmd vm_qmp_peer); use PVE::QemuServer::Memory qw(get_current_memory); use PVE::QemuServer::Network; use PVE::QemuServer::QMPHelpers; @@ -1606,7 +1606,7 @@ sub phase2_cleanup { if ($self->{storage_migration}) { eval { PVE::QemuServer::BlockJob::qemu_blockjobs_cancel( - $vmid, + vm_qmp_peer($vmid), $self->{storage_migration_jobs}, ); }; diff --git a/src/PVE/QemuServer/BlockJob.pm b/src/PVE/QemuServer/BlockJob.pm index 9e8fbdd7..d6eb2a8e 100644 --- a/src/PVE/QemuServer/BlockJob.pm +++ b/src/PVE/QemuServer/BlockJob.pm @@ -42,16 +42,16 @@ sub qemu_handle_concluded_blockjob { } sub qemu_blockjobs_cancel { - my ($vmid, $jobs) = @_; + my ($qmp_peer, $jobs) = @_; foreach my $job (keys %$jobs) { print "$job: Cancelling block job\n"; - eval { mon_cmd($vmid, "block-job-cancel", device => $job); }; + eval { qmp_cmd($qmp_peer, "block-job-cancel", device => $job); }; $jobs->{$job}->{cancel} = 1; } while (1) { - my $stats = mon_cmd($vmid, "query-block-jobs"); + my $stats = qmp_cmd($qmp_peer, "query-block-jobs"); my $running_jobs = {}; foreach my $stat (@$stats) { @@ -61,7 +61,7 @@ sub qemu_blockjobs_cancel { foreach my $job (keys %$jobs) { my $info = $running_jobs->{$job}; eval { - qemu_handle_concluded_blockjob(vm_qmp_peer($vmid), $job, $info, $jobs->{$job}) + qemu_handle_concluded_blockjob($qmp_peer, $job, $info, $jobs->{$job}) if $info && $info->{status} eq 'concluded'; }; log_warn($@) if $@; # only warn and proceed with canceling other jobs @@ -184,7 +184,7 @@ sub monitor { } # if we clone a disk for a new target vm, we don't switch the disk - qemu_blockjobs_cancel($vmid, $jobs); + qemu_blockjobs_cancel(vm_qmp_peer($vmid), $jobs); if ($should_fsfreeze) { print "issuing guest agent 'guest-fsfreeze-thaw' command\n"; @@ -241,7 +241,7 @@ sub monitor { my $err = $@; if ($err) { - eval { qemu_blockjobs_cancel($vmid, $jobs) }; + eval { qemu_blockjobs_cancel(vm_qmp_peer($vmid), $jobs) }; die "block job ($op) error: $err"; } } @@ -315,7 +315,7 @@ sub qemu_drive_mirror { # if a job already runs for this device we get an error, catch it for cleanup eval { mon_cmd($vmid, "drive-mirror", %$opts); }; if (my $err = $@) { - eval { qemu_blockjobs_cancel($vmid, $jobs) }; + eval { qemu_blockjobs_cancel(vm_qmp_peer($vmid), $jobs) }; warn "$@\n" if $@; die "mirroring error: $err\n"; } @@ -510,7 +510,7 @@ sub blockdev_mirror { # if a job already runs for this device we get an error, catch it for cleanup eval { mon_cmd($vmid, "blockdev-mirror", $qmp_opts->%*); }; if (my $err = $@) { - eval { qemu_blockjobs_cancel($vmid, $jobs) }; + eval { qemu_blockjobs_cancel(vm_qmp_peer($vmid), $jobs) }; log_warn("unable to cancel block jobs - $@"); eval { PVE::QemuServer::Blockdev::detach(vm_qmp_peer($vmid), $target_node_name); }; log_warn("unable to delete blockdev '$target_node_name' - $@"); -- 2.47.3