提交 e24767eb 编写于 作者: M Michal Privoznik

Revert "lock_driver: Introduce VIR_LOCK_MANAGER_ACQUIRE_ROLLBACK"

This reverts commit 385eb839.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NJohn Ferlan <jferlan@redhat.com>
上级 84ee3268
...@@ -67,10 +67,6 @@ typedef enum { ...@@ -67,10 +67,6 @@ typedef enum {
VIR_LOCK_MANAGER_ACQUIRE_REGISTER_ONLY = (1 << 0), VIR_LOCK_MANAGER_ACQUIRE_REGISTER_ONLY = (1 << 0),
/* Prevent further lock/unlock calls from this process */ /* Prevent further lock/unlock calls from this process */
VIR_LOCK_MANAGER_ACQUIRE_RESTRICT = (1 << 1), VIR_LOCK_MANAGER_ACQUIRE_RESTRICT = (1 << 1),
/* Used when acquiring more resources in which one of them
* can't be acquired, perform a rollback and release all
* resources acquired so far. */
VIR_LOCK_MANAGER_ACQUIRE_ROLLBACK = (1 << 2),
} virLockManagerAcquireFlags; } virLockManagerAcquireFlags;
typedef enum { typedef enum {
......
...@@ -735,34 +735,6 @@ static int virLockManagerLockDaemonAddResource(virLockManagerPtr lock, ...@@ -735,34 +735,6 @@ static int virLockManagerLockDaemonAddResource(virLockManagerPtr lock,
} }
static int virLockManagerLockDaemonReleaseImpl(virNetClientPtr client,
virNetClientProgramPtr program,
int counter,
virLockManagerLockDaemonResourcePtr res)
{
virLockSpaceProtocolReleaseResourceArgs args;
memset(&args, 0, sizeof(args));
args.path = res->lockspace;
args.name = res->name;
args.flags = res->flags;
args.flags &=
~(VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_SHARED |
VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_AUTOCREATE |
VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_METADATA);
return virNetClientProgramCall(program,
client,
counter,
VIR_LOCK_SPACE_PROTOCOL_PROC_RELEASE_RESOURCE,
0, NULL, NULL, NULL,
(xdrproc_t)xdr_virLockSpaceProtocolReleaseResourceArgs, &args,
(xdrproc_t)xdr_void, NULL);
}
static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock, static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock,
const char *state ATTRIBUTE_UNUSED, const char *state ATTRIBUTE_UNUSED,
unsigned int flags, unsigned int flags,
...@@ -773,13 +745,10 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock, ...@@ -773,13 +745,10 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock,
virNetClientProgramPtr program = NULL; virNetClientProgramPtr program = NULL;
int counter = 0; int counter = 0;
int rv = -1; int rv = -1;
ssize_t i;
ssize_t lastGood = -1;
virLockManagerLockDaemonPrivatePtr priv = lock->privateData; virLockManagerLockDaemonPrivatePtr priv = lock->privateData;
virCheckFlags(VIR_LOCK_MANAGER_ACQUIRE_REGISTER_ONLY | virCheckFlags(VIR_LOCK_MANAGER_ACQUIRE_REGISTER_ONLY |
VIR_LOCK_MANAGER_ACQUIRE_RESTRICT | VIR_LOCK_MANAGER_ACQUIRE_RESTRICT, -1);
VIR_LOCK_MANAGER_ACQUIRE_ROLLBACK, -1);
if (priv->type == VIR_LOCK_MANAGER_OBJECT_TYPE_DOMAIN && if (priv->type == VIR_LOCK_MANAGER_OBJECT_TYPE_DOMAIN &&
priv->nresources == 0 && priv->nresources == 0 &&
...@@ -798,6 +767,7 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock, ...@@ -798,6 +767,7 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock,
goto cleanup; goto cleanup;
if (!(flags & VIR_LOCK_MANAGER_ACQUIRE_REGISTER_ONLY)) { if (!(flags & VIR_LOCK_MANAGER_ACQUIRE_REGISTER_ONLY)) {
size_t i;
for (i = 0; i < priv->nresources; i++) { for (i = 0; i < priv->nresources; i++) {
virLockSpaceProtocolAcquireResourceArgs args; virLockSpaceProtocolAcquireResourceArgs args;
...@@ -815,7 +785,6 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock, ...@@ -815,7 +785,6 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock,
(xdrproc_t)xdr_virLockSpaceProtocolAcquireResourceArgs, &args, (xdrproc_t)xdr_virLockSpaceProtocolAcquireResourceArgs, &args,
(xdrproc_t)xdr_void, NULL) < 0) (xdrproc_t)xdr_void, NULL) < 0)
goto cleanup; goto cleanup;
lastGood = i;
} }
} }
...@@ -826,28 +795,8 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock, ...@@ -826,28 +795,8 @@ static int virLockManagerLockDaemonAcquire(virLockManagerPtr lock,
rv = 0; rv = 0;
cleanup: cleanup:
if (rv < 0) { if (rv != 0 && fd)
int saved_errno = errno; VIR_FORCE_CLOSE(*fd);
virErrorPtr origerr;
virErrorPreserveLast(&origerr);
if (fd)
VIR_FORCE_CLOSE(*fd);
if (flags & VIR_LOCK_MANAGER_ACQUIRE_ROLLBACK) {
for (i = lastGood; i >= 0; i--) {
virLockManagerLockDaemonResourcePtr res = &priv->resources[i];
if (virLockManagerLockDaemonReleaseImpl(client, program,
counter++, res) < 0)
VIR_WARN("Unable to release resource lockspace=%s name=%s",
res->lockspace, res->name);
}
}
virErrorRestore(&origerr);
errno = saved_errno;
}
virNetClientClose(client); virNetClientClose(client);
virObjectUnref(client); virObjectUnref(client);
virObjectUnref(program); virObjectUnref(program);
...@@ -875,10 +824,27 @@ static int virLockManagerLockDaemonRelease(virLockManagerPtr lock, ...@@ -875,10 +824,27 @@ static int virLockManagerLockDaemonRelease(virLockManagerPtr lock,
goto cleanup; goto cleanup;
for (i = 0; i < priv->nresources; i++) { for (i = 0; i < priv->nresources; i++) {
virLockManagerLockDaemonResourcePtr res = &priv->resources[i]; virLockSpaceProtocolReleaseResourceArgs args;
memset(&args, 0, sizeof(args));
if (virLockManagerLockDaemonReleaseImpl(client, program, if (priv->resources[i].lockspace)
counter++, res) < 0) args.path = priv->resources[i].lockspace;
args.name = priv->resources[i].name;
args.flags = priv->resources[i].flags;
args.flags &=
~(VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_SHARED |
VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_AUTOCREATE |
VIR_LOCK_SPACE_PROTOCOL_ACQUIRE_RESOURCE_METADATA);
if (virNetClientProgramCall(program,
client,
counter++,
VIR_LOCK_SPACE_PROTOCOL_PROC_RELEASE_RESOURCE,
0, NULL, NULL, NULL,
(xdrproc_t)xdr_virLockSpaceProtocolReleaseResourceArgs, &args,
(xdrproc_t)xdr_void, NULL) < 0)
goto cleanup; goto cleanup;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册