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

Peter Krempa pkrempa at redhat.com
Tue May 29 08:27:31 UTC 2018


On Tue, May 29, 2018 at 09:55:18 +0200, Ján Tomko wrote:
> On Tue, May 29, 2018 at 09:26:51AM +0200, Peter Krempa wrote:
> > 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.
> > 
> 
> How about:
> Now it will also be run on domains created by other means than XML
> parsing, since it will be run even for code paths that did not supply
> the bootHash table before.

Sounds goog to me.

> 
> > 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 ...
> 
> I can rename it to virDomainDefBootOrderPostParse

ACK to that

> 
> Jano


-------------- 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/7545bcad/attachment-0001.sig>


More information about the libvir-list mailing list