aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/lowcomms.c
diff options
context:
space:
mode:
authorChristine Caulfield <ccaulfie@redhat.com>2009-05-07 10:54:16 -0500
committerDavid Teigland <teigland@redhat.com>2009-05-15 09:34:12 -0500
commit391fbdc5d527149578490db2f1619951d91f3561 (patch)
tree98b84ba8cd459293a232fd148cef0886f976bf19 /fs/dlm/lowcomms.c
parent8511a2728ab82cab398e39d019f5cf1246021c1c (diff)
downloadkernel_samsung_smdk4412-391fbdc5d527149578490db2f1619951d91f3561.zip
kernel_samsung_smdk4412-391fbdc5d527149578490db2f1619951d91f3561.tar.gz
kernel_samsung_smdk4412-391fbdc5d527149578490db2f1619951d91f3561.tar.bz2
dlm: connect to nodes earlier
Make network connections to other nodes earlier, in the context of dlm_recoverd. This avoids connecting to nodes from dlm_send where we try to avoid allocations which could possibly deadlock if memory reclaim goes into the cluster fs which may try to do a dlm operation. Signed-off-by: Christine Caulfield <ccaulfie@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/lowcomms.c')
-rw-r--r--fs/dlm/lowcomms.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
index 609108a..2559a97 100644
--- a/fs/dlm/lowcomms.c
+++ b/fs/dlm/lowcomms.c
@@ -309,6 +309,20 @@ static void lowcomms_state_change(struct sock *sk)
lowcomms_write_space(sk);
}
+int dlm_lowcomms_connect_node(int nodeid)
+{
+ struct connection *con;
+
+ if (nodeid == dlm_our_nodeid())
+ return 0;
+
+ con = nodeid2con(nodeid, GFP_NOFS);
+ if (!con)
+ return -ENOMEM;
+ lowcomms_connect_sock(con);
+ return 0;
+}
+
/* Make a socket active */
static int add_sock(struct socket *sock, struct connection *con)
{
@@ -1421,7 +1435,7 @@ static int work_start(void)
static void stop_conn(struct connection *con)
{
con->flags |= 0x0F;
- if (con->sock)
+ if (con->sock && con->sock->sk)
con->sock->sk->sk_user_data = NULL;
}