[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