[libvirt] [PATCH 2/4] conf: introduce virDomainDefCheckBootOrder

Peter Krempa pkrempa at redhat.com
Tue May 29 07:26:51 UTC 2018


On Mon, May 28, 2018 at 15:54:03 +0200, Ján Tomko wrote:
> Move the check for boot elements into a separate function
> and remove its dependency on the parser-supplied bootHash table.
> 
> Reconstructing the hash table from the domain definition
> effectively duplicates the check for duplicate boot order
> values, also present in virDomainDeviceBootParseXML.

So the semantical difference is that places that call into the
post-parse infrastructure which construct the domain definition object
by other means that parsing XML will get the same treatment as when XML
is parsed.

> 
> Signed-off-by: Ján Tomko <jtomko at redhat.com>
> ---
>  src/conf/domain_conf.c                       | 89 +++++++++++++++++++++++-----
>  tests/qemuargv2xmldata/nomachine-aarch64.xml |  1 +
>  tests/qemuargv2xmldata/nomachine-ppc64.xml   |  1 +
>  tests/qemuargv2xmldata/nomachine-x86_64.xml  |  1 +
>  tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml  |  1 +
>  5 files changed, 78 insertions(+), 15 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index d6ac47c629..f087a3680f 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -4939,10 +4939,79 @@ virDomainDefPostParseCPU(virDomainDefPtr def)

[...]

> +
> +
> +static int
> +virDomainDefCheckBootOrder(virDomainDefPtr def)

[1]

> +{
> +    virHashTablePtr bootHash = NULL;
> +    int ret = -1;
> +
> +    if (def->os.type != VIR_DOMAIN_OSTYPE_HVM)
> +        return 0;

Please do this check outside of this function. If this function is
invoked it should o it's job, especially since you also have other
conditions when to invoke it outside.

> +
> +    if (!(bootHash = virHashCreate(5, NULL)))
> +        goto cleanup;
> +
> +    if (virDomainDeviceInfoIterate(def, virDomainDefCollectBootOrder, bootHash) < 0)
> +        goto cleanup;
> +
> +    if (def->os.nBootDevs > 0 && virHashSize(bootHash) > 0) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                       _("per-device boot elements cannot be used"
> +                         " together with os/boot elements"));
> +        goto cleanup;
> +    }
> +
> +    if (def->os.nBootDevs == 0 && virHashSize(bootHash) == 0) {
> +        def->os.nBootDevs = 1;
> +        def->os.bootDevs[0] = VIR_DOMAIN_BOOT_DISK;

[1] this in contrast to the name of the function modifies stuff ...

> +    }
> +
> +    ret = 0;
> +
> + cleanup:
> +    virHashFree(bootHash);
> +    return ret;
> +}
> +
> +

[...]

> @@ -4979,6 +5034,10 @@ virDomainDefPostParseCommon(virDomainDefPtr def,
>      if (virDomainDefRejectDuplicatePanics(def) < 0)
>          return -1;
>  
> +    if (!(data->xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_NO_BOOT_ORDER) &&
> +        virDomainDefCheckBootOrder(def) < 0)

Add the condition for checking HVM here.

> +        return -1;
> +
>      if (virDomainDefPostParseTimer(def) < 0)
>          return -1;
>  

[...]

> diff --git a/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml b/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
> index afb9030681..a3d54ae3c1 100644
> --- a/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
> +++ b/tests/sexpr2xmldata/sexpr2xml-fv-kernel.xml
> @@ -10,6 +10,7 @@
>      <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
>      <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
>      <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  </cmdline>
> +    <boot dev='hd'/>

This looks wrong here since we do have the 'kernel' and 'initrd'
elements. Given that it's caused by the semantic difference I think it's
okay.

>    </os>
>    <clock offset='variable' adjustment='0' basis='utc'/>
>    <on_poweroff>destroy</on_poweroff>

ACK if you move out the condition and note the semantic impact in the
commit message.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180529/e7d144b7/attachment-0001.sig>


More information about the libvir-list mailing list