[Ocfs2-tools-devel] [PATCH 6/6] libocfs2: Detect stackglue and use it for all libo2dlm interaction.

Joel Becker joel.becker at oracle.com
Wed Feb 10 01:34:26 PST 2010


Now all ocfs2 tools will use libo2dlm+dlmfs for any stack that supports
it.

Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
 libocfs2/dlm.c |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/libocfs2/dlm.c b/libocfs2/dlm.c
index 3a5015c..4c8cda8 100644
--- a/libocfs2/dlm.c
+++ b/libocfs2/dlm.c
@@ -172,6 +172,7 @@ errcode_t ocfs2_initialize_dlm(ocfs2_filesys *fs, const char *service)
 {
 	struct o2dlm_ctxt *dlm_ctxt = NULL;
 	errcode_t ret = 0;
+	int stackglue_support;
 	struct o2cb_cluster_desc cluster;
 	struct o2cb_region_desc desc;
 	char *stack_path;
@@ -184,6 +185,10 @@ errcode_t ocfs2_initialize_dlm(ocfs2_filesys *fs, const char *service)
 	if (ret)
 		goto bail;
 
+	ret = o2dlm_supports_stackglue(&stackglue_support);
+	if (ret)
+		goto bail;
+
 	desc.r_service = (char *)service;
 	desc.r_persist = 0;
 	ret = o2cb_begin_group_join(&cluster, &desc);
@@ -191,13 +196,18 @@ errcode_t ocfs2_initialize_dlm(ocfs2_filesys *fs, const char *service)
 		goto bail;
 
 	/*
-	 * NULL c_stack means o2cb, means use DLMFS, means
-	 * pass DLMFS_PATH.  If we're using a userspace stack, pass NULL.
+	 * We want to use dlmfs if we can, as it provides the full feature
+	 * set of libo2dlm.  Any dlmfs with the 'stackglue' capability will
+	 * support all cluster stacks.  An empty cluster.c_stack means
+	 * o2cb, which always supports dlmfs.
+	 *
+	 * If we're unlucky enough to have older userspace stack code,
+	 * we pass NULL to avoid dlmfs.
 	 */
-	if (cluster.c_stack)
-		stack_path = NULL;
-	else
+	if (stackglue_support || !cluster.c_stack)
 		stack_path = DEFAULT_DLMFS_PATH;
+	else
+		stack_path = NULL;
 	ret = o2dlm_initialize(stack_path, fs->uuid_str, &dlm_ctxt);
 	if (ret) {
 		/* What to do with an error code? */
-- 
1.6.6.1




More information about the Ocfs2-tools-devel mailing list