[Ocfs2-commits] zab commits r2053 - in trunk/fs/ocfs2: cluster dlm

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Fri Mar 25 12:52:25 CST 2005


Author: zab
Signed-off-by: mfasheh
Date: 2005-03-25 12:52:23 -0600 (Fri, 25 Mar 2005)
New Revision: 2053

Modified:
   trunk/fs/ocfs2/cluster/nodemanager.c
   trunk/fs/ocfs2/cluster/tcp.c
   trunk/fs/ocfs2/cluster/tcp.h
   trunk/fs/ocfs2/dlm/dlmfs.c
Log:
o allow node removal and add some more cleanup there so that a very orderly
  shutdown can be done, if not perfectly.
o dlmfs was missing a .owner so its module could be removed while mounted

Signed-off-by: mfasheh


Modified: trunk/fs/ocfs2/cluster/nodemanager.c
===================================================================
--- trunk/fs/ocfs2/cluster/nodemanager.c	2005-03-25 06:06:06 UTC (rev 2052)
+++ trunk/fs/ocfs2/cluster/nodemanager.c	2005-03-25 18:52:23 UTC (rev 2053)
@@ -521,22 +521,25 @@
 static void nm_node_set_drop_object(struct uset *uset, struct uobject *uobj)
 {
 	struct nm_node *node = to_nm_node(uobj);
-	struct nm_cluster *cluster = to_nm_cluster(node->nd_uobj.parent);
+	struct nm_cluster *cluster = to_nm_cluster(uset->uobj.parent);
 	int node_not_in_nodes_array = 0;
 
-	/* please don't try this yet, needs proper refcounts of nodes too */
-	BUG();
+	net_stop_node_sock(node);
 
-	if (cluster->cl_has_local)
+	if (cluster->cl_has_local && cluster->cl_local_node == node->nd_num) {
+		cluster->cl_has_local = 0;
+		cluster->cl_local_node = NM_MAX_NODES;
 		net_stop_rx_thread(node);
+	}
 
+	/* XXX call into net to stop this node from trading messages */
+
+	write_lock(&cluster->cl_nodes_lock);
+
 	/* XXX sloppy */
 	if (node->nd_ipv4_address)
 		rb_erase(&node->nd_ip_node, &cluster->cl_node_ip_tree);
 
-	/* XXX call into net to stop this node from trading messages */
-
-	write_lock(&cluster->cl_nodes_lock);
 	if (node->nd_num != NM_MAX_NODES) {
 		if (cluster->cl_nodes[node->nd_num] != node)
 			node_not_in_nodes_array = 1;

Modified: trunk/fs/ocfs2/cluster/tcp.c
===================================================================
--- trunk/fs/ocfs2/cluster/tcp.c	2005-03-25 06:06:06 UTC (rev 2052)
+++ trunk/fs/ocfs2/cluster/tcp.c	2005-03-25 18:52:23 UTC (rev 2053)
@@ -261,6 +261,30 @@
 	 * references.. ugh. */
 }
 
+void net_stop_node_sock(struct nm_node *node)
+{
+	net_inode_private *net = &node->nd_net_inode_private;
+	struct socket *sock = NULL;
+
+	/* make sure this deals with all aspects of the net->sock
+	 * life time */
+	spin_lock_bh(&net->sock_lock);
+	if (net->sock) {
+		sock = net->sock;
+		net->sock_refs++;
+	}
+	spin_unlock_bh(&net->sock_lock);
+	if (sock) {
+		printk("shutting down sock %p\n", sock);
+		net_sock_decref(sock, -ESHUTDOWN);
+	}
+	if (net->page) {
+		__free_page(net->page);
+		net->page = NULL;
+	}
+}
+
+
 static int net_rx_should_wake(struct socket *sock)
 {
 	int empty;

Modified: trunk/fs/ocfs2/cluster/tcp.h
===================================================================
--- trunk/fs/ocfs2/cluster/tcp.h	2005-03-25 06:06:06 UTC (rev 2052)
+++ trunk/fs/ocfs2/cluster/tcp.h	2005-03-25 18:52:23 UTC (rev 2053)
@@ -167,5 +167,6 @@
 void net_unregister_hb_callbacks(void);
 int net_start_rx_thread(struct nm_node *node);
 void net_stop_rx_thread(struct nm_node *node);
+void net_stop_node_sock(struct nm_node *node);
 
 #endif /* CLUSTER_TCP_H */

Modified: trunk/fs/ocfs2/dlm/dlmfs.c
===================================================================
--- trunk/fs/ocfs2/dlm/dlmfs.c	2005-03-25 06:06:06 UTC (rev 2052)
+++ trunk/fs/ocfs2/dlm/dlmfs.c	2005-03-25 18:52:23 UTC (rev 2053)
@@ -594,6 +594,7 @@
 }
 
 static struct file_system_type dlmfs_fs_type = {
+	.owner		= THIS_MODULE,
 	.name		= "ocfs2_dlmfs",
 	.get_sb		= dlmfs_get_sb,
 	.kill_sb	= kill_litter_super,



More information about the Ocfs2-commits mailing list