[libvirt] [PATCH v2 06/12] qemu: Generate cmd line at startup

John Ferlan jferlan at redhat.com
Thu Mar 8 00:18:57 UTC 2018



On 03/06/2018 12:31 PM, Michal Privoznik wrote:
> On 03/02/2018 02:22 PM, John Ferlan wrote:
>>
>>
>> On 02/21/2018 01:11 PM, Michal Privoznik wrote:
>>> This is the easier part. All we need to do here is put -object
>>> pr-manger-helper,id=$alias,path=$socketPath and then just
>>> reference the object in -drive file.pr-manger=$alias.
>>
>> s/manger/manager/
>>
>> My fingers usually the same way though as manger
>>
>>>
>>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>>> ---
>>>  src/qemu/qemu_command.c                            | 40 ++++++++++++++++++++++
>>>  .../disk-virtio-scsi-reservations-not-managed.args | 28 +++++++++++++++
>>>  .../disk-virtio-scsi-reservations.args             | 29 ++++++++++++++++
>>>  tests/qemuxml2argvtest.c                           |  8 +++++
>>>  4 files changed, 105 insertions(+)
>>>  create mode 100644 tests/qemuxml2argvdata/disk-virtio-scsi-reservations-not-managed.args
>>>  create mode 100644 tests/qemuxml2argvdata/disk-virtio-scsi-reservations.args
>>>
>>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>>> index fa0aa5d5c..069d60d35 100644
>>> --- a/src/qemu/qemu_command.c
>>> +++ b/src/qemu/qemu_command.c
>>> @@ -1514,6 +1514,20 @@ qemuDiskSourceGetProps(virStorageSourcePtr src)
>>>  }
>>>  
>>>  
>>> +static void
>>> +qemuBuildDriveSourcePR(virBufferPtr buf,
>>> +                       virStorageSourcePtr src)
>>> +{
>>> +    qemuDomainStorageSourcePrivatePtr srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
>>> +    qemuDomainDiskPRDPtr prd = srcPriv->prd;
>>> +
>>> +    if (!prd || !prd->alias)
>>> +        return;
>>> +
>>> +    virBufferAsprintf(buf, ",file.pr-manager=%s", prd->alias);
>>> +}
>>> +
>>> +
>>>  static int
>>>  qemuBuildDriveSourceStr(virDomainDiskDefPtr disk,
>>>                          virQEMUCapsPtr qemuCaps,
>>> @@ -1590,6 +1604,8 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk,
>>>  
>>>          if (disk->src->debug)
>>>              virBufferAsprintf(buf, ",file.debug=%d", disk->src->debugLevel);
>>> +
>>> +        qemuBuildDriveSourcePR(buf, disk->src);
>>>      } else {
>>>          if (!(source = virQEMUBuildDriveCommandlineFromJSON(srcprops)))
>>>              goto cleanup;
>>> @@ -9789,6 +9805,28 @@ qemuBuildPanicCommandLine(virCommandPtr cmd,
>>>  }
>>>  
>>>  
>>> +static void
>>> +qemuBuildMasterPRCommandLine(virCommandPtr cmd,
>>> +                             const virDomainDef *def)
>>> +{
>>> +    size_t i;
>>> +
>>> +    for (i = 0; i < def->ndisks; i++) {
>>> +        const virDomainDiskDef *disk = def->disks[i];
>>> +        qemuDomainStorageSourcePrivatePtr srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(disk->src);
>>> +        qemuDomainDiskPRDPtr prd = srcPriv->prd;
>>> +        virBuffer buf = VIR_BUFFER_INITIALIZER;
>>> +
>>> +        if (!prd || !prd->alias)
>>> +            continue;
>>> +
>>> +        virBufferAsprintf(&buf, "pr-manager-helper,id=%s,path=%s", prd->alias, prd->path);
>>> +        virCommandAddArg(cmd, "-object");
>>> +        virCommandAddArgBuffer(cmd, &buf);
>>
>> What happens when there's more than one disk using the managed mode
>> where you have a "static" alias and path, wouldn't there be multiple
>> lines with:
>>
>> -object
>> pr-manager-helper,id=pr-helper0,path=/tmp/lib/domain--1-QEMUGuest1/pr-helper0.sock
> 
> Ah sure.
> 

So having multiple "id=pr-helper0" is OK by QEMU?  OK, then.

John

>>
>> ?  And how is QEMU going to react to that?
>>
>> IOW: Shouldn't this code know it's already created an object for that
>> case and not generate another one?
>>
>> The other one :
>>
>> -object pr-manager-helper,id=pr-helper-sdb,path=/path/to/qemu-pr-helper.sock
>>
>> I get, but I'm still not thrilled with "sdb" as opposed to the
>> disk->info.alias of "scsi0-0-0-0" more commonly used. IIRC, there's no
>> guarantee that what libvirt calls "sdb" ends up being "sdb" on the
>> guest. My vague recollection of the algorithm that "automagically"
>> generates the address based on sda, sdb, sdc, etc. So "sdb" IIRC would
>> related to an address that would create an alias using "0-0-1"; whereas,
>> "sda" would create that "0-0-0" value.
> 
> Yes. I've changed it in the other patch so now 'pr-helper-scsi0-0-0-0'
> is generated.
> 
> Michal
> 




More information about the libvir-list mailing list