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 <jfehlig(a)suse.com>
---
V2:
Change check for ownerPid to ownerId in lock daemon dispatcher
Change instance of VIR_WARN to VIR_DEBUG to prevent polluting the
logs with warnings when creating Xen domains.
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 bb165c0..042ff94 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 a7cee9d..bad646c 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 3a48a6a..c974d60 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"));
--
1.8.4.5