[libvirt] [PATCH v2 05/15] vbox: Cleanup vboxAttachDrives implementation

John Ferlan jferlan at redhat.com
Fri Nov 3 21:46:37 UTC 2017



On 11/03/2017 12:19 PM, Dawid Zamirski wrote:
> On Fri, 2017-11-03 at 09:43 -0400, John Ferlan wrote:
>>
>> On 10/24/2017 03:35 PM, Dawid Zamirski wrote:
>>> This commit primes vboxAttachDrives for further changes so when
>>> they
>>> are made, the diff is less noisy:
>>>
>>> * move variable declarations to the top of the function
>>> * add disk variable to replace all the def->disks[i] instances
>>> * add cleanup at the end of the loop body, so it's all in one place
>>>   rather than scattered through the loop body. It's purposefully
>>>   called 'cleanup' rather than 'skip' or 'continue' because future
>>>   commit will treat errors as hard-failures.
>>> ---
>>>  src/vbox/vbox_common.c | 95 ++++++++++++++++++++++++------------
>>> --------------
>>>  1 file changed, 46 insertions(+), 49 deletions(-)
>>>
>>> diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
>>> index fa8471e68..b949c4db7 100644
>>> --- a/src/vbox/vbox_common.c
>>> +++ b/src/vbox/vbox_common.c
>>> @@ -959,8 +959,17 @@ static void
>>>  vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr data, IMachine
>>> *machine)
>>>  {
>>>      size_t i;
>>> +    int type, format;
>>> +    const char *src = NULL;
>>>      nsresult rc = 0;
>>> +    virDomainDiskDefPtr disk = NULL;
>>>      PRUnichar *storageCtlName = NULL;
>>> +    IMedium *medium = NULL;
>>> +    PRUnichar *mediumFileUtf16 = NULL, *mediumEmpty = NULL;
>>> +    PRUint32 devicePort, deviceSlot, deviceType, accessMode;
>>> +    vboxIID mediumUUID;
>>> +
>>> +    VBOX_IID_INITIALIZE(&mediumUUID);
>>
>> The cleanup: label would clean this up on the first pass through the
>> loop, so it needs to move outside the last }.
>>
> 
> The VBOX_IID_INITIALIZE macro is a simple struct initializer that is
> equivalent of vboxIID mediumUUID = {NULL, true}; as a matter of fact,
> src/vbox/vbox_tmpl.c uses VBOX_IID_INITIALIZER macro which is exactly
> that, but that macro is not available to vbox_common.c This is likely
> another remanent of VBOX <= 3 support that needs to be cleaned up - I
> will do so in a separate patch as it will touch to many parts of the
> driver and when you take a closer look we don't really need vboxIID
> struct at all and can simply use PRUnichar directly for VBOX UUIDs.
> 

OK it really wasn't overly intuitively obvious what VBOX_IID_INITIALIZE
a/k/a gVBoxAPI.UIID.vboxIIDInitialize really did, your explanation makes
sense.


>> I can do this for you; however, I have a question - something I
>> noticed
>> while reviewing patch 7.  There's a call:
>>
>> rc = gVBoxAPI.UIMedium.GetId(medium, &mediumUUID);
>>
>> for which it wasn't clear whether the mediumUUID is overwritten. If
>> it
>> is, then although existing - it probably needs some cleanup and of
>> course would change the flow a bit to doing that initializer each
>> time
>> through the loop.
> 
> Yes, it is overwritten but since the cleanup: label is at the end of
> the loop body it will set mediumUIID to {NULL, true} which is the same
> as calling VBOX_IID_INITIALIZE (see _vboxIIDUnalloc in
> src/vbox/vbox_tmpl.c)
> 
>>
>> Moving it does have a ripple effect on subsequent patches, but it's
>> manageable.
>>
>> If moving it to the end is acceptable, then
> 
> As per above, I'd rather leave this patch "as is" as the (future)
> driver cleanup patches for vboxIID will make this clearer.
> 

OK I'll leave it as is.  Patches 1-2 and 4-9 are thus all R-B and will
be pushed in a little while.

John

>>
>> Reviewed-by: John Ferlan <jferlan at redhat.com>
>>
>> otherwise let me know and I'll let you repost as part of a v3
>>
>> John
>>

[...]




More information about the libvir-list mailing list