[libvirt] [PATCH v2 libvirt 1/8] conf: add <model> child element to <filesystem>
Michal Privoznik
mprivozn at redhat.com
Tue Aug 19 15:46:14 UTC 2014
On 11.08.2014 16:47, Giuseppe Scrivano wrote:
> Signed-off-by: Giuseppe Scrivano <gscrivan at redhat.com>
> ---
> src/conf/domain_conf.c | 25 +++++++++++++++++++++++++
> src/conf/domain_conf.h | 11 +++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index c7016f3..9252ffa 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",
> @@ -6458,6 +6463,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;
> @@ -6535,6 +6541,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");
When introducing a new element to the XML it should always go with RNG
schema adjustment, docs change and at least one test case.
That is squash 5/8 and 8/8 into this patch.
> }
> }
> cur = cur->next;
> @@ -6556,6 +6565,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,
> @@ -15795,6 +15812,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));
> + }
> + break;
> +
> case VIR_DOMAIN_FS_TYPE_BIND:
> virBufferEscapeString(buf, "<source dir='%s'/>\n",
> def->src);
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index ff7d640..d7664e4 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -764,6 +764,15 @@ typedef enum {
> VIR_DOMAIN_FS_TYPE_LAST
> } virDomainFSType;
>
> +/* Filesystem model */
> +typedef enum {
> + VIR_DOMAIN_FS_MODEL_DEFAULT = 0,
> + VIR_DOMAIN_FS_MODEL_9P, /* 9P network filesystem */
> + VIR_DOMAIN_FS_MODEL_MTP, /* MTP usb filesystem */
> +
> + VIR_DOMAIN_FS_MODEL_LAST
> +} virDomainFSModel;
> +
> /* Filesystem driver type */
> typedef enum {
> VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT = 0,
> @@ -808,6 +817,7 @@ struct _virDomainFSDef {
> virDomainDeviceInfo info;
> unsigned long long space_hard_limit; /* in bytes */
> unsigned long long space_soft_limit; /* in bytes */
> + int model;
> };
>
>
> @@ -2585,6 +2595,7 @@ VIR_ENUM_DECL(virDomainControllerModelPCI)
> VIR_ENUM_DECL(virDomainControllerModelSCSI)
> VIR_ENUM_DECL(virDomainControllerModelUSB)
> VIR_ENUM_DECL(virDomainFS)
> +VIR_ENUM_DECL(virDomainFSModel)
> VIR_ENUM_DECL(virDomainFSDriver)
> VIR_ENUM_DECL(virDomainFSAccessMode)
> VIR_ENUM_DECL(virDomainFSWrpolicy)
>
And here are some small nits that you should squash in as well:
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c1a9950..d05fabc 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -6625,6 +6625,7 @@ virDomainFSDefParseXML(xmlNodePtr node,
cleanup:
ctxt->node = save_node;
VIR_FREE(type);
+ VIR_FREE(model);
VIR_FREE(fsdriver);
VIR_FREE(target);
VIR_FREE(source);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index d7664e4..80e0c9a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -767,8 +767,8 @@ typedef enum {
/* Filesystem model */
typedef enum {
VIR_DOMAIN_FS_MODEL_DEFAULT = 0,
- VIR_DOMAIN_FS_MODEL_9P, /* 9P network filesystem */
- VIR_DOMAIN_FS_MODEL_MTP, /* MTP usb filesystem */
+ VIR_DOMAIN_FS_MODEL_9P, /* 9P network filesystem */
+ VIR_DOMAIN_FS_MODEL_MTP, /* MTP usb filesystem */
VIR_DOMAIN_FS_MODEL_LAST
} virDomainFSModel;
@@ -817,7 +817,7 @@ struct _virDomainFSDef {
virDomainDeviceInfo info;
unsigned long long space_hard_limit; /* in bytes */
unsigned long long space_soft_limit; /* in bytes */
- int model;
+ int model; /* enum virDomainFSModel */
};
Otherwise looking good.
Michal
More information about the libvir-list
mailing list