[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