diff options
author | Christine Caulfield <ccaulfie@redhat.com> | 2009-05-07 10:54:16 -0500 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2009-05-15 09:34:12 -0500 |
commit | 391fbdc5d527149578490db2f1619951d91f3561 (patch) | |
tree | 98b84ba8cd459293a232fd148cef0886f976bf19 /fs/dlm/lowcomms.c | |
parent | 8511a2728ab82cab398e39d019f5cf1246021c1c (diff) | |
download | op-kernel-dev-391fbdc5d527149578490db2f1619951d91f3561.zip op-kernel-dev-391fbdc5d527149578490db2f1619951d91f3561.tar.gz |
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.c | 16 |
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; } |