[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