mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
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>
This commit is contained in:
parent
8511a2728a
commit
391fbdc5d5
3 changed files with 26 additions and 4 deletions
|
@ -309,6 +309,20 @@ static void lowcomms_state_change(struct sock *sk)
|
||||||
lowcomms_write_space(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 */
|
/* Make a socket active */
|
||||||
static int add_sock(struct socket *sock, struct connection *con)
|
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)
|
static void stop_conn(struct connection *con)
|
||||||
{
|
{
|
||||||
con->flags |= 0x0F;
|
con->flags |= 0x0F;
|
||||||
if (con->sock)
|
if (con->sock && con->sock->sk)
|
||||||
con->sock->sk->sk_user_data = NULL;
|
con->sock->sk->sk_user_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
||||||
** Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved.
|
** Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
|
||||||
**
|
**
|
||||||
** This copyrighted material is made available to anyone wishing to use,
|
** This copyrighted material is made available to anyone wishing to use,
|
||||||
** modify, copy, or redistribute it subject to the terms and conditions
|
** modify, copy, or redistribute it subject to the terms and conditions
|
||||||
|
@ -19,6 +19,7 @@ void dlm_lowcomms_stop(void);
|
||||||
int dlm_lowcomms_close(int nodeid);
|
int dlm_lowcomms_close(int nodeid);
|
||||||
void *dlm_lowcomms_get_buffer(int nodeid, int len, gfp_t allocation, char **ppc);
|
void *dlm_lowcomms_get_buffer(int nodeid, int len, gfp_t allocation, char **ppc);
|
||||||
void dlm_lowcomms_commit_buffer(void *mh);
|
void dlm_lowcomms_commit_buffer(void *mh);
|
||||||
|
int dlm_lowcomms_connect_node(int nodeid);
|
||||||
|
|
||||||
#endif /* __LOWCOMMS_DOT_H__ */
|
#endif /* __LOWCOMMS_DOT_H__ */
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved.
|
** Copyright (C) 2005-2009 Red Hat, Inc. All rights reserved.
|
||||||
**
|
**
|
||||||
** This copyrighted material is made available to anyone wishing to use,
|
** This copyrighted material is made available to anyone wishing to use,
|
||||||
** modify, copy, or redistribute it subject to the terms and conditions
|
** modify, copy, or redistribute it subject to the terms and conditions
|
||||||
|
@ -17,6 +17,7 @@
|
||||||
#include "recover.h"
|
#include "recover.h"
|
||||||
#include "rcom.h"
|
#include "rcom.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "lowcomms.h"
|
||||||
|
|
||||||
static void add_ordered_member(struct dlm_ls *ls, struct dlm_member *new)
|
static void add_ordered_member(struct dlm_ls *ls, struct dlm_member *new)
|
||||||
{
|
{
|
||||||
|
@ -45,7 +46,7 @@ static void add_ordered_member(struct dlm_ls *ls, struct dlm_member *new)
|
||||||
static int dlm_add_member(struct dlm_ls *ls, int nodeid)
|
static int dlm_add_member(struct dlm_ls *ls, int nodeid)
|
||||||
{
|
{
|
||||||
struct dlm_member *memb;
|
struct dlm_member *memb;
|
||||||
int w;
|
int w, error;
|
||||||
|
|
||||||
memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL);
|
memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL);
|
||||||
if (!memb)
|
if (!memb)
|
||||||
|
@ -57,6 +58,12 @@ static int dlm_add_member(struct dlm_ls *ls, int nodeid)
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error = dlm_lowcomms_connect_node(nodeid);
|
||||||
|
if (error < 0) {
|
||||||
|
kfree(memb);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
memb->nodeid = nodeid;
|
memb->nodeid = nodeid;
|
||||||
memb->weight = w;
|
memb->weight = w;
|
||||||
add_ordered_member(ls, memb);
|
add_ordered_member(ls, memb);
|
||||||
|
|
Loading…
Reference in a new issue