From nobody Tue Sep 9 03:20:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1737736923711303.6105059028381; Fri, 24 Jan 2025 08:42:03 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id A2A9F157C; Fri, 24 Jan 2025 11:42:02 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A405A12CD; Fri, 24 Jan 2025 11:41:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id C19E7124D; Fri, 24 Jan 2025 11:41:39 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 44AD2110A for ; Fri, 24 Jan 2025 11:41:39 -0500 (EST) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-657-lhILSn9APC6A_zbMrk0TCQ-1; Fri, 24 Jan 2025 11:41:37 -0500 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 737831BF17F1 for ; Fri, 24 Jan 2025 16:33:13 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.2]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A41A31800344 for ; Fri, 24 Jan 2025 16:33:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737736899; h=from:from: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; bh=S6s3xnRNyXaqX9LkJr+/8XR1bNP9TUJSKRd8yW9wYBs=; b=Mqq2LIENFkEyQ3y1zxGcNbdf5QVIhi06sCbQqNVoB8V+lVp6SjYkMqtFV3CcqSCJQR3D8k 2pSnAdT1V7X387k2M7saNYRxqecgw3JDF1ye4C63ZJJZBMOfgyd5UCiXBOkMD3hBTSqH92 7/9C03jMk3GlgM4WiJirErc6m4A4tec= X-MC-Unique: lhILSn9APC6A_zbMrk0TCQ-1 X-Mimecast-MFC-AGG-ID: lhILSn9APC6A_zbMrk0TCQ From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 2/5] qemuProcessHandleIOError: Fix logic for lookup of disk Date: Fri, 24 Jan 2025 17:33:03 +0100 Message-ID: <8a48a9f4b213e831a074b09513744a936d5ca045.1737736288.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: rAF2pXVPSskwdSUmStAWlC0tjDlDPZbDXeROgZB_toE_1737736896 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: RSEWFMALCEBAYLPQBVYLTMRVA7QY7UGE X-Message-ID-Hash: RSEWFMALCEBAYLPQBVYLTMRVA7QY7UGE X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1737736950107019100 Content-Type: text/plain; charset="utf-8" There are two bugs in the current disk lookup code in qemuProcessHandleIOError: 1) The QOM name isn't matched qemuProcessFindDomainDiskByAliasOrQOM() We pass NULL as the second argument, but the diskAlias argument can be the QOM path for e.g. virtio disks. This means that the IO error event doesn't actually contain the disk information: event 'io-error' for domain 'cd': () report due to other: Input/outpu= t error rather than: event 'io-error' for domain 'cd': /dev/mapper/errdev0 (virtio-disk0) r= eport due to other: Input/output error 2) nodenames are not preferred We now do everything based on node names, which also allow you to pinpoint a image within the backing chain. With the current code the path would always refer to the top image rather than the actual image causing the problem. This patch fixes both issues by re-ordering the lookup to prefer nodenames and selecting the image path based on the node name and also populates the third argument of qemuProcessFindDomainDiskByAliasOrQOM(). Signed-off-by: Peter Krempa --- src/qemu/qemu_process.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 34a755a49a..95d0a40f84 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -833,9 +833,9 @@ qemuProcessHandleIOError(qemuMonitor *mon G_GNUC_UNUSED, virObjectEvent *ioErrorEvent =3D NULL; virObjectEvent *ioErrorEvent2 =3D NULL; virObjectEvent *lifecycleEvent =3D NULL; - const char *srcPath; - const char *devAlias; - virDomainDiskDef *disk; + virStorageSource *errsrc =3D NULL; + const char *srcPath =3D ""; + const char *devAlias =3D ""; virObjectLock(vm); priv =3D QEMU_DOMAIN_PRIVATE(vm); @@ -843,19 +843,21 @@ qemuProcessHandleIOError(qemuMonitor *mon G_GNUC_UNUS= ED, if (*diskAlias =3D=3D '\0') diskAlias =3D NULL; - if (diskAlias) - disk =3D qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NULL= ); - else if (nodename) - disk =3D qemuDomainDiskLookupByNodename(vm->def, NULL, nodename, N= ULL); - else - disk =3D NULL; + if (nodename) { + virDomainDiskDef *disk =3D qemuDomainDiskLookupByNodename(vm->def,= priv->backup, nodename, &errsrc); - if (disk) { - srcPath =3D virDomainDiskGetSource(disk); - devAlias =3D disk->info.alias; - } else { - srcPath =3D ""; - devAlias =3D ""; + if (errsrc->path) + srcPath =3D errsrc->path; + + if (disk) + devAlias =3D disk->info.alias; + } else if (diskAlias) { + virDomainDiskDef *disk =3D qemuProcessFindDomainDiskByAliasOrQOM(v= m, diskAlias, diskAlias); + + if (disk) { + srcPath =3D virDomainDiskGetSource(disk); + devAlias =3D disk->info.alias; + } } ioErrorEvent =3D virDomainEventIOErrorNewFromObj(vm, srcPath, devAlias= , action); --=20 2.48.1