[Ocfs2-tools-commits] jlbec commits r1111 - in trunk: libo2cb
libo2cb/include vendor/common
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Sat Nov 5 16:56:29 CST 2005
Author: jlbec
Date: 2005-11-05 16:56:27 -0600 (Sat, 05 Nov 2005)
New Revision: 1111
Modified:
trunk/libo2cb/include/o2cb_abi.h
trunk/libo2cb/o2cb_abi.c
trunk/vendor/common/o2cb.init
Log:
o Teach o2cb.init to determine /sys/kernel/config vs /config
o Teach libo2cb the same.
Modified: trunk/libo2cb/include/o2cb_abi.h
===================================================================
--- trunk/libo2cb/include/o2cb_abi.h 2005-11-03 04:19:04 UTC (rev 1110)
+++ trunk/libo2cb/include/o2cb_abi.h 2005-11-05 22:56:27 UTC (rev 1111)
@@ -25,9 +25,13 @@
#ifndef _O2CB_ABI_H
#define _O2CB_ABI_H
-#define CONFIGFS_PATH "/config"
+/*
+ * The latest place is /sys/kernel/config, but older O2CB put it
+ * at /config. So, libo2cb has to handle detection
+ */
+#define CONFIGFS_FORMAT_PATH "%s/config"
-#define O2CB_FORMAT_CLUSTER_DIR CONFIGFS_PATH "/cluster"
+#define O2CB_FORMAT_CLUSTER_DIR CONFIGFS_FORMAT_PATH "/cluster"
#define O2CB_FORMAT_CLUSTER O2CB_FORMAT_CLUSTER_DIR "/%s"
#define O2CB_FORMAT_NODE_DIR O2CB_FORMAT_CLUSTER "/node"
#define O2CB_FORMAT_NODE O2CB_FORMAT_NODE_DIR "/%s"
Modified: trunk/libo2cb/o2cb_abi.c
===================================================================
--- trunk/libo2cb/o2cb_abi.c 2005-11-03 04:19:04 UTC (rev 1110)
+++ trunk/libo2cb/o2cb_abi.c 2005-11-05 22:56:27 UTC (rev 1111)
@@ -30,6 +30,7 @@
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/statfs.h>
#include <sys/ioctl.h>
#include <sys/ipc.h>
#include <sys/sem.h>
@@ -42,13 +43,12 @@
#include <linux/types.h>
#include "o2cb.h"
-
#include "o2cb_abi.h"
-
#include "o2cb_crc32.h"
-
#include "ocfs2_nodemanager.h"
+static char *configfs_path;
+
errcode_t o2cb_create_cluster(const char *cluster_name)
{
char path[PATH_MAX];
@@ -56,7 +56,7 @@
errcode_t err = 0;
ret = snprintf(path, PATH_MAX - 1, O2CB_FORMAT_CLUSTER,
- cluster_name);
+ configfs_path, cluster_name);
if ((ret <= 0) || (ret == (PATH_MAX - 1)))
return O2CB_ET_INTERNAL_FAILURE;
@@ -99,7 +99,7 @@
errcode_t err = 0;
ret = snprintf(path, PATH_MAX - 1, O2CB_FORMAT_CLUSTER,
- cluster_name);
+ configfs_path, cluster_name);
if ((ret <= 0) || (ret == (PATH_MAX - 1)))
return O2CB_ET_INTERNAL_FAILURE;
@@ -265,7 +265,8 @@
char attr_path[PATH_MAX];
ret = snprintf(attr_path, PATH_MAX - 1, O2CB_FORMAT_NODE_ATTR,
- cluster_name, node_name, attr_name);
+ configfs_path, cluster_name, node_name,
+ attr_name);
if ((ret <= 0) || (ret == (PATH_MAX - 1)))
return O2CB_ET_INTERNAL_FAILURE;
@@ -282,7 +283,8 @@
char attr_path[PATH_MAX];
ret = snprintf(attr_path, PATH_MAX - 1, O2CB_FORMAT_NODE_ATTR,
- cluster_name, node_name, attr_name);
+ configfs_path, cluster_name, node_name,
+ attr_name);
if ((ret <= 0) || (ret == (PATH_MAX - 1)))
return O2CB_ET_INTERNAL_FAILURE;
@@ -303,7 +305,7 @@
ret = snprintf(node_path, PATH_MAX - 1,
O2CB_FORMAT_NODE,
- cluster_name, node_name);
+ configfs_path, cluster_name, node_name);
if (ret <= 0 || ret == PATH_MAX - 1) {
err = O2CB_ET_INTERNAL_FAILURE;
goto out;
@@ -372,7 +374,7 @@
errcode_t err = 0;
ret = snprintf(node_path, PATH_MAX - 1, O2CB_FORMAT_NODE,
- cluster_name, node_name);
+ configfs_path, cluster_name, node_name);
if (ret <= 0 || ret == PATH_MAX - 1) {
err = O2CB_ET_INTERNAL_FAILURE;
goto out;
@@ -442,6 +444,46 @@
return err;
}
+#define O2CB_NEW_CONFIGFS_PATH "/sys/kernel"
+#define O2CB_OLD_CONFIGFS_PATH ""
+#define CONFIGFS_MAGIC 0x62656570
+static errcode_t try_configfs_path(const char *path)
+{
+ errcode_t ret;
+ char attr_path[PATH_MAX];
+ struct stat64 stat_buf;
+ struct statfs64 statfs_buf;
+
+ ret = snprintf(attr_path, PATH_MAX - 1, CONFIGFS_FORMAT_PATH,
+ path);
+ if ((ret <= 0) || (ret == (PATH_MAX - 1)))
+ return O2CB_ET_INTERNAL_FAILURE;
+
+ ret = stat64(attr_path, &stat_buf);
+ if (ret || !S_ISDIR(stat_buf.st_mode))
+ return O2CB_ET_SERVICE_UNAVAILABLE;
+ ret = statfs64(attr_path, &statfs_buf);
+ if (ret || (statfs_buf.f_type != CONFIGFS_MAGIC))
+ return O2CB_ET_SERVICE_UNAVAILABLE;
+
+ return 0;
+}
+
+static errcode_t init_configfs(void)
+{
+ configfs_path = O2CB_NEW_CONFIGFS_PATH;
+ if (!try_configfs_path(configfs_path))
+ return 0;
+
+ configfs_path = O2CB_OLD_CONFIGFS_PATH;
+ if (!try_configfs_path(configfs_path))
+ return 0;
+
+ configfs_path = NULL;
+
+ return O2CB_ET_SERVICE_UNAVAILABLE;
+}
+
#define O2CB_INTERFACE_REVISION_PATH_OLD "/proc/fs/ocfs2_nodemanager/interface_revision"
#define O2CB_INTERFACE_REVISION_PATH "/sys/o2cb/interface_revision"
errcode_t o2cb_init(void)
@@ -476,7 +518,7 @@
if (O2NM_API_VERSION < module_version)
return O2CB_ET_BAD_VERSION;
- return 0;
+ return init_configfs();
}
/* o2cb_get_region_attribute() would just be s/set/get/ of this function */
@@ -490,7 +532,8 @@
ret = snprintf(attr_path, PATH_MAX - 1,
O2CB_FORMAT_HEARTBEAT_REGION_ATTR,
- cluster_name, region_name, attr_name);
+ configfs_path, cluster_name, region_name,
+ attr_name);
if ((ret <= 0) || (ret == (PATH_MAX - 1)))
return O2CB_ET_INTERNAL_FAILURE;
@@ -547,7 +590,7 @@
ret = snprintf(region_path, PATH_MAX - 1,
O2CB_FORMAT_HEARTBEAT_REGION,
- cluster_name, region_name);
+ configfs_path, cluster_name, region_name);
if (ret <= 0 || ret == PATH_MAX - 1) {
err = O2CB_ET_INTERNAL_FAILURE;
goto out;
@@ -909,7 +952,7 @@
ret = snprintf(region_path, PATH_MAX - 1,
O2CB_FORMAT_HEARTBEAT_REGION,
- cluster_name, region_name);
+ configfs_path, cluster_name, region_name);
if (ret <= 0 || ret == PATH_MAX - 1) {
err = O2CB_ET_INTERNAL_FAILURE;
goto out;
@@ -1188,7 +1231,7 @@
errcode_t ret;
ret = snprintf(path, PATH_MAX - 1, O2CB_FORMAT_NODE_DIR,
- cluster_name);
+ configfs_path, cluster_name);
if ((ret <= 0) || (ret == (PATH_MAX - 1)))
return O2CB_ET_INTERNAL_FAILURE;
Modified: trunk/vendor/common/o2cb.init
===================================================================
--- trunk/vendor/common/o2cb.init 2005-11-03 04:19:04 UTC (rev 1110)
+++ trunk/vendor/common/o2cb.init 2005-11-05 22:56:27 UTC (rev 1111)
@@ -35,9 +35,20 @@
# Source configuration,
[ -f "${CONFIGURATION}" ] && . "${CONFIGURATION}"
+configfs_path()
+{
+ # Note that this is only valid *after* configfs is loaded
+ if [ -d /sys/kernel/config ]
+ then
+ echo /sys/kernel/config
+ else
+ echo /config
+ fi
+}
+
# XXX some description of what this does
LOAD_ACTIONS=("load_module configfs"
- "mount_fs configfs /config"
+ "mount_fs configfs "'`configfs_path`'
"load_module ocfs2_nodemanager"
"load_module ocfs2_dlm"
"load_module ocfs2_dlmfs"
More information about the Ocfs2-tools-commits
mailing list