[Ocfs2-commits] zab commits r2044 - trunk/fs/ocfs2/cluster

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Wed Mar 23 22:17:33 CST 2005


Author: zab
Signed-off-by: mfasheh
Date: 2005-03-23 22:17:32 -0600 (Wed, 23 Mar 2005)
New Revision: 2044

Modified:
   trunk/fs/ocfs2/cluster/heartbeat.c
   trunk/fs/ocfs2/cluster/nodemanager.c
   trunk/fs/ocfs2/cluster/nodemanager.h
Log:
o only watch the hb blocks for nodes that we have configured.  This reduces the amount of
  hb IO for 1.0 and we weren't doing anything with hb activity for unknown blocks anyway.

Signed-off-by: mfasheh


Modified: trunk/fs/ocfs2/cluster/heartbeat.c
===================================================================
--- trunk/fs/ocfs2/cluster/heartbeat.c	2005-03-24 02:06:26 UTC (rev 2043)
+++ trunk/fs/ocfs2/cluster/heartbeat.c	2005-03-24 04:17:32 UTC (rev 2044)
@@ -250,9 +250,14 @@
 	LIST_HEAD(deceased);
 	u64 cputime;
 	int i, rw;
+	unsigned long configured_nodes[BITS_TO_LONGS(NM_MAX_NODES)];
 
+	if (nm_configured_node_map(configured_nodes, sizeof(configured_nodes)))
+		return;
+
 	/* first we clear uptodate on other nodes slots and write our slot */
-	for(i = 0; i < reg->hr_blocks; i++) {
+	i = -1;
+	while((i = find_next_bit(configured_nodes, NM_MAX_NODES, i + 1)) < NM_MAX_NODES) {
 		slot = &reg->hr_slots[i];
 
 		bh = hb_get_locked_mapped(reg, slot);
@@ -285,7 +290,8 @@
 	}
 
 	/* now we read again and see what other nodes have done */
-	for(i = 0; i < reg->hr_blocks; i++) {
+	i = -1;
+	while((i = find_next_bit(configured_nodes, NM_MAX_NODES, i + 1)) < NM_MAX_NODES) {
 		slot = &reg->hr_slots[i];
 
 		bh = slot->ds_bh;

Modified: trunk/fs/ocfs2/cluster/nodemanager.c
===================================================================
--- trunk/fs/ocfs2/cluster/nodemanager.c	2005-03-24 02:06:26 UTC (rev 2043)
+++ trunk/fs/ocfs2/cluster/nodemanager.c	2005-03-24 04:17:32 UTC (rev 2044)
@@ -89,6 +89,8 @@
 	rwlock_t	cl_nodes_lock;
 	struct nm_node  *cl_nodes[NM_MAX_NODES];
 	struct rb_root	cl_node_ip_tree;
+	/* this bitmap is part of a hack for disk bitmap.. will go eventually. - zab */
+	unsigned long	cl_nodes_bitmap[BITS_TO_LONGS(NM_MAX_NODES)];
 };
 
 struct nm_node * nm_get_node_by_num(u8 node_num)
@@ -108,6 +110,23 @@
 }
 EXPORT_SYMBOL(nm_get_node_by_num);
 
+int nm_configured_node_map(unsigned long *map, unsigned bytes)
+{
+	struct nm_cluster *cluster = nm_single_cluster;
+
+	BUG_ON(bytes < (sizeof(cluster->cl_nodes_bitmap)));
+
+	if (cluster == NULL)
+		return -EINVAL;
+
+	read_lock(&cluster->cl_nodes_lock);
+	memcpy(map, cluster->cl_nodes_bitmap, sizeof(cluster->cl_nodes_bitmap));
+	read_unlock(&cluster->cl_nodes_lock);
+
+	return 0;
+}
+EXPORT_SYMBOL(nm_configured_node_map);
+
 static struct nm_node * nm_node_ip_tree_lookup(struct nm_cluster *cluster,
 					      u32 ip_needle,
 					      struct rb_node ***ret_p,
@@ -228,6 +247,7 @@
 	else  {
 		cluster->cl_nodes[tmp] = node;
 		node->nd_num = tmp;
+		set_bit(tmp, cluster->cl_nodes_bitmap);
 	}
 	write_unlock(&cluster->cl_nodes_lock);
 	if (p == NULL)
@@ -517,6 +537,7 @@
 		else  {
 			cluster->cl_nodes[node->nd_num] = NULL;
 			node->nd_num = NM_MAX_NODES;
+			clear_bit(node->nd_num, cluster->cl_nodes_bitmap);
 		}
 	}
 	write_unlock(&cluster->cl_nodes_lock);

Modified: trunk/fs/ocfs2/cluster/nodemanager.h
===================================================================
--- trunk/fs/ocfs2/cluster/nodemanager.h	2005-03-24 02:06:26 UTC (rev 2043)
+++ trunk/fs/ocfs2/cluster/nodemanager.h	2005-03-24 04:17:32 UTC (rev 2044)
@@ -89,6 +89,7 @@
 
 u8 nm_this_node(void);
 
+int nm_configured_node_map(unsigned long *map, unsigned bytes);
 struct nm_node * nm_get_node_by_num(u8 node_num);
 struct nm_node * nm_get_node_by_ip(u32 addr);
 void nm_node_put(struct nm_node *node);



More information about the Ocfs2-commits mailing list