[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