[libvirt] [PATCH] vz: add validation callbacks

Mikhail Feoktistov mfeoktistov at virtuozzo.com
Thu Aug 18 11:49:32 UTC 2016


On 18.08.2016 14:47, Maxim Nestratov wrote:
> 18-Aug-16 14:43, Mikhail Feoktistov пишет:
>
>> This patch fixes a bug which occurs when we check a bus and unit number
>> for a new attached disk. We should do this check in ValidadionCallback,
>> not in PostParse callback. Because in PostParse we have not initialized
>> disk->info.addr.drive struct yet.
>> Move part of code from domainPostParseCallback to domainValidateCallback
>> and part from devicesPostParseCallback to deviceValidateCallback.
>> PostParse callbacks are for modification data.
>> ValidateCallbacks are only for checks.
>> ---
>>   src/vz/vz_driver.c | 23 +++++++++++++++++++++--
>>   src/vz/vz_utils.c  |  2 +-
>>   src/vz/vz_utils.h  |  2 +-
>>   3 files changed, 23 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
>> index b1b6d14..e9f9a17 100644
>> --- a/src/vz/vz_driver.c
>> +++ b/src/vz/vz_driver.c
>> @@ -232,6 +232,7 @@ vzConnectGetCapabilities(virConnectPtr conn)
>>       xml = virCapabilitiesFormatXML(privconn->driver->caps);
>>       return xml;
>>   }
>> +
>
> Unrelated
small cosmetic fix
>
>>   static int
>>   vzDomainDefAddDefaultInputDevices(virDomainDefPtr def)
>>   {
>> @@ -258,11 +259,19 @@ static int
>>   vzDomainDefPostParse(virDomainDefPtr def,
>>                        virCapsPtr caps ATTRIBUTE_UNUSED,
>>                        unsigned int parseFlags ATTRIBUTE_UNUSED,
>> -                     void *opaque)
>> +                     void *opaque ATTRIBUTE_UNUSED)
>>   {
>>       if (vzDomainDefAddDefaultInputDevices(def) < 0)
>>           return -1;
>>   +    return 0;
>> +}
>> +
>> +static int
>> +vzDomainDefValidate(const virDomainDef *def,
>> +                    virCapsPtr caps ATTRIBUTE_UNUSED,
>> +                    void *opaque)
>> +{
>>       if (vzCheckUnsupportedControllers(def, opaque) < 0)
>>           return -1;
>>   @@ -284,6 +293,14 @@ 
>> vzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
>>           VIR_STRDUP(dev->data.net->model, "e1000") < 0)
>>           return -1;
>>   +    return 0;
>> +}
>> +
>> +static int
>> +vzDomainDeviceDefValidate(const virDomainDeviceDef *dev,
>> +                          const virDomainDef *def,
>> +                          void *opaque ATTRIBUTE_UNUSED)
>> +{
>>       if (dev->type == VIR_DOMAIN_DEVICE_DISK)
>>           return vzCheckUnsupportedDisk(def, dev->data.disk, opaque);
>>       else if (dev->type == VIR_DOMAIN_DEVICE_GRAPHICS)
>> @@ -299,8 +316,10 @@ static virDomainXMLPrivateDataCallbacks 
>> vzDomainXMLPrivateDataCallbacksPtr = {
>>     static virDomainDefParserConfig vzDomainDefParserConfig = {
>>       .macPrefix = {0x42, 0x1C, 0x00},
>> -    .devicesPostParseCallback = vzDomainDeviceDefPostParse,
>>       .domainPostParseCallback = vzDomainDefPostParse,
>> +    .devicesPostParseCallback = vzDomainDeviceDefPostParse,
>> +    .domainValidateCallback = vzDomainDefValidate,
>> +    .deviceValidateCallback = vzDomainDeviceDefValidate,
>>   };
>>     static vzDriverPtr
>> diff --git a/src/vz/vz_utils.c b/src/vz/vz_utils.c
>> index 312355d..eaf09f2 100644
>> --- a/src/vz/vz_utils.c
>> +++ b/src/vz/vz_utils.c
>> @@ -463,7 +463,7 @@ vzCheckUnsupportedDisk(const virDomainDef *def,
>>   }
>>     int
>> -vzCheckUnsupportedControllers(virDomainDefPtr def, vzCapabilitiesPtr 
>> vzCaps)
>> +vzCheckUnsupportedControllers(const virDomainDef *def, 
>> vzCapabilitiesPtr vzCaps)
>>   {
>>       size_t i, j;
>>       virDomainControllerDefPtr controller;
>> diff --git a/src/vz/vz_utils.h b/src/vz/vz_utils.h
>> index d033f94..4b407ec 100644
>> --- a/src/vz/vz_utils.h
>> +++ b/src/vz/vz_utils.h
>> @@ -137,7 +137,7 @@ vzCheckUnsupportedDisk(const virDomainDef *def,
>>                          virDomainDiskDefPtr disk,
>>                          vzCapabilitiesPtr vzCaps);
>>   int
>> -vzCheckUnsupportedControllers(virDomainDefPtr def,
>> +vzCheckUnsupportedControllers(const virDomainDef *def,
>>                                 vzCapabilitiesPtr vzCaps);
>>   int
>>   vzGetDefaultSCSIModel(vzDriverPtr driver,
>
> ACK




More information about the libvir-list mailing list