From: Christian Schoenebeck via Qemu-devel <qemu-devel@nongnu.org>
To: qemu-devel@nongnu.org
Cc: Greg Kurz <groug@kaod.org>,
Antonios Motakis <antonios.motakis@huawei.com>
Subject: [Qemu-devel] [libvirt patch] qemu: adds support for virtfs 9p argument 'vii'
Date: Mon, 06 May 2019 19:58:28 +0200 [thread overview]
Message-ID: <1895198.u98Sn5qOsY@silver> (raw)
In-Reply-To: <590216e2666653bac21d950aaba98f87d0a53324.1557093245.git.qemu_oss@crudebyte.com>
This is the counter part patch against latest libvirt git master head to
support the 'vii' feature of patch 5, which introduces the XML config
XML tag "important" on libvirt side.
To stick with the previous example mentioned with patch 5, likewise
libvirt XML configuration might then look like this:
<domain type='kvm'>
...
<devices>
...
<filesystem type='mount' accessmode='mapped'>
<source dir='/vm/fs'/>
<target dir='root'/>
<important path='/var/shares'/>
<important path='/tmp'/>
</filesystem>
</devices>
</domain>
Like with the vii qemu virtfs command line argument, the order of the
"important" tag defines which one gets the highest inode namespace
(smallest generated suffix) on guest side.
Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
---
docs/schemas/domaincommon.rng | 6 ++++++
src/conf/domain_conf.c | 30 ++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 3 +++
src/qemu/qemu_command.c | 10 ++++++++++
4 files changed, 49 insertions(+)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 111b85c36f..c75edfc4d3 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2515,6 +2515,12 @@
</choice>
</attribute>
</optional>
+ <zeroOrMore>
+ <element name='important'>
+ <attribute name="path"/>
+ <empty/>
+ </element>
+ </zeroOrMore>
<optional>
<element name='readonly'>
<empty/>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b4fb6cf981..cc75c6a7dd 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2294,6 +2294,8 @@ virDomainFSDefNew(void)
void virDomainFSDefFree(virDomainFSDefPtr def)
{
+ size_t i;
+
if (!def)
return;
@@ -2302,6 +2304,13 @@ void virDomainFSDefFree(virDomainFSDefPtr def)
virDomainDeviceInfoClear(&def->info);
VIR_FREE(def->virtio);
+ if (def->important) {
+ for (i = 0; i < def->nimportant; i++)
+ if (def->important[i])
+ VIR_FREE(def->important[i]);
+ }
+ VIR_FREE(def->important);
+
VIR_FREE(def);
}
@@ -10953,6 +10962,7 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
VIR_AUTOFREE(char *) usage = NULL;
VIR_AUTOFREE(char *) units = NULL;
VIR_AUTOFREE(char *) model = NULL;
+ long n;
ctxt->node = node;
@@ -11001,6 +11011,12 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
1, ULLONG_MAX, false) < 0)
goto error;
+ n = virXMLChildElementCount(node);
+ if (n > 0) {
+ if (VIR_ALLOC_N(def->important, n) < 0)
+ goto error;
+ }
+
cur = node->children;
while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE) {
@@ -11039,6 +11055,8 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0)
goto error;
+ } else if (virXMLNodeNameEqual(cur, "important")) {
+ def->important[def->nimportant++] = virXMLPropString(cur, "path");
}
}
cur = cur->next;
@@ -11107,6 +11125,8 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
goto error;
cleanup:
+ if (def && def->important && !def->nimportant)
+ VIR_FREE(def->important);
return def;
error:
@@ -24601,6 +24621,7 @@ virDomainFSDefFormat(virBufferPtr buf,
const char *src = def->src->path;
VIR_AUTOCLEAN(virBuffer) driverBuf = VIR_BUFFER_INITIALIZER;
int ret = -1;
+ size_t i;
if (!type) {
virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -24689,6 +24710,15 @@ virDomainFSDefFormat(virBufferPtr buf,
if (def->readonly)
virBufferAddLit(buf, "<readonly/>\n");
+ if (def->important) {
+ for (i = 0; i < def->nimportant; ++i) {
+ if (!def->important[i]) continue;
+ virBufferAddLit(buf, "<important");
+ virBufferEscapeString(buf, " path='%s'", def->important[i]);
+ virBufferAddLit(buf, "/>\n");
+ }
+ }
+
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
goto cleanup;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 01c22d8cc3..9bbd66d932 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -818,6 +818,9 @@ struct _virDomainFSDef {
unsigned long long space_soft_limit; /* in bytes */
bool symlinksResolved;
virDomainVirtioOptionsPtr virtio;
+
+ size_t nimportant;
+ char **important;
};
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 50b4205267..2005ccadf8 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -2732,6 +2732,7 @@ qemuBuildFSStr(virDomainFSDefPtr fs)
virBuffer opt = VIR_BUFFER_INITIALIZER;
const char *driver = qemuDomainFSDriverTypeToString(fs->fsdriver);
const char *wrpolicy = virDomainFSWrpolicyTypeToString(fs->wrpolicy);
+ size_t i;
if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -2775,6 +2776,15 @@ qemuBuildFSStr(virDomainFSDefPtr fs)
if (fs->readonly)
virBufferAddLit(&opt, ",readonly");
+ if (fs->important) {
+ for (i = 0; i < fs->nimportant; ++i) {
+ if (i == 0)
+ virBufferAsprintf(&opt, ",vii=%s", fs->important[i]);
+ else
+ virBufferAsprintf(&opt, ":%s", fs->important[i]);
+ }
+ }
+
if (virBufferCheckError(&opt) < 0)
goto error;
--
2.11.0
next prev parent reply other threads:[~2019-05-06 18:00 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-06 14:37 [Qemu-devel] [PATCH v3 0/5] 9p: Fix file ID collisions Christian Schoenebeck via Qemu-devel
2019-04-23 11:30 ` [Qemu-devel] [PATCH v3 1/5] 9p: mitigates most QID path collisions Christian Schoenebeck via Qemu-devel
2019-05-07 12:42 ` Daniel P. Berrangé
2019-05-07 13:11 ` Christian Schoenebeck via Qemu-devel
2019-05-07 13:13 ` Daniel P. Berrangé
2019-04-23 11:35 ` [Qemu-devel] [PATCH v3 2/5] 9P: trivial cleanup of QID path collision mitigation Christian Schoenebeck via Qemu-devel
2019-05-07 12:43 ` Daniel P. Berrangé
2019-04-23 11:41 ` [Qemu-devel] [PATCH v3 3/5] 9p: persistency of QID path beyond reboots / suspensions Christian Schoenebeck via Qemu-devel
2019-05-03 14:51 ` [Qemu-devel] [PATCH v3 4/5] 9p: use variable length suffixes for inode mapping Christian Schoenebeck via Qemu-devel
2019-05-05 21:41 ` [Qemu-devel] [PATCH v3 5/5] 9p: adds virtfs 'vii' device parameter Christian Schoenebeck via Qemu-devel
2019-05-06 17:58 ` Christian Schoenebeck via Qemu-devel [this message]
2019-05-07 9:55 ` [Qemu-devel] [libvirt patch] qemu: adds support for virtfs 9p argument 'vii' Greg Kurz
2019-05-07 12:23 ` Christian Schoenebeck via Qemu-devel
2019-05-07 15:42 ` Greg Kurz
2019-05-07 16:16 ` Christian Schoenebeck via Qemu-devel
2019-05-17 8:40 ` Christian Schoenebeck via Qemu-devel
2019-05-17 12:30 ` Greg Kurz
2019-05-17 13:23 ` Christian Schoenebeck via Qemu-devel
2019-05-17 14:47 ` Greg Kurz
2019-05-17 20:53 ` Christian Schoenebeck via Qemu-devel
2019-05-20 14:05 ` Greg Kurz
2019-05-22 16:03 ` Christian Schoenebeck via Qemu-devel
2019-06-03 6:57 ` Greg Kurz
2019-06-03 9:17 ` Christian Schoenebeck via Qemu-devel
2019-05-07 12:57 ` Daniel P. Berrangé
2019-05-07 13:48 ` Christian Schoenebeck via Qemu-devel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1895198.u98Sn5qOsY@silver \
--to=qemu-devel@nongnu.org \
--cc=antonios.motakis@huawei.com \
--cc=groug@kaod.org \
--cc=qemu_oss@crudebyte.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).