From nobody Mon Feb 9 02:51:04 2026 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1710150733429452.3455491707664; Mon, 11 Mar 2024 02:52:13 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 66D10188A; Mon, 11 Mar 2024 05:52:12 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id B655C1E51; Mon, 11 Mar 2024 05:44:45 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id DC7771C78; Mon, 11 Mar 2024 05:44:11 -0400 (EDT) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 9901A1C76 for ; Mon, 11 Mar 2024 05:44:10 -0400 (EDT) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id 46E1720B74C5; Mon, 11 Mar 2024 02:44:09 -0700 (PDT) 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=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 46E1720B74C5 From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH 04/11] ch_driver: Add domainManagedSave callback Date: Mon, 11 Mar 2024 09:44:00 +0000 Message-Id: <20240311094407.12217-5-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240311094407.12217-1-paekkaladevi@linux.microsoft.com> References: <20240311094407.12217-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Message-ID-Hash: HEMQYQEIF2WA3YEWZNOIMSHEA2W4ZPJ7 X-Message-ID-Hash: HEMQYQEIF2WA3YEWZNOIMSHEA2W4ZPJ7 X-MailFrom: paekkaladevi@linux.microsoft.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 CC: prapal@linux.microsoft.com, paekkaladevi@microsoft.com, liuwe@microsoft.com, kumarpraveen@linux.microsoft.com, Purna Pavan Chandra Aekkaladevi 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: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1710150734485100001 Create libvirt managed saveDir and pass it to CH to save the VM Signed-off-by: Purna Pavan Chandra Aekkaladevi --- src/ch/ch_conf.c | 6 ++++++ src/ch/ch_conf.h | 1 + src/ch/ch_driver.c | 51 +++++++++++++++++++++++++++++++++++++++++++++ src/ch/ch_monitor.c | 7 +++++++ 4 files changed, 65 insertions(+) diff --git a/src/ch/ch_conf.c b/src/ch/ch_conf.c index a7b2285886..cab97639c4 100644 --- a/src/ch/ch_conf.c +++ b/src/ch/ch_conf.c @@ -148,10 +148,12 @@ virCHDriverConfigNew(bool privileged) if (privileged) { cfg->logDir =3D g_strdup_printf("%s/log/libvirt/ch", LOCALSTATEDIR= ); cfg->stateDir =3D g_strdup_printf("%s/libvirt/ch", RUNSTATEDIR); + cfg->saveDir =3D g_strdup_printf("%s/lib/libvirt/ch/save", LOCALST= ATEDIR); =20 } else { g_autofree char *rundir =3D NULL; g_autofree char *cachedir =3D NULL; + g_autofree char *configbasedir =3D NULL; =20 cachedir =3D virGetUserCacheDirectory(); =20 @@ -159,6 +161,9 @@ virCHDriverConfigNew(bool privileged) =20 rundir =3D virGetUserRuntimeDirectory(); cfg->stateDir =3D g_strdup_printf("%s/ch/run", rundir); + + configbasedir =3D virGetUserConfigDirectory(); + cfg->saveDir =3D g_strdup_printf("%s/ch/save", configbasedir); } =20 return cfg; @@ -175,6 +180,7 @@ virCHDriverConfigDispose(void *obj) { virCHDriverConfig *cfg =3D obj; =20 + g_free(cfg->saveDir); g_free(cfg->stateDir); g_free(cfg->logDir); } diff --git a/src/ch/ch_conf.h b/src/ch/ch_conf.h index 4b4c3345b6..a77cad7a2a 100644 --- a/src/ch/ch_conf.h +++ b/src/ch/ch_conf.h @@ -37,6 +37,7 @@ struct _virCHDriverConfig { =20 char *stateDir; char *logDir; + char *saveDir; =20 int cgroupControllers; =20 diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c index 24f697d2e1..be6e25c8e2 100644 --- a/src/ch/ch_driver.c +++ b/src/ch/ch_driver.c @@ -178,6 +178,14 @@ static char *chConnectGetCapabilities(virConnectPtr co= nn) return xml; } =20 +static char * +chDomainManagedSavePath(virCHDriver *driver, virDomainObj *vm) +{ + g_autoptr(virCHDriverConfig) cfg =3D virCHDriverGetConfig(driver); + return g_strdup_printf("%s/%s.save", cfg->saveDir, vm->def->name); +} + + /** * chDomainCreateXML: * @conn: pointer to connection @@ -763,6 +771,48 @@ chDomainSave(virDomainPtr dom, const char *to) return chDomainSaveFlags(dom, to, NULL, 0); } =20 +static int +chDomainManagedSave(virDomainPtr dom, unsigned int flags) +{ + virCHDriver *driver =3D dom->conn->privateData; + virDomainObj *vm =3D NULL; + g_autofree char *to =3D NULL; + int ret =3D -1; + + virCheckFlags(0, -1); + + if (!(vm =3D virCHDomainObjFromDomain(dom))) + goto cleanup; + + if (virDomainManagedSaveEnsureACL(dom->conn, vm->def) < 0) + goto cleanup; + + if (virDomainObjBeginJob(vm, VIR_JOB_MODIFY) < 0) + goto cleanup; + + if (virDomainObjCheckActive(vm) < 0) + goto endjob; + + if (!vm->persistent) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("cannot do managed save for transient domain")); + goto endjob; + } + + to =3D chDomainManagedSavePath(driver, vm); + if (chDoDomainSave(driver, vm, to, true) < 0) + goto endjob; + + ret =3D 0; + + endjob: + virDomainObjEndJob(vm); + + cleanup: + virDomainObjEndAPI(&vm); + return ret; +} + static virDomainPtr chDomainLookupByID(virConnectPtr conn, int id) { @@ -1887,6 +1937,7 @@ static virHypervisorDriver chHypervisorDriver =3D { .domainGetNumaParameters =3D chDomainGetNumaParameters, /* 8.1.0 */ .domainSave =3D chDomainSave, /* 10.2.0 */ .domainSaveFlags =3D chDomainSaveFlags, /* 10.2.0 */ + .domainManagedSave =3D chDomainManagedSave, /* 10.2.0 */ }; =20 static virConnectDriver chConnectDriver =3D { diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 939fa13667..7b6b77de1c 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -557,6 +557,13 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *c= fg) return NULL; } =20 + if (g_mkdir_with_parents(cfg->saveDir, 0777) < 0) { + virReportSystemError(errno, + _("Cannot create save directory '%1$s'"), + cfg->saveDir); + return NULL; + } + cmd =3D virCommandNew(vm->def->emulator); virCommandSetUmask(cmd, 0x002); socket_fd =3D chMonitorCreateSocket(mon->socketpath); --=20 2.34.1 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org