diff options
| -rw-r--r-- | fs/dlm/lowcomms.c | 16 | ||||
| -rw-r--r-- | fs/dlm/lowcomms.h | 3 | ||||
| -rw-r--r-- | fs/dlm/member.c | 11 |
3 files changed, 26 insertions, 4 deletions
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 609108a83267..2559a97f0ddc 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c | |||
| @@ -309,6 +309,20 @@ static void lowcomms_state_change(struct sock *sk) | |||
| 309 | lowcomms_write_space(sk); | 309 | lowcomms_write_space(sk); |
| 310 | } | 310 | } |
| 311 | 311 | ||
| 312 | int dlm_lowcomms_connect_node(int nodeid) | ||
| 313 | { | ||
| 314 | struct connection *con; | ||
| 315 | |||
| 316 | if (nodeid == dlm_our_nodeid()) | ||
| 317 | return 0; | ||
| 318 | |||
| 319 | con = nodeid2con(nodeid, GFP_NOFS); | ||
| 320 | if (!con) | ||
| 321 | return -ENOMEM; | ||
| 322 | lowcomms_connect_sock(con); | ||
| 323 | return 0; | ||
| 324 | } | ||
| 325 | |||
| 312 | /* Make a socket active */ | 326 | /* Make a socket active */ |
| 313 | static int add_sock(struct socket *sock, struct connection *con) | 327 | static int add_sock(struct socket *sock, struct connection *con) |
| 314 | { | 328 | { |
| @@ -1421,7 +1435,7 @@ static int work_start(void) | |||
| 1421 | static void stop_conn(struct connection *con) | 1435 | static void stop_conn(struct connection *con) |
| 1422 | { | 1436 | { |
| 1423 | con->flags |= 0x0F; | 1437 | con->flags |= 0x0F; |
| 1424 | if (con->sock) | 1438 | if (con->sock && con->sock->sk) |
| 1425 | con->sock->sk->sk_user_data = NULL; | 1439 | con->sock->sk->sk_user_data = NULL; |
| 1426 | } | 1440 | } |
| 1427 | 1441 | ||
diff --git a/fs/dlm/lowcomms.h b/fs/dlm/lowcomms.h index a9a9618c0d3f..1311e6426287 100644 --- a/fs/dlm/lowcomms.h +++ b/fs/dlm/lowcomms.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | ******************************************************************************* | 2 | ******************************************************************************* |
| 3 | ** | 3 | ** |
| 4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. | 4 | ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. |
| 5 | ** Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. | 5 | ** Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved. |
| 6 | ** | 6 | ** |
| 7 | ** This copyrighted material is made available to anyone wishing to use, | 7 | ** This copyrighted material is made available to anyone wishing to use, |
| 8 | ** modify, copy, or redistribute it subject to the terms and conditions | 8 | ** modify, copy, or redistribute it subject to the terms and conditions |
| @@ -19,6 +19,7 @@ void dlm_lowcomms_stop(void); | |||
| 19 | int dlm_lowcomms_close(int nodeid); | 19 | int dlm_lowcomms_close(int nodeid); |
| 20 | void *dlm_lowcomms_get_buffer(int nodeid, int len, gfp_t allocation, char **ppc); | 20 | void *dlm_lowcomms_get_buffer(int nodeid, int len, gfp_t allocation, char **ppc); |
| 21 | void dlm_lowcomms_commit_buffer(void *mh); | 21 | void dlm_lowcomms_commit_buffer(void *mh); |
| 22 | int dlm_lowcomms_connect_node(int nodeid); | ||
| 22 | 23 | ||
| 23 | #endif /* __LOWCOMMS_DOT_H__ */ | 24 | #endif /* __LOWCOMMS_DOT_H__ */ |
| 24 | 25 | ||
diff --git a/fs/dlm/member.c b/fs/dlm/member.c index 26133f05ae3a..2afb77051cce 100644 --- a/fs/dlm/member.c +++ b/fs/dlm/member.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /****************************************************************************** | 1 | /****************************************************************************** |
| 2 | ******************************************************************************* | 2 | ******************************************************************************* |
| 3 | ** | 3 | ** |
| 4 | ** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved. | 4 | ** Copyright (C) 2005-2009 Red Hat, Inc. All rights reserved. |
| 5 | ** | 5 | ** |
| 6 | ** This copyrighted material is made available to anyone wishing to use, | 6 | ** This copyrighted material is made available to anyone wishing to use, |
| 7 | ** modify, copy, or redistribute it subject to the terms and conditions | 7 | ** modify, copy, or redistribute it subject to the terms and conditions |
| @@ -17,6 +17,7 @@ | |||
| 17 | #include "recover.h" | 17 | #include "recover.h" |
| 18 | #include "rcom.h" | 18 | #include "rcom.h" |
| 19 | #include "config.h" | 19 | #include "config.h" |
| 20 | #include "lowcomms.h" | ||
| 20 | 21 | ||
| 21 | static void add_ordered_member(struct dlm_ls *ls, struct dlm_member *new) | 22 | static void add_ordered_member(struct dlm_ls *ls, struct dlm_member *new) |
| 22 | { | 23 | { |
| @@ -45,7 +46,7 @@ static void add_ordered_member(struct dlm_ls *ls, struct dlm_member *new) | |||
| 45 | static int dlm_add_member(struct dlm_ls *ls, int nodeid) | 46 | static int dlm_add_member(struct dlm_ls *ls, int nodeid) |
| 46 | { | 47 | { |
| 47 | struct dlm_member *memb; | 48 | struct dlm_member *memb; |
| 48 | int w; | 49 | int w, error; |
| 49 | 50 | ||
| 50 | memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL); | 51 | memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL); |
| 51 | if (!memb) | 52 | if (!memb) |
| @@ -57,6 +58,12 @@ static int dlm_add_member(struct dlm_ls *ls, int nodeid) | |||
| 57 | return w; | 58 | return w; |
| 58 | } | 59 | } |
| 59 | 60 | ||
| 61 | error = dlm_lowcomms_connect_node(nodeid); | ||
| 62 | if (error < 0) { | ||
| 63 | kfree(memb); | ||
| 64 | return error; | ||
| 65 | } | ||
| 66 | |||
| 60 | memb->nodeid = nodeid; | 67 | memb->nodeid = nodeid; |
| 61 | memb->weight = w; | 68 | memb->weight = w; |
| 62 | add_ordered_member(ls, memb); | 69 | add_ordered_member(ls, memb); |
