[libvirt] [PATCH v4 08/23] lock_driver: Introduce new VIR_LOCK_MANAGER_OBJECT_TYPE_DAEMON

Michal Privoznik mprivozn at redhat.com
Tue Sep 18 15:17:49 UTC 2018


On 09/17/2018 06:17 PM, John Ferlan wrote:
> 
> 
> On 09/10/2018 05:36 AM, Michal Privoznik wrote:
>> We will want virtlockd to lock files on behalf of libvirtd and
>> not qemu process, because it is libvirtd that needs an exclusive
>> access not qemu. This requires new lock context.
>>
>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>> ---
>>  src/locking/lock_driver.h         |   2 +
>>  src/locking/lock_driver_lockd.c   | 291 ++++++++++++++++++++++++--------------
>>  src/locking/lock_driver_sanlock.c |  37 +++--
>>  3 files changed, 214 insertions(+), 116 deletions(-)
>>
> 
> [...]
> 
>> @@ -156,10 +167,24 @@ virLockManagerLockDaemonConnectionRegister(virLockManagerPtr lock,
>>      memset(&args, 0, sizeof(args));
>>  
>>      args.flags = 0;
>> -    memcpy(args.owner.uuid, priv->uuid, VIR_UUID_BUFLEN);
>> -    args.owner.name = priv->name;
>> -    args.owner.id = priv->id;
>> -    args.owner.pid = priv->pid;
>> +
>> +    switch (priv->type) {
>> +    case VIR_LOCK_MANAGER_OBJECT_TYPE_DOMAIN:
>> +        memcpy(args.owner.uuid, priv->t.dom.uuid, VIR_UUID_BUFLEN);
>> +        args.owner.name = priv->t.dom.name;
>> +        args.owner.id = priv->t.dom.id;
>> +        args.owner.pid = priv->t.dom.pid;
>> +        break;
>> +
>> +    case VIR_LOCK_MANAGER_OBJECT_TYPE_DAEMON:
>> +        memcpy(args.owner.uuid, priv->t.daemon.uuid, VIR_UUID_BUFLEN);
>> +        args.owner.name = priv->t.daemon.name;
>> +        args.owner.pid = priv->t.daemon.pid;
>> +        break;
>> +
>> +    default:
> 
> Should there be an error message? Since virNetClientProgramCall would
> provide one on error and it seems callers would expect it... So we don't
> end up with an error happened, but we have no clue where.

The 'default' label exists merely to shut gcc up. However, I'll copy the
error message from virLockManagerLockDaemonNew().

> 
>> +        return -1;
>> +    }
>>  
>>      if (virNetClientProgramCall(program,
>>                                  client,
> 
> [...]
> 
> I suspect you can make the right choice above...
> 
> Reviewed-by: John Ferlan <jferlan at redhat.com>

Michal




More information about the libvir-list mailing list