[Ocfs2-commits] zab commits r1990 - branches/usysfsify/fs/ocfs2/cluster

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Wed Mar 16 20:16:19 CST 2005


Author: zab
Date: 2005-03-16 20:16:17 -0600 (Wed, 16 Mar 2005)
New Revision: 1990

Modified:
   branches/usysfsify/fs/ocfs2/cluster/nodemanager.c
Log:
o getting a cluster from a node requires going through the node_set kobj
o sscanf() is a relic
o don't accidentally step on our node when checking for an existing ip
o don't double write_lock
o the node set is called "nodes"


Modified: branches/usysfsify/fs/ocfs2/cluster/nodemanager.c
===================================================================
--- branches/usysfsify/fs/ocfs2/cluster/nodemanager.c	2005-03-17 01:06:23 UTC (rev 1989)
+++ branches/usysfsify/fs/ocfs2/cluster/nodemanager.c	2005-03-17 02:16:17 UTC (rev 1990)
@@ -205,10 +205,16 @@
 	return sprintf(page, "%d\n", node->nd_num);
 }
 
+struct nm_cluster *to_nm_cluster_from_node(struct nm_node *node)
+{
+	/* through the first node_set .parent */
+	return to_nm_cluster(node->nd_kobj.parent->parent);
+}
+
 static ssize_t nm_node_num_write(struct nm_node *node, const char *page,
 				 size_t count)
 {
-	struct nm_cluster *cluster = to_nm_cluster(node->nd_kobj.parent);
+	struct nm_cluster *cluster = to_nm_cluster_from_node(node);
 	unsigned long tmp;
 	char *p = (char *)page;
 
@@ -268,33 +274,36 @@
 					  const char *page,
 					  size_t count)
 {
-	struct nm_cluster *cluster = to_nm_cluster(node->nd_kobj.parent);
-	int ret;
-	union {
-		u32 ipv4_addr; /* network order */
-		unsigned char bytes[4];
-	} u;
+	struct nm_cluster *cluster = to_nm_cluster_from_node(node);
+	int ret, i;
 	struct rb_node **p, *parent;
+	unsigned int octets[4];
+	u32 ipv4_addr = 0; /* network order */
 
-	ret = sscanf(page, "%c.%c.%c.%c", &u.bytes[0], &u.bytes[1], &u.bytes[2],
-		     &u.bytes[3]);
+	ret = sscanf(page, "%3u.%3u.%3u.%3u", &octets[0], &octets[1],
+		     &octets[2], &octets[3]);
 	if (ret != 4)
 		return -EINVAL;
 
+	for (i = 0; i < ARRAY_SIZE(octets); i++) {
+		if (octets[i] > 255)
+			return -ERANGE;
+		ipv4_addr |= octets[i] << (i * 8);
+	}
+
 	ret = 0;
 	write_lock(&cluster->cl_nodes_lock);
-	node = nm_node_ip_tree_lookup(cluster, u.ipv4_addr, &p, &parent);
-	if (node)
+	if (nm_node_ip_tree_lookup(cluster, ipv4_addr, &p, &parent))
 		ret = -EEXIST;
 	else {
 	        rb_link_node(&node->nd_ip_node, parent, p);
 		rb_insert_color(&node->nd_ip_node, &cluster->cl_node_ip_tree);
 	}
-	write_lock(&cluster->cl_nodes_lock);
+	write_unlock(&cluster->cl_nodes_lock);
 	if (ret)
 		return ret;
 
-	memcpy(&node->nd_ipv4_address, &u.ipv4_addr, sizeof(u.ipv4_addr));
+	memcpy(&node->nd_ipv4_address, &ipv4_addr, sizeof(ipv4_addr));
 
 	return count;
 }
@@ -307,7 +316,7 @@
 					  const char *page,
 					  size_t count)
 {
-	struct nm_cluster *cluster = to_nm_cluster(node->nd_kobj.parent);
+	struct nm_cluster *cluster = to_nm_cluster_from_node(node);
 	unsigned long tmp;
 	char *p = (char *)page;
 	ssize_t ret;
@@ -582,7 +591,7 @@
 		goto out;
 
 	ukset_init_type_name(&cluster->cl_ukset, name, &nm_cluster_type.ktype);
-	ukset_init_type_name(&ns->ns_ukset, "node", &nm_node_set_type.ktype);
+	ukset_init_type_name(&ns->ns_ukset, "nodes", &nm_node_set_type.ktype);
 
 	cluster->cl_ukset.default_sets = defs;
 	cluster->cl_ukset.default_sets[0] = &ns->ns_ukset.kset;
@@ -646,7 +655,6 @@
 static int __init init_nm(void)
 {
 	int ret;
-	unsigned i;
 
 	hb_init();
 	ret = net_register_hb_callbacks();



More information about the Ocfs2-commits mailing list