[libvirt] [PATCH v3 libvirt 1/3] conf: add <model> child element to <filesystem>

Daniel P. Berrange berrange at redhat.com
Wed Aug 20 08:46:58 UTC 2014


On Tue, Aug 19, 2014 at 10:11:35PM +0200, Giuseppe Scrivano wrote:
> Signed-off-by: Giuseppe Scrivano <gscrivan at redhat.com>
> ---
>  docs/formatdomain.html.in              |  6 ++++++
>  docs/schemas/domaincommon.rng          | 13 +++++++++++++
>  src/conf/domain_conf.c                 | 26 ++++++++++++++++++++++++++
>  src/conf/domain_conf.h                 | 11 +++++++++++
>  tests/domainconfdata/getfilesystem.xml |  5 +++++
>  tests/domainconftest.c                 |  1 +
>  6 files changed, 62 insertions(+)
> 
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index ed17389..d0c1ce2 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -2300,6 +2300,8 @@
>        <driver type='path' wrpolicy='immediate'/>
>        <source dir='/export/to/guest'/>
>        <target dir='/import/from/host'/>
> +      <model type='9p'/>
> +      <model type='mtp'/>
>        <readonly/>
>      </filesystem>
>      <filesystem type='file' accessmode='passthrough'>
> @@ -2337,6 +2339,10 @@
>          while the value <code>immediate</code> means that a host writeback
>          is immediately triggered for all pages touched during a guest file
>          write operation <span class="since">(since 0.9.10)</span>.
> +        A "filesystem" element has an optional
> +        attribute <code>model</code><span class="since"> (since
> +        1.2.8)</span>, which is one of "9p", "mtp" (used by QEMU/KVM),
> +        if this element is not specified the default is "9p".
>          </dd>
>          <dt><code>type='template'</code></dt>
>          <dd>
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 033f2f6..684acec 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -1937,6 +1937,19 @@
>            </element>
>          </optional>
>        </interleave>
> +      <interleave>
> +        <optional>
> +          <element name="model">
> +            <attribute name="type">
> +              <choice>
> +                <value>9p</value>
> +                <value>mtp</value>
> +              </choice>
> +            </attribute>
> +            <empty/>
> +          </element>
> +        </optional>
> +      </interleave>
>      </element>
>    </define>
>    <define name="fsDriver">
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 14338ba..98dbe14 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -344,6 +344,11 @@ VIR_ENUM_IMPL(virDomainFS, VIR_DOMAIN_FS_TYPE_LAST,
>                "ram",
>                "bind")
>  
> +VIR_ENUM_IMPL(virDomainFSModel, VIR_DOMAIN_FS_MODEL_LAST,
> +              "default",
> +              "9p",
> +              "mtp")
> +
>  VIR_ENUM_IMPL(virDomainFSDriver, VIR_DOMAIN_FS_DRIVER_TYPE_LAST,
>                "default",
>                "path",
> @@ -6459,6 +6464,7 @@ virDomainFSDefParseXML(xmlNodePtr node,
>      virDomainFSDefPtr def;
>      xmlNodePtr cur, save_node = ctxt->node;
>      char *type = NULL;
> +    char *model = NULL;
>      char *fsdriver = NULL;
>      char *source = NULL;
>      char *target = NULL;
> @@ -6536,6 +6542,9 @@ virDomainFSDefParseXML(xmlNodePtr node,
>                      wrpolicy = virXMLPropString(cur, "wrpolicy");
>                  if (!format)
>                      format = virXMLPropString(cur, "format");
> +            } else if (!model &&
> +                       xmlStrEqual(cur->name, BAD_CAST "model")) {
> +                model = virXMLPropString(cur, "type");
>              }
>          }
>          cur = cur->next;
> @@ -6557,6 +6566,14 @@ virDomainFSDefParseXML(xmlNodePtr node,
>          }
>      }
>  
> +    if (model) {
> +        if ((def->model = virDomainFSModelTypeFromString(model)) <= 0) {
> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                           _("unknown model value '%s'"), model);
> +            goto error;
> +        }
> +    }
> +
>      if (wrpolicy) {
>          if ((def->wrpolicy = virDomainFSWrpolicyTypeFromString(wrpolicy)) <= 0) {
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> @@ -6616,6 +6633,7 @@ virDomainFSDefParseXML(xmlNodePtr node,
>      VIR_FREE(usage);
>      VIR_FREE(units);
>      VIR_FREE(format);
> +    VIR_FREE(model);
>  
>      return def;
>  
> @@ -15786,6 +15804,14 @@ virDomainFSDefFormat(virBufferPtr buf,
>  
>      switch (def->type) {
>      case VIR_DOMAIN_FS_TYPE_MOUNT:
> +        virBufferEscapeString(buf, "<source dir='%s'/>\n",
> +                              def->src);
> +        if (def->model) {
> +            virBufferEscapeString(buf, "<model type='%s'/>\n",
> +                                  virDomainFSModelTypeToString(def->model));
> +        }

>From the XML pov, we shouldn't restrict use of <model> to only be
for FS_TYPE_MOUNT. That is a QEMU driver implementation restriction,
so just make the QEMU driver raise VIR_ERR_CONFIG_UNSUPPORTED for
the cases we don't want, when building the CLI args

> +        break;
> +
>      case VIR_DOMAIN_FS_TYPE_BIND:
>          virBufferEscapeString(buf, "<source dir='%s'/>\n",
>                                def->src);

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list