[Ocfs2-commits] jlbec commits r1743 - branches/kabi/cluster

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Wed Jan 5 19:47:16 CST 2005


Author: jlbec
Date: 2005-01-05 19:47:13 -0600 (Wed, 05 Jan 2005)
New Revision: 1743

Modified:
   branches/kabi/cluster/nodemanager.c
   branches/kabi/cluster/nodemanager.h
   branches/kabi/cluster/o2cb_kabi.h
Log:

o Name cluster through a nicer ABI.



Modified: branches/kabi/cluster/nodemanager.c
===================================================================
--- branches/kabi/cluster/nodemanager.c	2005-01-05 22:36:55 UTC (rev 1742)
+++ branches/kabi/cluster/nodemanager.c	2005-01-06 01:47:13 UTC (rev 1743)
@@ -153,7 +153,6 @@
 static int nm_create_cluster(void);
 static void nm_init_cluster(nm_cluster *cluster);
 int nm_create_node(char *buf, nm_op *data);
-int nm_name_cluster(char *buf, nm_op *data);
 int nm_destroy_cluster(char *buf);
 int nm_get_cluster_num_nodes(char *buf);
 int nm_get_cluster_num_groups(char *buf);
@@ -178,6 +177,7 @@
 static ssize_t write_group(struct file *file, char *buf, size_t size);
 static ssize_t write_cluster(struct file *file, char *buf, size_t size);
 static ssize_t write_live(struct file *file, char *buf, size_t size);
+static ssize_t write_name(struct file *file, char *buf, size_t size);
 
 static struct inode * __nm_get_group_by_num(u16 group_num);
 static struct inode * __nm_get_node_by_num(u16 node_num);
@@ -669,36 +669,16 @@
 }
 
 
-
-int nm_name_cluster(char *buf, nm_op *data)
+int nm_destroy_cluster()
 {
-	int ret = -EINVAL;
-
-	nmprintk("name cluster...\n");
-	spin_lock(&nm_lock);
-	if (cluster.state == NM_CLUSTER_UP) {
-		ret = sprintf(buf, "%d: cluster name could not be set.  cluster already up.", -EINVAL);
-		goto leave;
-	}
-	memset(cluster.name, 0, NM_MAX_NAME_LEN+1);
-	memcpy(cluster.name, data->arg_u.name, NM_MAX_NAME_LEN);
-	ret = sprintf(buf, "0: cluster name set: %s", cluster.name);
-leave:
-	spin_unlock(&nm_lock);
-	return ret;
-}
-
-int nm_destroy_cluster(char *buf)
-{
 	int ret;
 	nmprintk("destroy cluster...\n");
 
 	/* TODO */
 	spin_lock(&nm_lock);
 	nm_init_cluster(&cluster);
-	ret = sprintf(buf, "0: rudely destroyed cluster!!!");
 	spin_unlock(&nm_lock);
-	return ret;
+	return 0;
 }
 
 int nm_get_cluster_num_nodes(char *buf)
@@ -886,9 +866,6 @@
 		case NM_OP_CREATE_GROUP:
 			ret = nm_create_group(buf, data);
 			break;
-		case NM_OP_NAME_CLUSTER:
-			ret = nm_name_cluster(buf, data);
-			break;
 		case NM_OP_DESTROY_CLUSTER:
 			ret = nm_destroy_cluster(buf);
 			break;
@@ -1003,7 +980,54 @@
 	return size;
 }
 
