From nobody Mon Feb 9 16:35:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.74 as permitted sender) client-ip=63.128.21.74; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-74.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.74 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1584531665; cv=none; d=zohomail.com; s=zohoarc; b=GjJzTKUfm2Tmexe3NZ1u+swnVtlMys3Ycbuezq9DB/DdgXSVS9gbcjqCy0Sr/phZQ8pEAcjevFlZMtclGxr89vRkil5GJ9iHUGdmyrrZ1K/1MkRm7RtX2dRZhSmxM6hDS6zhB5HyhQnblu4RmYzE/fkD5k1fkQbZ578N+XxI4bk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584531665; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YE1wm5qd20vFSlX9Kl6pIwyn65XAuXq9IDemAKJTChI=; b=iYSqYOhjWBdKpBam16/pxJ4lgO/wjfPXOX0A8kMjXTv402VcdpfdhVkx/Pr/LL+e4oWV24js0rnL4BilUO9u5cd3NCiEH900Q8FfgAtcRcZVbV9WDeb5bojlzM9/G9dPJN5VEecYAYpJce4sYqELJA2a6rq8z1p3ePWL8IUsF7Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.74 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-74.mimecast.com (us-smtp-delivery-74.mimecast.com [63.128.21.74]) by mx.zohomail.com with SMTPS id 1584531665824484.70504709698207; Wed, 18 Mar 2020 04:41:05 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-240-7JJk5f8UPzWKuB4l6pychg-1; Wed, 18 Mar 2020 07:41:01 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0A46C108443C; Wed, 18 Mar 2020 11:40:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D58EE10002A8; Wed, 18 Mar 2020 11:40:55 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 8DA9294299; Wed, 18 Mar 2020 11:40:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 02IBedax010628 for ; Wed, 18 Mar 2020 07:40:39 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1F4CC94951; Wed, 18 Mar 2020 11:40:39 +0000 (UTC) Received: from angien.redhat.com (unknown [10.43.2.48]) by smtp.corp.redhat.com (Postfix) with ESMTP id 987409494D for ; Wed, 18 Mar 2020 11:40:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1584531664; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=YE1wm5qd20vFSlX9Kl6pIwyn65XAuXq9IDemAKJTChI=; b=QGxj2E1WITlnsBHJFi5s2v+Zr4zYRTRQgTJt4PuF2Z42yhAM8Era799zNHWHQk/eRxLFtj 2+XmqGqpziFJ82pDPzPRfOuruG2P6J8J+Hl4UXUDEyvEr/tSU3ucjABBeSnbZjcq2d+hMd upnWSoIJ9nXIWsx8cyYO30S7hBo4DQo= X-MC-Unique: 7JJk5f8UPzWKuB4l6pychg-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 5/5] qemu: Suppress error reporting from qemuMonitorDelObject in cleanup paths Date: Wed, 18 Mar 2020 12:40:30 +0100 Message-Id: <50396cc421d99a440f56aa2e6264c1198386eb55.1584531508.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Many calls of qemuMonitorDelObject don't actually check the return value or report the error from the object deletion itself since they are on cleanup paths. In some cases this can lead to reporting of spurious errors e.g. when qemuMonitorDelObject is used to clean up a possibly pre-existing objects. Add a new argument for qemuMonitorDelObject which controls whether the internals report errors from qemu and fix all callers accordingly. Note that some of the cases on device unplug which check the error code don't in fact propagate the error to the user, but in this case it is important to add the log entry anyways for tracing that the device deletion failed. https://bugzilla.redhat.com/show_bug.cgi?id=3D1784040 Signed-off-by: Peter Krempa --- src/qemu/qemu_block.c | 10 +++++----- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_hotplug.c | 29 +++++++++++++++-------------- src/qemu/qemu_monitor.c | 5 +++-- src/qemu/qemu_monitor.h | 3 ++- src/qemu/qemu_monitor_json.c | 5 +++-- src/qemu/qemu_monitor_json.h | 3 ++- 7 files changed, 31 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index f95ebb6fa7..4ed17b6df3 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -1732,19 +1732,19 @@ qemuBlockStorageSourceAttachRollback(qemuMonitorPtr= mon, ignore_value(qemuMonitorBlockdevDel(mon, data->storageNodeName)); if (data->prmgrAlias) - ignore_value(qemuMonitorDelObject(mon, data->prmgrAlias)); + ignore_value(qemuMonitorDelObject(mon, data->prmgrAlias, false)); if (data->authsecretAlias) - ignore_value(qemuMonitorDelObject(mon, data->authsecretAlias)); + ignore_value(qemuMonitorDelObject(mon, data->authsecretAlias, fals= e)); if (data->encryptsecretAlias) - ignore_value(qemuMonitorDelObject(mon, data->encryptsecretAlias)); + ignore_value(qemuMonitorDelObject(mon, data->encryptsecretAlias, f= alse)); if (data->httpcookiesecretAlias) - ignore_value(qemuMonitorDelObject(mon, data->httpcookiesecretAlias= )); + ignore_value(qemuMonitorDelObject(mon, data->httpcookiesecretAlias= , false)); if (data->tlsAlias) - ignore_value(qemuMonitorDelObject(mon, data->tlsAlias)); + ignore_value(qemuMonitorDelObject(mon, data->tlsAlias, false)); virErrorRestore(&orig_err); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index b62947fb4a..8a2cd35fa7 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6047,7 +6047,7 @@ qemuDomainHotplugDelIOThread(virQEMUDriverPtr driver, qemuDomainObjEnterMonitor(driver, vm); - rc =3D qemuMonitorDelObject(priv->mon, alias); + rc =3D qemuMonitorDelObject(priv->mon, alias, true); exp_niothreads--; if (rc < 0) goto exit_monitor; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 1cab12fb2b..bbe721c02c 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -390,7 +390,8 @@ qemuHotplugRemoveManagedPR(virQEMUDriverPtr driver, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto cleanup; - ignore_value(qemuMonitorDelObject(priv->mon, qemuDomainGetManagedPRAli= as())); + ignore_value(qemuMonitorDelObject(priv->mon, qemuDomainGetManagedPRAli= as(), + false)); if (qemuDomainObjExitMonitor(driver, vm) < 0) goto cleanup; @@ -471,7 +472,7 @@ qemuDomainDetachDBusVMState(virQEMUDriverPtr driver, qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; - ret =3D qemuMonitorDelObject(priv->mon, alias); + ret =3D qemuMonitorDelObject(priv->mon, alias, true); if (qemuDomainObjExitMonitor(driver, vm) < 0) return -1; @@ -1685,10 +1686,10 @@ qemuDomainDelTLSObjects(virQEMUDriverPtr driver, goto cleanup; if (tlsAlias) - ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias, false)); if (secAlias) - ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, secAlias, false)); ignore_value(qemuDomainObjExitMonitor(driver, vm)); @@ -1850,9 +1851,9 @@ qemuDomainDelChardevTLSObjects(virQEMUDriverPtr drive= r, qemuDomainObjEnterMonitor(driver, vm); - ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias, false)); if (secAlias) - ignore_value(qemuMonitorDelObject(priv->mon, secAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, secAlias, false)); if (qemuDomainObjExitMonitor(driver, vm) < 0) return -1; @@ -2307,7 +2308,7 @@ qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, exit_monitor: virErrorPreserveLast(&orig_err); if (objAlias) - ignore_value(qemuMonitorDelObject(priv->mon, objAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, objAlias, false)); if (rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && chardevAdded) ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); if (qemuDomainObjExitMonitor(driver, vm) < 0) @@ -2443,7 +2444,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, exit_monitor: virErrorPreserveLast(&orig_err); if (objAdded) - ignore_value(qemuMonitorDelObject(priv->mon, objalias)); + ignore_value(qemuMonitorDelObject(priv->mon, objalias, false)); if (qemuDomainObjExitMonitor(driver, vm) < 0) mem =3D NULL; @@ -2665,7 +2666,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr drive= r, drvstr, devstr); } if (secobjAlias) - ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias, false)); ignore_value(qemuDomainObjExitMonitor(driver, vm)); virErrorRestore(&orig_err); @@ -3041,7 +3042,7 @@ qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, if (shmem->server.enabled) ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias)); else - ignore_value(qemuMonitorDelObject(priv->mon, memAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, memAlias, false)); } if (qemuDomainObjExitMonitor(driver, vm) < 0) @@ -4367,7 +4368,7 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, backendAlias =3D g_strdup_printf("mem%s", mem->info.alias); qemuDomainObjEnterMonitor(driver, vm); - rc =3D qemuMonitorDelObject(priv->mon, backendAlias); + rc =3D qemuMonitorDelObject(priv->mon, backendAlias, true); if (qemuDomainObjExitMonitor(driver, vm) < 0) rc =3D -1; @@ -4483,7 +4484,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, /* If it fails, then so be it - it was a best shot */ if (objAlias) - ignore_value(qemuMonitorDelObject(priv->mon, objAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, objAlias, false)); if (qemuDomainObjExitMonitor(driver, vm) < 0) return -1; @@ -4741,7 +4742,7 @@ qemuDomainRemoveRNGDevice(virQEMUDriverPtr driver, qemuDomainObjEnterMonitor(driver, vm); if (rc =3D=3D 0 && - qemuMonitorDelObject(priv->mon, objAlias) < 0) + qemuMonitorDelObject(priv->mon, objAlias, true) < 0) rc =3D -1; if (rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && @@ -4802,7 +4803,7 @@ qemuDomainRemoveShmemDevice(virQEMUDriverPtr driver, if (shmem->server.enabled) rc =3D qemuMonitorDetachCharDev(priv->mon, charAlias); else - rc =3D qemuMonitorDelObject(priv->mon, memAlias); + rc =3D qemuMonitorDelObject(priv->mon, memAlias, true); if (qemuDomainObjExitMonitor(driver, vm) < 0) return -1; diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 4a5bd1d4ab..3ac78016e2 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2966,13 +2966,14 @@ qemuMonitorAddObject(qemuMonitorPtr mon, int qemuMonitorDelObject(qemuMonitorPtr mon, - const char *objalias) + const char *objalias, + bool report_error) { VIR_DEBUG("objalias=3D%s", objalias); QEMU_CHECK_MONITOR(mon); - return qemuMonitorJSONDelObject(mon, objalias); + return qemuMonitorJSONDelObject(mon, objalias, report_error); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 2437375327..e2cc12bd0f 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -931,7 +931,8 @@ int qemuMonitorAddObject(qemuMonitorPtr mon, ATTRIBUTE_NONNULL(2); int qemuMonitorDelObject(qemuMonitorPtr mon, - const char *objalias); + const char *objalias, + bool report_error); int qemuMonitorAddDrive(qemuMonitorPtr mon, const char *drivestr); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index c18cef5c1a..a18ab477ee 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -4448,7 +4448,8 @@ qemuMonitorJSONAddObject(qemuMonitorPtr mon, int qemuMonitorJSONDelObject(qemuMonitorPtr mon, - const char *objalias) + const char *objalias, + bool report_error) { g_autoptr(virJSONValue) cmd =3D NULL; g_autoptr(virJSONValue) reply =3D NULL; @@ -4459,7 +4460,7 @@ qemuMonitorJSONDelObject(qemuMonitorPtr mon, if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) return -1; - if (qemuMonitorJSONCheckError(cmd, reply) < 0) + if (qemuMonitorJSONCheckErrorFull(cmd, reply, report_error) < 0) return -1; return 0; diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 5b3bb295eb..46dc22f1a4 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -237,7 +237,8 @@ int qemuMonitorJSONAddObject(qemuMonitorPtr mon, virJSONValuePtr props); int qemuMonitorJSONDelObject(qemuMonitorPtr mon, - const char *objalias); + const char *objalias, + bool report_error); int qemuMonitorJSONTransaction(qemuMonitorPtr mon, virJSONValuePtr *action= s) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); --=20 2.24.1