From ee3eddb33258aab651a89389acacb088ab498d63 Mon Sep 17 00:00:00 2001 From: Jim Fehlig Date: Thu, 16 Apr 2015 11:32:42 -0600 Subject: [PATCH] locking: relax PID requirement Some hypervisors like Xen do not have PIDs associated with domains. Relax the requirement for PID != 0 in the locking code so it can be used by hypervisors that do not represent domains as a process running on the host. Signed-off-by: Jim Fehlig --- src/locking/lock_daemon.c | 2 +- src/locking/lock_daemon_dispatch.c | 16 ++++++++-------- src/locking/lock_driver_lockd.c | 7 ++----- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c index bb165c0d50..042ff947f8 100644 --- a/src/locking/lock_daemon.c +++ b/src/locking/lock_daemon.c @@ -678,7 +678,7 @@ virLockDaemonClientFree(void *opaque) signum = SIGKILL; else signum = 0; - if (virProcessKill(priv->clientPid, signum) < 0) { + if (priv->clientPid != 0 && virProcessKill(priv->clientPid, signum) < 0) { if (errno == ESRCH) break; diff --git a/src/locking/lock_daemon_dispatch.c b/src/locking/lock_daemon_dispatch.c index a7cee9df04..bad646c6d0 100644 --- a/src/locking/lock_daemon_dispatch.c +++ b/src/locking/lock_daemon_dispatch.c @@ -62,7 +62,7 @@ virLockSpaceProtocolDispatchAcquireResource(virNetServerPtr server ATTRIBUTE_UNU goto cleanup; } - if (!priv->ownerPid) { + if (!priv->ownerId) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("lock owner details have not been registered")); goto cleanup; @@ -120,7 +120,7 @@ virLockSpaceProtocolDispatchCreateResource(virNetServerPtr server ATTRIBUTE_UNUS goto cleanup; } - if (!priv->ownerPid) { + if (!priv->ownerId) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("lock owner details have not been registered")); goto cleanup; @@ -169,7 +169,7 @@ virLockSpaceProtocolDispatchDeleteResource(virNetServerPtr server ATTRIBUTE_UNUS goto cleanup; } - if (!priv->ownerPid) { + if (!priv->ownerId) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("lock owner details have not been registered")); goto cleanup; @@ -218,7 +218,7 @@ virLockSpaceProtocolDispatchNew(virNetServerPtr server ATTRIBUTE_UNUSED, goto cleanup; } - if (!priv->ownerPid) { + if (!priv->ownerId) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("lock owner details have not been registered")); goto cleanup; @@ -273,9 +273,9 @@ virLockSpaceProtocolDispatchRegister(virNetServerPtr server ATTRIBUTE_UNUSED, goto cleanup; } - if (priv->ownerPid) { + if (!args->owner.id) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("lock owner details have already been registered")); + _("lock owner details have not been registered")); goto cleanup; } @@ -320,7 +320,7 @@ virLockSpaceProtocolDispatchReleaseResource(virNetServerPtr server ATTRIBUTE_UNU goto cleanup; } - if (!priv->ownerPid) { + if (!priv->ownerId) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("lock owner details have not been registered")); goto cleanup; @@ -370,7 +370,7 @@ virLockSpaceProtocolDispatchRestrict(virNetServerPtr server ATTRIBUTE_UNUSED, goto cleanup; } - if (!priv->ownerPid) { + if (!priv->ownerId) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("lock owner details have not been registered")); goto cleanup; diff --git a/src/locking/lock_driver_lockd.c b/src/locking/lock_driver_lockd.c index 3a48a6adc9..c974d60da7 100644 --- a/src/locking/lock_driver_lockd.c +++ b/src/locking/lock_driver_lockd.c @@ -466,11 +466,8 @@ static int virLockManagerLockDaemonNew(virLockManagerPtr lock, _("Missing ID parameter for domain object")); return -1; } - if (priv->pid == 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Missing PID parameter for domain object")); - return -1; - } + if (priv->pid == 0) + VIR_DEBUG("Missing PID parameter for domain object"); if (!priv->name) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing name parameter for domain object")); -- GitLab