master - libdlm: major cleanup
Fabio M. Di Nitto
fabbione@fedoraproject.org
Thu Aug 28 09:43:00 GMT 2008
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=4e28e072aa4af4de699865e7b6809fbda98af792
Commit: 4e28e072aa4af4de699865e7b6809fbda98af792
Parent: dcdbcd10121c1aa04f9ccffe94aacbeb3c366c07
Author: Fabio M. Di Nitto <fdinitto@redhat.com>
AuthorDate: Thu Aug 28 10:41:23 2008 +0200
Committer: Fabio M. Di Nitto <fdinitto@redhat.com>
CommitterDate: Thu Aug 28 10:41:23 2008 +0200
libdlm: major cleanup
Move libaislock to contrib/ as it was not built within libdlm for ages.
Simplify libdlm/Makefile (first pass) and adapt the build system to cope
with %_lt.o.
Fix make/libs.mk to deal with multiple objects linked in a shared
library.
Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
---
contrib/Makefile | 2 +-
contrib/libaislock/Makefile | 13 +
contrib/libaislock/libaislock.c | 466 ++++++++++++++++++++++++++++++++++++++
contrib/libaislock/libaislock.h | 190 ++++++++++++++++
dlm/libdlm/Makefile | 24 +--
dlm/libdlm/libaislock.c | 468 ---------------------------------------
dlm/libdlm/libaislock.h | 190 ----------------
fence/agents/xvm/Makefile | 2 +-
make/cobj.mk | 8 +-
make/libs.mk | 2 +-
10 files changed, 684 insertions(+), 681 deletions(-)
diff --git a/contrib/Makefile b/contrib/Makefile
index 5504bd1..77a4b96 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -2,5 +2,5 @@ include ../make/defines.mk
include $(OBJDIR)/make/passthrough.mk
ifdef contrib_code
-SUBDIRS=askant
+SUBDIRS=askant libaislock
endif
diff --git a/contrib/libaislock/Makefile b/contrib/libaislock/Makefile
new file mode 100644
index 0000000..b392d55
--- /dev/null
+++ b/contrib/libaislock/Makefile
@@ -0,0 +1,13 @@
+TARGET= libaislock
+
+include ../../make/defines.mk
+include $(OBJDIR)/make/libs.mk
+include $(OBJDIR)/make/cobj.mk
+include $(OBJDIR)/make/clean.mk
+include $(OBJDIR)/make/install.mk
+include $(OBJDIR)/make/uninstall.mk
+
+CFLAGS += -fPIC
+CFLAGS += -I${incdir}
+
+LDFLAGS += -lpthread
diff --git a/contrib/libaislock/libaislock.c b/contrib/libaislock/libaislock.c
new file mode 100644
index 0000000..82f06ab
--- /dev/null
+++ b/contrib/libaislock/libaislock.c
@@ -0,0 +1,466 @@
+#include <pthread.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+
+#include <linux/types.h>
+#include <linux/dlm.h>
+#define BUILDING_LIBDLM
+#include "libdlm.h"
+#include "libaislock.h"
+#include <linux/dlm_device.h>
+
+enum {
+ SA_LCK_GRANT_CB = 1,
+ SA_LCK_WAITER_CB = 2,
+};
+
+static struct dlm_ls_info *sa_default_ls = NULL;
+
+inline int lkmode_ais2dlm(SaLckLockModeT mode)
+{
+ switch(mode)
+ {
+ case SA_LCK_PR_LOCK_MODE:
+ return DLM_LOCK_PR;
+ case SA_LCK_EX_LOCK_MODE:
+ return DLM_LOCK_EX;
+ default:
+ return -1;
+ }
+}
+
+inline SaLckLockModeT lkmode_dlm2ais(int mode)
+{
+ switch(mode)
+ {
+ case DLM_LOCK_PR:
+ return SA_LCK_PR_LOCK_MODE;
+ case DLM_LOCK_EX:
+ return SA_LCK_EX_LOCK_MODE;
+ default:
+ return -1;
+ }
+}
+
+inline unsigned long lkflag_ais2dlm(SaLckLockFlagsT flag)
+{
+ unsigned long dlm_flag = 0;
+
+ if(flag & SA_LCK_LOCK_NO_QUEUE)
+ dlm_flag |= DLM_LKF_NOQUEUE;
+ if(flag & SA_LCK_LOCK_ORPHAN)
+ dlm_flag |= DLM_LKF_ORPHAN;
+
+ return dlm_flag;
+}
+
+inline SaLckLockStatusT lkstatus_dlm2ais(int status)
+{
+ switch(status)
+ {
+ case -ENOMEM:
+ return SA_LCK_LOCK_NO_MORE;
+ case 0:
+ return SA_LCK_LOCK_GRANTED;
+ case -EAGAIN:
+ return SA_LCK_LOCK_NOT_QUEUED;
+ default:
+ return -1;
+ }
+}
+
+inline SaErrorT lkerr_dlm2ais(int status)
+{
+ switch(status)
+ {
+ case -EINVAL:
+ return SA_ERR_INVALID_PARAM;
+ case 0:
+ return SA_OK;
+ default:
+ return -1;
+ }
+}
+
+
+SaErrorT
+saLckInitialize(SaLckHandleT *lckHandle, const SaLckCallbacksT *lckCallbacks,
+ const SaVersionT *version)
+{
+ dlm_lshandle_t ls = NULL;
+
+ if (NULL == lckHandle)
+ return SA_ERR_INVALID_PARAM;
+
+ if (lckCallbacks) {
+ lckHandle->callback.saLckLockGrantCallback =
+ lckCallbacks->saLckLockGrantCallback;
+ lckHandle->callback.saLckLockWaiterCallback =
+ lckCallbacks->saLckLockWaiterCallback;
+ lckHandle->callback.saLckResourceUnlockCallback =
+ lckCallbacks->saLckResourceUnlockCallback;
+ } else {
+ lckHandle->callback.saLckLockGrantCallback = NULL;
+ lckHandle->callback.saLckLockWaiterCallback = NULL;
+ lckHandle->callback.saLckResourceUnlockCallback = NULL;
+ }
+ lckHandle->version.releaseCode = version->releaseCode;
+ lckHandle->version.major = version->major;
+ lckHandle->version.minor = version->minor;
+
+ ls = dlm_create_lockspace("sa_default", 0600);
+ if (!ls)
+ return SA_ERR_LIBRARY;
+
+ sa_default_ls = (struct dlm_ls_info *)ls;
+ return SA_OK;
+}
+
+
+SaErrorT
+saLckFinalize(SaLckHandleT *lckHandle)
+{
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ if(!dlm_release_lockspace("sa_default", sa_default_ls, 1)) {
+ return SA_OK;
+ } else {
+ return SA_ERR_LIBRARY;
+ }
+}
+
+SaErrorT
+saLckResourceOpen(const SaLckHandleT *lckHandle, const SaNameT *lockName,
+ SaLckResourceIdT *resourceId)
+{
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ if (lockName->length <= 31 ) /* OpenDLM only support namelen <= 31*/
+ {
+ resourceId->name.length = lockName->length;
+ strncpy((char *)resourceId->name.value, (char *)lockName->value, lockName->length);
+ } else {
+ return SA_ERR_NO_MEMORY;
+ }
+
+ return SA_OK;
+}
+
+
+SaErrorT
+saLckResourceClose(SaLckHandleT *lckHandle, SaLckResourceIdT *resourceId)
+{
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ return SA_OK;
+}
+
+
+SaErrorT
+saLckSelectionObjectGet(const SaLckHandleT *lckHandle,
+ SaSelectionObjectT *selectionObject)
+{
+ int fd = -1;
+
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ fd = dlm_ls_get_fd(sa_default_ls);
+
+ if(!fd)
+ return SA_ERR_LIBRARY;
+
+ *selectionObject = fd;
+
+ return SA_OK;
+}
+
+
+SaErrorT
+saLckDispatch(const SaLckHandleT *lckHandle,
+ const SaDispatchFlagsT dispatchFlags)
+{
+ int status;
+ int fdflags;
+ char resultbuf[sizeof(struct dlm_lock_result)];
+ struct dlm_lock_result *result = (struct dlm_lock_result *)resultbuf;
+ char *fullresult=NULL;
+ SaLckLockIdT *lkid;
+ SaLckLockModeT lock_mode;
+ int fd = -1;
+
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ fd = dlm_ls_get_fd(sa_default_ls);
+
+ if(!fd)
+ return SA_ERR_LIBRARY;
+
+ fdflags = fcntl(fd, F_GETFL, 0);
+ fcntl(fd, F_SETFL, fdflags | O_NONBLOCK);
+
+ do
+ {
+
+ /* Just read the header first */
+ status = read(fd, result, sizeof(struct dlm_lock_result));
+ if (status <= 0)
+ break;
+
+ if (result->length != status)
+ {
+ int newstat;
+
+ fullresult = malloc(result->length);
+ if (!fullresult)
+ break;
+
+ newstat = read(fd, fullresult, result->length);
+
+ /* If it read OK then use the new data. otherwise we can
+ still deliver the AST, it just might not have all the
+ info in it...hmmm */
+ if (newstat == result->length)
+ result = (struct dlm_lock_result *)fullresult;
+ }
+
+ /* Copy lksb to user's buffer - except the LVB ptr */
+ memcpy(result->user_lksb, &result->lksb,
+ sizeof(struct dlm_lksb) - sizeof(char*));
+
+ /* Flip the status. Kernel space likes negative return codes,
+ userspace positive ones */
+ result->user_lksb->sb_status = -result->user_lksb->sb_status;
+
+ /* Need not to care LVB*/
+#ifdef QUERY
+ /* Copy optional items */
+ if (result->qinfo_offset)
+ {
+ /* Just need the lockcount written out here */
+ struct dlm_queryinfo *qi = (struct dlm_queryinfo *)
+ (fullresult+result->qinfo_offset);
+ result->user_qinfo->gqi_lockcount = qi->gqi_lockcount;
+ }
+
+ if (result->qresinfo_offset)
+ memcpy(result->user_qinfo->gqi_resinfo,
+ fullresult+result->qresinfo_offset,
+ sizeof(struct dlm_resinfo));
+
+ if (result->qlockinfo_offset)
+ memcpy(result->user_qinfo->gqi_lockinfo,
+ fullresult+result->qlockinfo_offset,
+ sizeof(struct dlm_lockinfo) *
+ result->user_qinfo->gqi_lockcount);
+#endif
+ /* Call AST */
+ lkid = (SaLckLockIdT *)result->user_astparam;
+ if (lkid->unlock) {
+ /* dispatch unlock ast */
+ lkid->unlock = 0;
+ lkid->held_mode = 0;
+ if(lckHandle->callback.saLckResourceUnlockCallback)
+ lckHandle->callback.
+ saLckResourceUnlockCallback(
+ lkid->args, lkid->resource, lkid,
+ SA_LCK_LOCK_RELEASED, SA_OK);
+
+ } else if (SA_LCK_GRANT_CB == (int)result->user_astaddr) {
+ /* dispatch lock ast */
+ if (0 == lkid->lksb.sb_status) {
+ lkid->held_mode = lkid->requested_mode;
+ lock_mode = lkid->requested_mode;
+ } else {
+ lock_mode = lkid->held_mode;
+ }
+
+ if(lckHandle->callback.saLckLockGrantCallback)
+ lckHandle->callback.
+ saLckLockGrantCallback(
+ lkid->args, lkid->resource,
+ lkid, lock_mode,
+ lkstatus_dlm2ais(
+ lkid->lksb.sb_status),
+ SA_OK);
+ } else if (SA_LCK_WAITER_CB == (int)result->user_astaddr) {
+ /* dispatch waiter ast */
+ if(lckHandle->callback.saLckLockWaiterCallback)
+ lckHandle->callback.
+ saLckLockWaiterCallback(
+ lkid->args, lkid->resource,
+ lkid, lkid->held_mode, result->bast_mode);
+ } else {
+ return SA_ERR_LIBRARY;
+ }
+ } while (0 !=status && SA_DISPATCH_ONE != dispatchFlags);
+
+ /* EAGAIN is not an error */
+ if (status < 0 && errno == EAGAIN)
+ status = 0;
+
+ fcntl(fd, F_SETFL, fdflags);
+ return SA_OK;
+}
+
+SaErrorT
+SaLckResourceLockAsync(const SaLckHandleT *lckHandle, SaInvocationT invocation,
+ const SaLckResourceIdT *resourceId, SaLckLockIdT *lockId,
+ SaLckLockModeT lockMode, SaLckLockFlagsT lockFlags,
+ SaTimeT timeout)
+{
+ int ret_val; /* value to be returned from function */
+
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ /*FIXME deal with timeout in lock/lockasync/unlock.
+ */
+ lockId->resource = (SaLckResourceIdT *)resourceId;
+ lockId->requested_mode = lockMode;
+ lockId->args = invocation;
+
+ ret_val = dlm_ls_lock(sa_default_ls, lkmode_ais2dlm(lockMode),
+ &(lockId->lksb), lkflag_ais2dlm(lockFlags),
+ (void *)(resourceId->name.value),
+ resourceId->name.length, 0, (void *)SA_LCK_GRANT_CB,
+ lockId, (void *)SA_LCK_WAITER_CB, NULL);
+
+ return lkerr_dlm2ais(ret_val);
+}
+
+SaErrorT
+saLckResourceLock(const SaLckHandleT *lckHandle, SaInvocationT invocation,
+ const SaLckResourceIdT *resourceId, SaLckLockIdT *lockId,
+ SaLckLockModeT lockMode, SaLckLockFlagsT lockFlags,
+ SaTimeT timeout, SaLckLockStatusT *lockStatus)
+
+{
+ int ret_val; /* value to be returned from function */
+
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ lockId->resource = (SaLckResourceIdT *)resourceId;
+ lockId->requested_mode = lockMode;
+ lockId->args = invocation;
+
+ ret_val = dlm_ls_lock_wait(sa_default_ls, lkmode_ais2dlm(lockMode),
+ &(lockId->lksb), lkflag_ais2dlm(lockFlags),
+ (void *)(resourceId->name.value),
+ resourceId->name.length, 0, lockId,
+ (void *)SA_LCK_WAITER_CB, NULL);
+
+ *lockStatus = lkstatus_dlm2ais(lockId->lksb.sb_status);
+ lockId->held_mode = lockId->requested_mode;
+
+ return lkerr_dlm2ais(ret_val);
+}
+
+SaErrorT
+saLckResourceUnlock(const SaLckHandleT *lckHandle, SaLckLockIdT *lockId,
+ SaTimeT timeout)
+{
+ int ret_val; /* value to be returned from function */
+
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ ret_val = dlm_ls_unlock_wait(sa_default_ls, lockId->lksb.sb_lkid, 0,
+ &(lockId->lksb));
+ lockId->held_mode = 0;
+
+ return lkerr_dlm2ais(ret_val);
+}
+
+SaErrorT
+saLckResourceUnlockAsync(const SaLckHandleT *lckHandle,
+ SaInvocationT invocation, SaLckLockIdT *lockId)
+{
+ int ret_val; /* value to be returned from function */
+
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ lockId->unlock = 1;
+ lockId->args = invocation;
+
+
+ ret_val = dlm_ls_unlock(sa_default_ls, lockId->lksb.sb_lkid, 0, &(lockId->lksb),
+ lockId);
+
+ return lkerr_dlm2ais(ret_val);
+}
+
+
+SaErrorT
+saLckLockPurge(const SaLckHandleT *lckHandle,
+ const SaLckResourceIdT *resourceId)
+{
+#ifdef QUERY
+ int ret_val; /* value to be returned from function */
+ SaLckLockIdT lockId;
+ struct dlm_lksb lksb;
+ struct dlm_resinfo resinfo;
+ static struct dlm_queryinfo qinfo;
+ struct dlm_lockinfo *p;
+
+ qinfo.gqi_resinfo = &resinfo;
+ qinfo.gqi_lockinfo = malloc(sizeof(struct dlm_lockinfo) * 10);
+ qinfo.gqi_locksize = 10;
+
+
+ if ( NULL == sa_default_ls ) {
+ return SA_ERR_LIBRARY;
+ }
+
+ lockId.resource = (SaLckResourceIdT *)resourceId;
+ lockId.requested_mode = DLM_LOCK_NL;
+
+ ret_val = dlm_ls_lock_wait(sa_default_ls, DLM_LOCK_NL,
+ &(lockId.lksb), DLM_LKF_EXPEDITE,
+ (void *)(resourceId->name.value),
+ resourceId->name.length, 0, &lockId,
+ (void *)SA_LCK_WAITER_CB, NULL);
+
+ dlm_ls_query_wait(sa_default_ls, &(lockId.lksb),
+ DLM_QUERY_QUEUE_ALL|DLM_QUERY_LOCKS_ORPHAN, &qinfo);
+
+ for ( p = qinfo.gqi_lockinfo; 0 != p->lki_lkid; p++ ) {
+ lksb.sb_lkid = p->lki_lkid;
+ ret_val = dlm_ls_unlock_wait(sa_default_ls, p->lki_lkid, 0,
+ &lksb);
+ }
+
+ ret_val = dlm_ls_unlock_wait(sa_default_ls, lockId.lksb.sb_lkid, 0,
+ &(lockId.lksb));
+
+ return lkerr_dlm2ais(ret_val);
+#else
+ return -1;
+#endif
+}
+
diff --git a/contrib/libaislock/libaislock.h b/contrib/libaislock/libaislock.h
new file mode 100644
index 0000000..3faeffd
--- /dev/null
+++ b/contrib/libaislock/libaislock.h
@@ -0,0 +1,190 @@
+typedef char SaInt8T;
+typedef short SaInt16T;
+typedef long SaInt32T;
+typedef long long SaInt64T;
+typedef unsigned char SaUint8T;
+typedef unsigned short SaUint16T;
+typedef unsigned long SaUint32T;
+typedef unsigned long long SaUint64T;
+typedef SaInt64T SaTimeT;
+
+#define SA_MAX_NAME_LENGTH 256
+
+typedef struct {
+ SaUint16T length;
+ unsigned char value[SA_MAX_NAME_LENGTH];
+} SaNameT;
+
+typedef struct {
+ char releaseCode;
+ unsigned char major;
+ unsigned char minor;
+} SaVersionT;
+
+typedef int SaSelectionObjectT;
+
+typedef void *SaInvocationT;
+
+typedef enum {
+ SA_DISPATCH_ONE = 1,
+ SA_DISPATCH_ALL = 2,
+ SA_DISPATCH_BLOCKING = 3
+} SaDispatchFlagsT;
+
+typedef enum {
+ SA_OK = 1,
+ SA_ERR_LIBRARY = 2,
+ SA_ERR_VERSION = 3,
+ SA_ERR_INIT = 4,
+ SA_ERR_TIMEOUT = 5,
+ SA_ERR_TRY_AGAIN = 6,
+ SA_ERR_INVALID_PARAM = 7,
+ SA_ERR_NO_MEMORY = 8,
+ SA_ERR_BAD_HANDLE = 9,
+ SA_ERR_BUSY = 10,
+ SA_ERR_ACCESS = 11,
+ SA_ERR_NOT_EXIST = 12,
+ SA_ERR_NAME_TOO_LONG = 13,
+ SA_ERR_EXIST = 14,
+ SA_ERR_NO_SPACE = 15,
+ SA_ERR_INTERRUPT =16,
+ SA_ERR_SYSTEM = 17,
+ SA_ERR_NAME_NOT_FOUND = 18,
+ SA_ERR_NO_RESOURCES = 19,
+ SA_ERR_NOT_SUPPORTED = 20,
+ SA_ERR_BAD_OPERATION = 21,
+ SA_ERR_FAILED_OPERATION = 22,
+ SA_ERR_MESSAGE_ERROR = 23,
+ SA_ERR_NO_MESSAGE = 24,
+ SA_ERR_QUEUE_FULL = 25,
+ SA_ERR_QUEUE_NOT_AVAILABLE = 26,
+ SA_ERR_BAD_CHECKPOINT = 27,
+ SA_ERR_BAD_FLAGS = 28
+} SaErrorT;
+
+/* Chapter 10 */
+typedef enum {
+ SA_LCK_PR_LOCK_MODE = 1,
+ SA_LCK_EX_LOCK_MODE = 2
+} SaLckLockModeT;
+
+typedef struct{
+ int site;
+ int pid;
+} SaLckLockHolderT;
+
+typedef struct {
+ SaLckLockHolderT orphan_holder;
+ SaNameT name;
+} SaLckResourceIdT;
+
+typedef struct {
+ struct dlm_lksb lksb;
+ SaLckResourceIdT *resource;
+ SaLckLockModeT held_mode;
+ SaLckLockModeT requested_mode;
+ int unlock;
+ SaInvocationT args;
+} SaLckLockIdT;
+
+#define SA_LCK_LOCK_NO_QUEUE 0x1
+#define SA_LCK_LOCK_ORPHAN 0x2
+#define SA_LCK_LOCK_TIMEOUT 0X4
+typedef SaUint32T SaLckLockFlagsT;
+
+typedef enum {
+ SA_LCK_LOCK_GRANTED = 1,
+ SA_LCK_LOCK_RELEASED = 2,
+ SA_LCK_LOCK_DEADLOCK = 3,
+ SA_LCK_LOCK_NOT_QUEUED = 4,
+ SA_LCK_LOCK_TIMED_OUT = 5,
+ SA_LCK_LOCK_ORPHANED = 6,
+ SA_LCK_LOCK_NO_MORE = 7
+} SaLckLockStatusT;
+
+typedef void
+(*SaLckLockGrantCallbackT)(SaInvocationT invocation,
+ const SaLckResourceIdT *resourceId,
+ const SaLckLockIdT *lockId,
+ SaLckLockModeT lockMode,
+ SaLckLockStatusT lockStatus,
+ SaErrorT error);
+
+typedef void
+(*SaLckLockWaiterCallbackT)(SaInvocationT invocation,
+ const SaLckResourceIdT *resourceId,
+ const SaLckLockIdT *lockId,
+ SaLckLockModeT modeHeld,
+ SaLckLockModeT modeRequested);
+
+typedef void
+(*SaLckResourceUnlockCallbackT)(SaInvocationT invocation,
+ const SaLckResourceIdT *resourceId,
+ const SaLckLockIdT *lockId,
+ SaLckLockStatusT lockStatus,
+ SaErrorT error);
+typedef struct SaLckCallbacks {
+ SaLckLockGrantCallbackT saLckLockGrantCallback;
+ SaLckLockWaiterCallbackT saLckLockWaiterCallback;
+ SaLckResourceUnlockCallbackT saLckResourceUnlockCallback;
+}SaLckCallbacksT;
+
+typedef struct {
+ SaLckCallbacksT callback;
+ SaVersionT version;
+} SaLckHandleT;
+
+ SaErrorT
+saLckInitialize(SaLckHandleT *lckHandle, const SaLckCallbacksT *lckCallbacks,
+ const SaVersionT *version);
+
+ SaErrorT
+saLckSelectionObjectGet(const SaLckHandleT *lckHandle,
+ SaSelectionObjectT *selectionObject);
+
+ SaErrorT
+saLckDispatch(const SaLckHandleT *lckHandle,
+ const SaDispatchFlagsT dispatchFlags);
+
+ SaErrorT
+saLckFinalize(SaLckHandleT *lckHandle);
+
+ SaErrorT
+saLckResourceOpen(const SaLckHandleT *lckHandle,
+ const SaNameT *lockName,
+ SaLckResourceIdT *resourceId);
+
+ SaErrorT
+saLckResourceClose(SaLckHandleT *lckHandle, SaLckResourceIdT *resourceId);
+
+ SaErrorT
+saLckResourceLock(const SaLckHandleT *lckHandle, SaInvocationT invocation,
+ const SaLckResourceIdT *resourceId,
+ SaLckLockIdT *lockId,
+ SaLckLockModeT lockMode,
+ SaLckLockFlagsT lockFlags,
+ SaTimeT timeout,
+ SaLckLockStatusT *lockStatus);
+
+ SaErrorT
+SaLckResourceLockAsync(const SaLckHandleT *lckHandle,
+ SaInvocationT invocation,
+ const SaLckResourceIdT *resourceId,
+ SaLckLockIdT *lockId,
+ SaLckLockModeT lockMode,
+ SaLckLockFlagsT lockFlags,
+ SaTimeT timeout);
+
+ SaErrorT
+saLckResourceUnlock(const SaLckHandleT *lckHandle,
+ SaLckLockIdT *lockId,
+ SaTimeT timeout);
+
+ SaErrorT
+saLckResourceUnlockAsync(const SaLckHandleT *lckHandle,
+ SaInvocationT invocation,
+ SaLckLockIdT *lockId);
+
+ SaErrorT
+saLckLockPurge(const SaLckHandleT *lckHandle,
+ const SaLckResourceIdT *resourceId);
diff --git a/dlm/libdlm/Makefile b/dlm/libdlm/Makefile
index dac48ec..3419dfb 100644
--- a/dlm/libdlm/Makefile
+++ b/dlm/libdlm/Makefile
@@ -26,17 +26,18 @@ include $(OBJDIR)/make/clean.mk
include $(OBJDIR)/make/install.mk
include $(OBJDIR)/make/uninstall.mk
-AISTARGET= libaislock
-
+CFLAGS += -fPIC
CFLAGS += -I$(S)
CFLAGS += -I${incdir}
CFLAGS += -I$(KERNEL_SRC)/include
+REENT_CFLAGS += -D_REENTRANT
+
LDFLAGS += -L${libdir}
PTHREAD_LDFLAGS += -lpthread
-$(TARGET).a: $(TARGET).o $(AISTARGET).o
+$(TARGET).a: $(TARGET).o
${AR} cru $@ $^
${RANLIB} $@
@@ -44,30 +45,17 @@ $(TARGET)_lt.a: $(TARGET)_lt.o
${AR} cru $@ $^
${RANLIB} $@
-$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(TARGET).po $(AISTARGET).po
+$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(TARGET).o
$(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $< $(PTHREAD_LDFLAGS) $(LDFLAGS)
ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so
ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so.$(SOMAJOR)
-$(TARGET)_lt.so.${SOMAJOR}.${SOMINOR}: $(TARGET)_lt.po
+$(TARGET)_lt.so.${SOMAJOR}.${SOMINOR}: $(TARGET)_lt.o
$(CC) -shared -o $@ -Wl,-soname=$(TARGET)_lt.so.$(SOMAJOR) $< $(LDFLAGS)
ln -sf $(TARGET)_lt.so.$(SOMAJOR).$(SOMINOR) $(TARGET)_lt.so
ln -sf $(TARGET)_lt.so.$(SOMAJOR).$(SOMINOR) $(TARGET)_lt.so.$(SOMAJOR)
-%_lt.o: $(S)/%.c
- $(CC) $(CFLAGS) -c -o $@ $<
-
-%_lt.po: $(S)/%.c
- $(CC) $(CFLAGS) -fPIC -c -o $@ $<
-
-%.o: $(S)/%.c
- $(CC) $(CFLAGS) -D_REENTRANT -c -o $@ $<
-
-%.po: $(S)/%.c
- $(CC) $(CFLAGS) -fPIC -D_REENTRANT -c -o $@ $<
-
clean: generalclean
-include $(TARGET).d
-include $(TARGET)_lt.d
--include $(AISTARGET).d
diff --git a/dlm/libdlm/libaislock.c b/dlm/libdlm/libaislock.c
deleted file mode 100644
index b829843..0000000
--- a/dlm/libdlm/libaislock.c
+++ /dev/null
@@ -1,468 +0,0 @@
-# ifdef _REENTRANT
-# include <pthread.h>
-# endif
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-
-#include <linux/types.h>
-#include <linux/dlm.h>
-#define BUILDING_LIBDLM
-#include "libdlm.h"
-#include "libaislock.h"
-#include <linux/dlm_device.h>
-
-enum {
- SA_LCK_GRANT_CB = 1,
- SA_LCK_WAITER_CB = 2,
-};
-
-static struct dlm_ls_info *sa_default_ls = NULL;
-
-inline int lkmode_ais2dlm(SaLckLockModeT mode)
-{
- switch(mode)
- {
- case SA_LCK_PR_LOCK_MODE:
- return DLM_LOCK_PR;
- case SA_LCK_EX_LOCK_MODE:
- return DLM_LOCK_EX;
- default:
- return -1;
- }
-}
-
-inline SaLckLockModeT lkmode_dlm2ais(int mode)
-{
- switch(mode)
- {
- case DLM_LOCK_PR:
- return SA_LCK_PR_LOCK_MODE;
- case DLM_LOCK_EX:
- return SA_LCK_EX_LOCK_MODE;
- default:
- return -1;
- }
-}
-
-inline unsigned long lkflag_ais2dlm(SaLckLockFlagsT flag)
-{
- unsigned long dlm_flag = 0;
-
- if(flag & SA_LCK_LOCK_NO_QUEUE)
- dlm_flag |= DLM_LKF_NOQUEUE;
- if(flag & SA_LCK_LOCK_ORPHAN)
- dlm_flag |= DLM_LKF_ORPHAN;
-
- return dlm_flag;
-}
-
-inline SaLckLockStatusT lkstatus_dlm2ais(int status)
-{
- switch(status)
- {
- case -ENOMEM:
- return SA_LCK_LOCK_NO_MORE;
- case 0:
- return SA_LCK_LOCK_GRANTED;
- case -EAGAIN:
- return SA_LCK_LOCK_NOT_QUEUED;
- default:
- return -1;
- }
-}
-
-inline SaErrorT lkerr_dlm2ais(int status)
-{
- switch(status)
- {
- case -EINVAL:
- return SA_ERR_INVALID_PARAM;
- case 0:
- return SA_OK;
- default:
- return -1;
- }
-}
-
-
-SaErrorT
-saLckInitialize(SaLckHandleT *lckHandle, const SaLckCallbacksT *lckCallbacks,
- const SaVersionT *version)
-{
- dlm_lshandle_t ls = NULL;
-
- if (NULL == lckHandle)
- return SA_ERR_INVALID_PARAM;
-
- if (lckCallbacks) {
- lckHandle->callback.saLckLockGrantCallback =
- lckCallbacks->saLckLockGrantCallback;
- lckHandle->callback.saLckLockWaiterCallback =
- lckCallbacks->saLckLockWaiterCallback;
- lckHandle->callback.saLckResourceUnlockCallback =
- lckCallbacks->saLckResourceUnlockCallback;
- } else {
- lckHandle->callback.saLckLockGrantCallback = NULL;
- lckHandle->callback.saLckLockWaiterCallback = NULL;
- lckHandle->callback.saLckResourceUnlockCallback = NULL;
- }
- lckHandle->version.releaseCode = version->releaseCode;
- lckHandle->version.major = version->major;
- lckHandle->version.minor = version->minor;
-
- ls = dlm_create_lockspace("sa_default", 0600);
- if (!ls)
- return SA_ERR_LIBRARY;
-
- sa_default_ls = (struct dlm_ls_info *)ls;
- return SA_OK;
-}
-
-
-SaErrorT
-saLckFinalize(SaLckHandleT *lckHandle)
-{
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- if(!dlm_release_lockspace("sa_default", sa_default_ls, 1)) {
- return SA_OK;
- } else {
- return SA_ERR_LIBRARY;
- }
-}
-
-SaErrorT
-saLckResourceOpen(const SaLckHandleT *lckHandle, const SaNameT *lockName,
- SaLckResourceIdT *resourceId)
-{
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- if (lockName->length <= 31 ) /* OpenDLM only support namelen <= 31*/
- {
- resourceId->name.length = lockName->length;
- strncpy((char *)resourceId->name.value, (char *)lockName->value, lockName->length);
- } else {
- return SA_ERR_NO_MEMORY;
- }
-
- return SA_OK;
-}
-
-
-SaErrorT
-saLckResourceClose(SaLckHandleT *lckHandle, SaLckResourceIdT *resourceId)
-{
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- return SA_OK;
-}
-
-
-SaErrorT
-saLckSelectionObjectGet(const SaLckHandleT *lckHandle,
- SaSelectionObjectT *selectionObject)
-{
- int fd = -1;
-
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- fd = dlm_ls_get_fd(sa_default_ls);
-
- if(!fd)
- return SA_ERR_LIBRARY;
-
- *selectionObject = fd;
-
- return SA_OK;
-}
-
-
-SaErrorT
-saLckDispatch(const SaLckHandleT *lckHandle,
- const SaDispatchFlagsT dispatchFlags)
-{
- int status;
- int fdflags;
- char resultbuf[sizeof(struct dlm_lock_result)];
- struct dlm_lock_result *result = (struct dlm_lock_result *)resultbuf;
- char *fullresult=NULL;
- SaLckLockIdT *lkid;
- SaLckLockModeT lock_mode;
- int fd = -1;
-
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- fd = dlm_ls_get_fd(sa_default_ls);
-
- if(!fd)
- return SA_ERR_LIBRARY;
-
- fdflags = fcntl(fd, F_GETFL, 0);
- fcntl(fd, F_SETFL, fdflags | O_NONBLOCK);
-
- do
- {
-
- /* Just read the header first */
- status = read(fd, result, sizeof(struct dlm_lock_result));
- if (status <= 0)
- break;
-
- if (result->length != status)
- {
- int newstat;
-
- fullresult = malloc(result->length);
- if (!fullresult)
- break;
-
- newstat = read(fd, fullresult, result->length);
-
- /* If it read OK then use the new data. otherwise we can
- still deliver the AST, it just might not have all the
- info in it...hmmm */
- if (newstat == result->length)
- result = (struct dlm_lock_result *)fullresult;
- }
-
- /* Copy lksb to user's buffer - except the LVB ptr */
- memcpy(result->user_lksb, &result->lksb,
- sizeof(struct dlm_lksb) - sizeof(char*));
-
- /* Flip the status. Kernel space likes negative return codes,
- userspace positive ones */
- result->user_lksb->sb_status = -result->user_lksb->sb_status;
-
- /* Need not to care LVB*/
-#ifdef QUERY
- /* Copy optional items */
- if (result->qinfo_offset)
- {
- /* Just need the lockcount written out here */
- struct dlm_queryinfo *qi = (struct dlm_queryinfo *)
- (fullresult+result->qinfo_offset);
- result->user_qinfo->gqi_lockcount = qi->gqi_lockcount;
- }
-
- if (result->qresinfo_offset)
- memcpy(result->user_qinfo->gqi_resinfo,
- fullresult+result->qresinfo_offset,
- sizeof(struct dlm_resinfo));
-
- if (result->qlockinfo_offset)
- memcpy(result->user_qinfo->gqi_lockinfo,
- fullresult+result->qlockinfo_offset,
- sizeof(struct dlm_lockinfo) *
- result->user_qinfo->gqi_lockcount);
-#endif
- /* Call AST */
- lkid = (SaLckLockIdT *)result->user_astparam;
- if (lkid->unlock) {
- /* dispatch unlock ast */
- lkid->unlock = 0;
- lkid->held_mode = 0;
- if(lckHandle->callback.saLckResourceUnlockCallback)
- lckHandle->callback.
- saLckResourceUnlockCallback(
- lkid->args, lkid->resource, lkid,
- SA_LCK_LOCK_RELEASED, SA_OK);
-
- } else if (SA_LCK_GRANT_CB == (int)result->user_astaddr) {
- /* dispatch lock ast */
- if (0 == lkid->lksb.sb_status) {
- lkid->held_mode = lkid->requested_mode;
- lock_mode = lkid->requested_mode;
- } else {
- lock_mode = lkid->held_mode;
- }
-
- if(lckHandle->callback.saLckLockGrantCallback)
- lckHandle->callback.
- saLckLockGrantCallback(
- lkid->args, lkid->resource,
- lkid, lock_mode,
- lkstatus_dlm2ais(
- lkid->lksb.sb_status),
- SA_OK);
- } else if (SA_LCK_WAITER_CB == (int)result->user_astaddr) {
- /* dispatch waiter ast */
- if(lckHandle->callback.saLckLockWaiterCallback)
- lckHandle->callback.
- saLckLockWaiterCallback(
- lkid->args, lkid->resource,
- lkid, lkid->held_mode, result->bast_mode);
- } else {
- return SA_ERR_LIBRARY;
- }
- } while (0 !=status && SA_DISPATCH_ONE != dispatchFlags);
-
- /* EAGAIN is not an error */
- if (status < 0 && errno == EAGAIN)
- status = 0;
-
- fcntl(fd, F_SETFL, fdflags);
- return SA_OK;
-}
-
-SaErrorT
-SaLckResourceLockAsync(const SaLckHandleT *lckHandle, SaInvocationT invocation,
- const SaLckResourceIdT *resourceId, SaLckLockIdT *lockId,
- SaLckLockModeT lockMode, SaLckLockFlagsT lockFlags,
- SaTimeT timeout)
-{
- int ret_val; /* value to be returned from function */
-
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- /*FIXME deal with timeout in lock/lockasync/unlock.
- */
- lockId->resource = (SaLckResourceIdT *)resourceId;
- lockId->requested_mode = lockMode;
- lockId->args = invocation;
-
- ret_val = dlm_ls_lock(sa_default_ls, lkmode_ais2dlm(lockMode),
- &(lockId->lksb), lkflag_ais2dlm(lockFlags),
- (void *)(resourceId->name.value),
- resourceId->name.length, 0, (void *)SA_LCK_GRANT_CB,
- lockId, (void *)SA_LCK_WAITER_CB, NULL);
-
- return lkerr_dlm2ais(ret_val);
-}
-
-SaErrorT
-saLckResourceLock(const SaLckHandleT *lckHandle, SaInvocationT invocation,
- const SaLckResourceIdT *resourceId, SaLckLockIdT *lockId,
- SaLckLockModeT lockMode, SaLckLockFlagsT lockFlags,
- SaTimeT timeout, SaLckLockStatusT *lockStatus)
-
-{
- int ret_val; /* value to be returned from function */
-
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- lockId->resource = (SaLckResourceIdT *)resourceId;
- lockId->requested_mode = lockMode;
- lockId->args = invocation;
-
- ret_val = dlm_ls_lock_wait(sa_default_ls, lkmode_ais2dlm(lockMode),
- &(lockId->lksb), lkflag_ais2dlm(lockFlags),
- (void *)(resourceId->name.value),
- resourceId->name.length, 0, lockId,
- (void *)SA_LCK_WAITER_CB, NULL);
-
- *lockStatus = lkstatus_dlm2ais(lockId->lksb.sb_status);
- lockId->held_mode = lockId->requested_mode;
-
- return lkerr_dlm2ais(ret_val);
-}
-
-SaErrorT
-saLckResourceUnlock(const SaLckHandleT *lckHandle, SaLckLockIdT *lockId,
- SaTimeT timeout)
-{
- int ret_val; /* value to be returned from function */
-
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- ret_val = dlm_ls_unlock_wait(sa_default_ls, lockId->lksb.sb_lkid, 0,
- &(lockId->lksb));
- lockId->held_mode = 0;
-
- return lkerr_dlm2ais(ret_val);
-}
-
-SaErrorT
-saLckResourceUnlockAsync(const SaLckHandleT *lckHandle,
- SaInvocationT invocation, SaLckLockIdT *lockId)
-{
- int ret_val; /* value to be returned from function */
-
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- lockId->unlock = 1;
- lockId->args = invocation;
-
-
- ret_val = dlm_ls_unlock(sa_default_ls, lockId->lksb.sb_lkid, 0, &(lockId->lksb),
- lockId);
-
- return lkerr_dlm2ais(ret_val);
-}
-
-
-SaErrorT
-saLckLockPurge(const SaLckHandleT *lckHandle,
- const SaLckResourceIdT *resourceId)
-{
-#ifdef QUERY
- int ret_val; /* value to be returned from function */
- SaLckLockIdT lockId;
- struct dlm_lksb lksb;
- struct dlm_resinfo resinfo;
- static struct dlm_queryinfo qinfo;
- struct dlm_lockinfo *p;
-
- qinfo.gqi_resinfo = &resinfo;
- qinfo.gqi_lockinfo = malloc(sizeof(struct dlm_lockinfo) * 10);
- qinfo.gqi_locksize = 10;
-
-
- if ( NULL == sa_default_ls ) {
- return SA_ERR_LIBRARY;
- }
-
- lockId.resource = (SaLckResourceIdT *)resourceId;
- lockId.requested_mode = DLM_LOCK_NL;
-
- ret_val = dlm_ls_lock_wait(sa_default_ls, DLM_LOCK_NL,
- &(lockId.lksb), DLM_LKF_EXPEDITE,
- (void *)(resourceId->name.value),
- resourceId->name.length, 0, &lockId,
- (void *)SA_LCK_WAITER_CB, NULL);
-
- dlm_ls_query_wait(sa_default_ls, &(lockId.lksb),
- DLM_QUERY_QUEUE_ALL|DLM_QUERY_LOCKS_ORPHAN, &qinfo);
-
- for ( p = qinfo.gqi_lockinfo; 0 != p->lki_lkid; p++ ) {
- lksb.sb_lkid = p->lki_lkid;
- ret_val = dlm_ls_unlock_wait(sa_default_ls, p->lki_lkid, 0,
- &lksb);
- }
-
- ret_val = dlm_ls_unlock_wait(sa_default_ls, lockId.lksb.sb_lkid, 0,
- &(lockId.lksb));
-
- return lkerr_dlm2ais(ret_val);
-#else
- return -1;
-#endif
-}
-
diff --git a/dlm/libdlm/libaislock.h b/dlm/libdlm/libaislock.h
deleted file mode 100644
index 3faeffd..0000000
--- a/dlm/libdlm/libaislock.h
+++ /dev/null
@@ -1,190 +0,0 @@
-typedef char SaInt8T;
-typedef short SaInt16T;
-typedef long SaInt32T;
-typedef long long SaInt64T;
-typedef unsigned char SaUint8T;
-typedef unsigned short SaUint16T;
-typedef unsigned long SaUint32T;
-typedef unsigned long long SaUint64T;
-typedef SaInt64T SaTimeT;
-
-#define SA_MAX_NAME_LENGTH 256
-
-typedef struct {
- SaUint16T length;
- unsigned char value[SA_MAX_NAME_LENGTH];
-} SaNameT;
-
-typedef struct {
- char releaseCode;
- unsigned char major;
- unsigned char minor;
-} SaVersionT;
-
-typedef int SaSelectionObjectT;
-
-typedef void *SaInvocationT;
-
-typedef enum {
- SA_DISPATCH_ONE = 1,
- SA_DISPATCH_ALL = 2,
- SA_DISPATCH_BLOCKING = 3
-} SaDispatchFlagsT;
-
-typedef enum {
- SA_OK = 1,
- SA_ERR_LIBRARY = 2,
- SA_ERR_VERSION = 3,
- SA_ERR_INIT = 4,
- SA_ERR_TIMEOUT = 5,
- SA_ERR_TRY_AGAIN = 6,
- SA_ERR_INVALID_PARAM = 7,
- SA_ERR_NO_MEMORY = 8,
- SA_ERR_BAD_HANDLE = 9,
- SA_ERR_BUSY = 10,
- SA_ERR_ACCESS = 11,
- SA_ERR_NOT_EXIST = 12,
- SA_ERR_NAME_TOO_LONG = 13,
- SA_ERR_EXIST = 14,
- SA_ERR_NO_SPACE = 15,
- SA_ERR_INTERRUPT =16,
- SA_ERR_SYSTEM = 17,
- SA_ERR_NAME_NOT_FOUND = 18,
- SA_ERR_NO_RESOURCES = 19,
- SA_ERR_NOT_SUPPORTED = 20,
- SA_ERR_BAD_OPERATION = 21,
- SA_ERR_FAILED_OPERATION = 22,
- SA_ERR_MESSAGE_ERROR = 23,
- SA_ERR_NO_MESSAGE = 24,
- SA_ERR_QUEUE_FULL = 25,
- SA_ERR_QUEUE_NOT_AVAILABLE = 26,
- SA_ERR_BAD_CHECKPOINT = 27,
- SA_ERR_BAD_FLAGS = 28
-} SaErrorT;
-
-/* Chapter 10 */
-typedef enum {
- SA_LCK_PR_LOCK_MODE = 1,
- SA_LCK_EX_LOCK_MODE = 2
-} SaLckLockModeT;
-
-typedef struct{
- int site;
- int pid;
-} SaLckLockHolderT;
-
-typedef struct {
- SaLckLockHolderT orphan_holder;
- SaNameT name;
-} SaLckResourceIdT;
-
-typedef struct {
- struct dlm_lksb lksb;
- SaLckResourceIdT *resource;
- SaLckLockModeT held_mode;
- SaLckLockModeT requested_mode;
- int unlock;
- SaInvocationT args;
-} SaLckLockIdT;
-
-#define SA_LCK_LOCK_NO_QUEUE 0x1
-#define SA_LCK_LOCK_ORPHAN 0x2
-#define SA_LCK_LOCK_TIMEOUT 0X4
-typedef SaUint32T SaLckLockFlagsT;
-
-typedef enum {
- SA_LCK_LOCK_GRANTED = 1,
- SA_LCK_LOCK_RELEASED = 2,
- SA_LCK_LOCK_DEADLOCK = 3,
- SA_LCK_LOCK_NOT_QUEUED = 4,
- SA_LCK_LOCK_TIMED_OUT = 5,
- SA_LCK_LOCK_ORPHANED = 6,
- SA_LCK_LOCK_NO_MORE = 7
-} SaLckLockStatusT;
-
-typedef void
-(*SaLckLockGrantCallbackT)(SaInvocationT invocation,
- const SaLckResourceIdT *resourceId,
- const SaLckLockIdT *lockId,
- SaLckLockModeT lockMode,
- SaLckLockStatusT lockStatus,
- SaErrorT error);
-
-typedef void
-(*SaLckLockWaiterCallbackT)(SaInvocationT invocation,
- const SaLckResourceIdT *resourceId,
- const SaLckLockIdT *lockId,
- SaLckLockModeT modeHeld,
- SaLckLockModeT modeRequested);
-
-typedef void
-(*SaLckResourceUnlockCallbackT)(SaInvocationT invocation,
- const SaLckResourceIdT *resourceId,
- const SaLckLockIdT *lockId,
- SaLckLockStatusT lockStatus,
- SaErrorT error);
-typedef struct SaLckCallbacks {
- SaLckLockGrantCallbackT saLckLockGrantCallback;
- SaLckLockWaiterCallbackT saLckLockWaiterCallback;
- SaLckResourceUnlockCallbackT saLckResourceUnlockCallback;
-}SaLckCallbacksT;
-
-typedef struct {
- SaLckCallbacksT callback;
- SaVersionT version;
-} SaLckHandleT;
-
- SaErrorT
-saLckInitialize(SaLckHandleT *lckHandle, const SaLckCallbacksT *lckCallbacks,
- const SaVersionT *version);
-
- SaErrorT
-saLckSelectionObjectGet(const SaLckHandleT *lckHandle,
- SaSelectionObjectT *selectionObject);
-
- SaErrorT
-saLckDispatch(const SaLckHandleT *lckHandle,
- const SaDispatchFlagsT dispatchFlags);
-
- SaErrorT
-saLckFinalize(SaLckHandleT *lckHandle);
-
- SaErrorT
-saLckResourceOpen(const SaLckHandleT *lckHandle,
- const SaNameT *lockName,
- SaLckResourceIdT *resourceId);
-
- SaErrorT
-saLckResourceClose(SaLckHandleT *lckHandle, SaLckResourceIdT *resourceId);
-
- SaErrorT
-saLckResourceLock(const SaLckHandleT *lckHandle, SaInvocationT invocation,
- const SaLckResourceIdT *resourceId,
- SaLckLockIdT *lockId,
- SaLckLockModeT lockMode,
- SaLckLockFlagsT lockFlags,
- SaTimeT timeout,
- SaLckLockStatusT *lockStatus);
-
- SaErrorT
-SaLckResourceLockAsync(const SaLckHandleT *lckHandle,
- SaInvocationT invocation,
- const SaLckResourceIdT *resourceId,
- SaLckLockIdT *lockId,
- SaLckLockModeT lockMode,
- SaLckLockFlagsT lockFlags,
- SaTimeT timeout);
-
- SaErrorT
-saLckResourceUnlock(const SaLckHandleT *lckHandle,
- SaLckLockIdT *lockId,
- SaTimeT timeout);
-
- SaErrorT
-saLckResourceUnlockAsync(const SaLckHandleT *lckHandle,
- SaInvocationT invocation,
- SaLckLockIdT *lockId);
-
- SaErrorT
-saLckLockPurge(const SaLckHandleT *lckHandle,
- const SaLckResourceIdT *resourceId);
diff --git a/fence/agents/xvm/Makefile b/fence/agents/xvm/Makefile
index 9f638ef..23be90b 100644
--- a/fence/agents/xvm/Makefile
+++ b/fence/agents/xvm/Makefile
@@ -37,7 +37,7 @@ CFLAGS += -I${virtincdir} -I${nssincdir} -I${nsprincdir}
CFLAGS += `xml2-config --cflags`
CFLAGS += -I${incdir}
-EXTRA_CFLAGS += -DSTANDALONE
+STANDALONE_CFLAGS += -DSTANDALONE
LDFLAGS += -L${nsslibdir} -lnss3
LDFLAGS += -L${corosynclibdir} -llogsys
diff --git a/make/cobj.mk b/make/cobj.mk
index 57cb960..b484f6b 100644
--- a/make/cobj.mk
+++ b/make/cobj.mk
@@ -1,5 +1,9 @@
%.o: $(S)/%.c
- $(CC) $(CFLAGS) -c -o $@ $<
+ $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(REENT_CFLAGS) -c -o $@ $<
+
+# used by dlm/libdlm
+%_lt.o: $(S)/%.c
+ $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
# used by rgmanager/src/daemons
%-noccs.o: $(S)/%.c
@@ -7,4 +11,4 @@
# used by fence/agents/xvm
%-standalone.o: $(S)/%.c
- $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
+ $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(STANDALONE_CFLAGS) -c -o $@ $<
diff --git a/make/libs.mk b/make/libs.mk
index 406b7f2..cfe01c2 100644
--- a/make/libs.mk
+++ b/make/libs.mk
@@ -28,7 +28,7 @@ ifndef MAKESTATICLIB
all: $(STATICLIB) $(SHAREDLIB)
$(SHAREDLIB): $(OBJS)
- $(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $< $(LDFLAGS)
+ $(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $^ $(LDFLAGS)
ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so
ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so.$(SOMAJOR)
More information about the Cluster-cvs
mailing list