+static ssize_t write_name(struct file *file, char *buf, size_t size)
+{
+	int ret;
+	struct o2cb_kabi_cluster_name *cn =
+		(struct o2cb_kabi_cluster_name *)buf;
 
+	ret = o2cb_kabi_verify(cn, cn_abi, size);
+	if (ret)
+		return ret;
+	if (cn->cn_abi.ki_status)
+		return size;
+
+	spin_lock(&nm_lock);
+	switch (cn->cn_abi.ki_op)
+	{
+		case O2CB_OP_CLUSTER_SET_NAME:
+			if (cluster.state == NM_CLUSTER_UP) {
+				ret = O2CB_KE_CLUSTER_ALREADY_LIVE;
+			} else if ((cn->cn_len > (O2CB_NAME_MAX - 1)) ||
+		       		   (cn->cn_len < 1)) {
+					ret = O2CB_KE_INVALID_NAME;
+			} else {
+				memcpy(cluster.name, cn->cn_name,
+				       cn->cn_len);
+				cluster.name[cn->cn_len] = '\0';
+			}
+			break;
+
+		case O2CB_OP_CLUSTER_GET_NAME:
+			cn->cn_len = strlen(cluster.name);
+			if (cn->cn_len > (O2CB_NAME_MAX - 1))
+				BUG();
+
+			strncpy(cn->cn_name, cluster.name,
+				cn->cn_len + 1);
+			break;
+
+		default:
+			ret = O2CB_KE_INVALID_OPERATION;
+			break;
+	}
+	spin_unlock(&nm_lock);
+
+	cn->cn_abi.ki_status = ret;
+	return size;
+}
+
+
 static struct inode * __nm_get_group_by_num(u16 group_num)
 {
 	struct inode *inode = iget(single_sb, group_num + NM_GROUP_INODE_START);
@@ -1308,7 +1332,8 @@
 		[NM_Node] = {".node", &transaction_ops, S_IWUSR},
 		[NM_Group] = {".group", &transaction_ops, S_IWUSR},
 		[NM_Live] = {".live", &transaction_ops, S_IWUSR},
-		/* last one */ {""}
+		[NM_Name] = {".name", &transaction_ops, S_IWUSR},
+		{""} /* last one */ 
 	};
 	
 	sz = sizeof(nm_files) / sizeof(struct tree_descr);
@@ -1322,6 +1347,7 @@
 	ops->write_op[NM_Node] = write_node;
 	ops->write_op[NM_Group] = write_group;
 	ops->write_op[NM_Live] = write_live;
+	ops->write_op[NM_Name] = write_name;
 
 	single_sb = NULL;
 	nmprintk("calling simple_fill_super...\n");

Modified: branches/kabi/cluster/nodemanager.h
===================================================================
--- branches/kabi/cluster/nodemanager.h	2005-01-05 22:36:55 UTC (rev 1742)
+++ branches/kabi/cluster/nodemanager.h	2005-01-06 01:47:13 UTC (rev 1743)
@@ -53,6 +53,7 @@
 	NM_Node,
 	NM_Group,
 	NM_Live,
+	NM_Name,
 };
 
 typedef struct _nm_cluster

Modified: branches/kabi/cluster/o2cb_kabi.h
===================================================================
--- branches/kabi/cluster/o2cb_kabi.h	2005-01-05 22:36:55 UTC (rev 1742)
+++ branches/kabi/cluster/o2cb_kabi.h	2005-01-06 01:47:13 UTC (rev 1743)
@@ -31,11 +31,16 @@
 #define O2CB_KABI_VERSION	O2CB_KABI_V1
 #define O2CB_KABI_MAGIC		0x02CBCA75
 
+/* Common UTS name length */
+#define O2CB_NAME_MAX		65	/* Includes '\0' */
+
 enum o2cb_kabi_operations
 {
 	O2CB_OP_NONE = 0,
 	O2CB_OP_CLUSTER_SET_LIVE,
 	O2CB_OP_CLUSTER_IS_LIVE,
+	O2CB_OP_CLUSTER_SET_NAME,
+	O2CB_OP_CLUSTER_GET_NAME,
 };
 
 enum o2cb_kabi_errors
@@ -47,6 +52,7 @@
 	O2CB_KE_INVALID_OPERATION,
 	O2CB_KE_CLUSTER_ALREADY_LIVE,
 	O2CB_KE_NOT_SUPPORTED,
+	O2CB_KE_INVALID_NAME,
 };
 
 struct o2cb_kabi_info {
@@ -64,6 +70,13 @@
 /*14*/
 };
 
+struct o2cb_kabi_cluster_name {
+/*00*/	struct o2cb_kabi_info	cn_abi;
+/*10*/	__u32			cn_len;
+	__u8			cn_name[O2CB_NAME_MAX];
+/*55*/
+};
+
 /**
  * o2cb_kabi_verify(k, member, size)
  * @k:		An O2CB KABI object embedding a struct o2cb_kabi_info.



More information about the Ocfs2-commits mailing list