[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