[Ocfs2-tools-commits] jlbec commits r664 - in branches/usysfsify: libo2cb libo2cb/include mount.ocfs2

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Thu Mar 17 21:57:57 CST 2005


Author: jlbec
Date: 2005-03-17 21:57:55 -0600 (Thu, 17 Mar 2005)
New Revision: 664

Modified:
   branches/usysfsify/libo2cb/include/o2cb.h
   branches/usysfsify/libo2cb/o2cb_abi.c
   branches/usysfsify/mount.ocfs2/mount.ocfs2.c
Log:
booyah

Modified: branches/usysfsify/libo2cb/include/o2cb.h
===================================================================
--- branches/usysfsify/libo2cb/include/o2cb.h	2005-03-18 03:43:47 UTC (rev 663)
+++ branches/usysfsify/libo2cb/include/o2cb.h	2005-03-18 03:57:55 UTC (rev 664)
@@ -53,6 +53,9 @@
 			const char *ip_address, const char *ip_port,
 			const char *local);
 
+errcode_t o2cb_list_clusters(char ***clusters);
+void o2cb_free_cluster_list(char **clusters);
+
 errcode_t o2cb_create_heartbeat_region_disk(const char *cluster_name,
 					    const char *region_name,
 					    const char *device_name,

Modified: branches/usysfsify/libo2cb/o2cb_abi.c
===================================================================
--- branches/usysfsify/libo2cb/o2cb_abi.c	2005-03-18 03:43:47 UTC (rev 663)
+++ branches/usysfsify/libo2cb/o2cb_abi.c	2005-03-18 03:57:55 UTC (rev 664)
@@ -31,6 +31,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
+#include <dirent.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <errno.h>
@@ -394,6 +395,22 @@
 	return err;
 }
 
+static errcode_t _fake_default_cluster(char *cluster)
+{
+	errcode_t ret;
+	char **clusters;
+
+	ret = o2cb_list_clusters(&clusters);
+	if (ret)
+		return ret;
+
+	snprintf(cluster, NAME_MAX - 1, "%s", clusters[0]);
+
+	o2cb_free_cluster_list(clusters);
+
+	return 0;
+}
+
 errcode_t o2cb_create_heartbeat_region_disk(const char *cluster_name,
 					    const char *region_name,
 					    const char *device_name,
@@ -401,11 +418,19 @@
 					    uint64_t start_block,
 					    uint64_t blocks)
 {
+	char _fake_cluster_name[NAME_MAX];
 	char region_path[PATH_MAX];
 	char num_buf[NAME_MAX];
 	int ret, fd;
 	errcode_t err;
 
+	if (!cluster_name) {
+		ret = _fake_default_cluster(_fake_cluster_name);
+		if (ret)
+			return ret;
+		cluster_name = _fake_cluster_name;
+	}
+
 #define O2CB_MAXIMUM_HEARTBEAT_BLOCKSIZE 4096
 	if (block_bytes > O2CB_MAXIMUM_HEARTBEAT_BLOCKSIZE) {
 		err = O2CB_ET_INVALID_BLOCK_SIZE;
@@ -533,3 +558,95 @@
 	return err;
 }
 
+errcode_t o2cb_list_clusters(char ***clusters)
+{
+	errcode_t ret;
+	int count;
+	DIR *dir;
+	struct dirent *dirent;
+	struct clist {
+		struct clist *next;
+		char *cluster;
+	} *tmp, *list;
+
+	dir = opendir(O2CB_FORMAT_CLUSTER_DIR);
+	if (!dir) {
+		switch (errno) {
+			default:
+				ret = O2CB_ET_INTERNAL_FAILURE;
+				break;
+
+			case ENOTDIR:
+			case ENOENT:
+				ret = O2CB_ET_SERVICE_UNAVAILABLE;
+				break;
+
+			case ENOMEM:
+				ret = O2CB_ET_NO_MEMORY;
+				break;
+
+			case EACCES:
+				ret = O2CB_ET_PERMISSION_DENIED;
+				break;
+		}
+
+		goto out;
+	}
+
+	ret = O2CB_ET_NO_MEMORY;
+	count = 0;
+	list = NULL;
+	while ((dirent = readdir(dir)) != NULL) {
+		tmp = malloc(sizeof(struct clist));
+		if (!tmp)
+			goto out_free_list;
+
+		tmp->cluster = strdup(dirent->d_name);
+		if (!tmp->cluster) {
+			free(tmp);
+			goto out_free_list;
+		}
+
+		tmp->next = list;
+		list = tmp;
+		count++;
+	}
+
+	*clusters = malloc(sizeof(char *) * (count + 1));
+	if (!*clusters)
+		goto out_free_list;
+
+	tmp = list;
+	count = 0;
+	while (tmp) {
+		(*clusters)[count] = tmp->cluster;
+		tmp->cluster = NULL;
+		tmp = tmp->next;
+	}
+
+	ret = 0;
+
+out_free_list:
+	while (list) {
+		tmp = list;
+		list = list->next;
+
+		if (tmp->cluster)
+			free(tmp->cluster);
+		free(tmp);
+	}
+
+out:
+	return ret;
+}
+
+void o2cb_free_cluster_list(char **clusters)
+{
+	int i;
+
+	for (i = 0; clusters[i]; i++) {
+		free(clusters[i]);
+	}
+
+	free(clusters);
+}

Modified: branches/usysfsify/mount.ocfs2/mount.ocfs2.c
===================================================================
--- branches/usysfsify/mount.ocfs2/mount.ocfs2.c	2005-03-18 03:43:47 UTC (rev 663)
+++ branches/usysfsify/mount.ocfs2/mount.ocfs2.c	2005-03-18 03:57:55 UTC (rev 664)
@@ -699,7 +699,8 @@
 	if (num_blocks > 254)
 		num_blocks = 254;
 
-	err = o2cb_create_heartbeat_region_disk(cluster,
+        /* XXX: NULL cluster is a hack for right now */
+	err = o2cb_create_heartbeat_region_disk(NULL,
 						hbuuid,
 						device,
 						1 << block_bits,



More information about the Ocfs2-tools-commits mailing list