From nobody Mon Feb 9 07:26:50 2026 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1770304136; cv=none; d=zohomail.com; s=zohoarc; b=HJsJURzx/kzEuWsJXwmBSmaLjDK48bqqmB5y9OXCyNjW5isKJOuo2fb3hmmZJzCoqLiH6umfy7lrN8E3dw6BHar7TT2mkq76c18GFXwhHqBoolfjLn7nw4SKcKlw4VroZR7lJXsnyy3GZiDUhUBPX7YcAlW5fR9ZP+Mnq1MHqbQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770304136; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=KKzLc2U7zdTGljI8VUa6+1Q+Kw6n6ay7qaG1WApAH8c=; b=XSJBWG0X0XTh5qshHotj1nXgbrEhGC9x667LhKk1SQuvnvKHnaIwk5AgPud44NAkoaBuVn64QtHBunWqaQ+TCs413InAAB0xae7X7LKENij/TCgK9kJLFh02V+moO5Hb4JuTVWt4xduhaXPzQgzODRjKYYSOahwfWB25R2GaqRk= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1770304136319658.1913159340974; Thu, 5 Feb 2026 07:08:56 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 8930B41B83; Thu, 5 Feb 2026 10:08:55 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 81159440DE; Thu, 5 Feb 2026 09:59:50 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 10D2A41A12; Thu, 5 Feb 2026 09:59:41 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 534FE43DC5 for ; Thu, 5 Feb 2026 09:55:48 -0500 (EST) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-295-5SRkpCddPx-HZnHaIfqaPw-1; Thu, 05 Feb 2026 09:55:46 -0500 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A02281955E7C for ; Thu, 5 Feb 2026 14:55:45 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.3]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E9E4D180066A for ; Thu, 5 Feb 2026 14:55:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1770303348; 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=KKzLc2U7zdTGljI8VUa6+1Q+Kw6n6ay7qaG1WApAH8c=; b=LZ2kPze++YEW0Uq+fN2Aj+3yquFyYU/gaSBbaO1FsCMvmnoLDARqm0FLSsPw7uOCrja1La q+DWCmuPbN3qisFkiyCB2rroLQxi6yMlgdEkDgS3nzDXxPUw95Pt8j3/KCEL2xOSDtDX1c jsLCRG2J+nOG659Pi3trZ5z/4ptdkd0= X-MC-Unique: 5SRkpCddPx-HZnHaIfqaPw-1 X-Mimecast-MFC-AGG-ID: 5SRkpCddPx-HZnHaIfqaPw_1770303345 To: devel@lists.libvirt.org Subject: [PATCH 13/20] conf: domain: Add VIR_DOMAIN_DISK_TRAY_NONE state for devices without tray Date: Thu, 5 Feb 2026 15:55:21 +0100 Message-ID: <340c756371631c175b7e3b958c6aeda4ffc43477.1770303113.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: KBtEFAkinf7AjZ6veA-WvCUqVJRshA0c2gHoDhwAh0c_1770303345 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ITKM6TIJZAAAA42HOGDKJ4OISS7WHNI3 X-Message-ID-Hash: ITKM6TIJZAAAA42HOGDKJ4OISS7WHNI3 X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; 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: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1770304138209158500 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Currently the default state was VIR_DOMAIN_DISK_TRAY_CLOSED. Not all disks have a tray so add another state as the default and adjust code which was based on the assumption that the tray is always present. This change also removes the need for the 'tray' field in the disk private data which was used inconsistently. Signed-off-by: Peter Krempa --- src/conf/domain_conf.c | 17 +++++++++++++---- src/conf/domain_conf.h | 3 ++- src/qemu/qemu_hotplug.c | 6 ++++-- src/qemu/qemu_process.c | 3 ++- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 02e23f7866..fe61284789 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1286,6 +1286,7 @@ VIR_ENUM_IMPL(virDomainCpuPlacementMode, VIR_ENUM_IMPL(virDomainDiskTray, VIR_DOMAIN_DISK_TRAY_LAST, + "", "closed", "open", ); @@ -8600,7 +8601,7 @@ virDomainDiskDefParseXML(virDomainXMLOption *xmlopt, return NULL; if (virXMLPropEnum(targetNode, "tray", virDomainDiskTrayTypeFromSt= ring, - VIR_XML_PROP_NONE, &def->tray_status) < 0) + VIR_XML_PROP_NONZERO, &def->tray_status) < 0) return NULL; if (virXMLPropTristateSwitch(targetNode, "removable", VIR_XML_PROP= _NONE, @@ -24247,11 +24248,19 @@ virDomainDiskDefFormat(virBuffer *buf, virBufferAsprintf(&childBuf, "dst, bus); - if ((def->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY || - def->device =3D=3D VIR_DOMAIN_DISK_DEVICE_CDROM) && - def->tray_status !=3D VIR_DOMAIN_DISK_TRAY_CLOSED) + + switch (def->tray_status) { + case VIR_DOMAIN_DISK_TRAY_NONE: + case VIR_DOMAIN_DISK_TRAY_CLOSED: + case VIR_DOMAIN_DISK_TRAY_LAST: + break; + + case VIR_DOMAIN_DISK_TRAY_OPEN: virBufferAsprintf(&childBuf, " tray=3D'%s'", virDomainDiskTrayTypeToString(def->tray_status)); + break; + } + if (def->bus =3D=3D VIR_DOMAIN_DISK_BUS_USB && def->removable !=3D VIR_TRISTATE_SWITCH_ABSENT) { virBufferAsprintf(&childBuf, " removable=3D'%s'", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 66dc4e3417..9e3735da73 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -421,7 +421,8 @@ typedef enum { typedef enum { - VIR_DOMAIN_DISK_TRAY_CLOSED =3D 0, + VIR_DOMAIN_DISK_TRAY_NONE =3D 0, + VIR_DOMAIN_DISK_TRAY_CLOSED, VIR_DOMAIN_DISK_TRAY_OPEN, VIR_DOMAIN_DISK_TRAY_LAST diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index f786248e70..0d5da456c5 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -539,7 +539,7 @@ qemuDomainChangeMediaBlockdev(virDomainObj *vm, return -1; } - if (diskPriv->tray && disk->tray_status !=3D VIR_DOMAIN_DISK_TRAY_OPEN= ) { + if (disk->tray_status =3D=3D VIR_DOMAIN_DISK_TRAY_CLOSED) { qemuDomainObjEnterMonitor(vm); rc =3D qemuMonitorBlockdevTrayOpen(priv->mon, diskPriv->qomName, f= orce); qemuDomainObjExitMonitor(vm); @@ -575,7 +575,9 @@ qemuDomainChangeMediaBlockdev(virDomainObj *vm, &disk->blkdeviotune); } - if (rc =3D=3D 0) + /* Close any device with a tray since we've opened it before (regardle= ss + * of the current state if it e.g. wasn't updated) */ + if (rc =3D=3D 0 && disk->tray_status !=3D VIR_DOMAIN_DISK_TRAY_NONE) rc =3D qemuMonitorBlockdevTrayClose(priv->mon, diskPriv->qomName); if (rc < 0 && newbackend) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d6ff9c96fc..e627d2121e 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8671,7 +8671,8 @@ qemuProcessRefreshDisks(virDomainObj *vm, qemuProcessRefreshDiskProps(disk, info); - if (diskpriv->tray && + if (old_tray_status !=3D VIR_DOMAIN_DISK_TRAY_NONE && + disk->tray_status !=3D VIR_DOMAIN_DISK_TRAY_NONE && old_tray_status !=3D disk->tray_status) { virDomainEventTrayChangeReason reason =3D VIR_DOMAIN_EVENT_TRA= Y_CHANGE_OPEN; virObjectEvent *event; --=20 2.53.0