mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 13:23:18 +00:00
fs: dlm: use listen sock as dlm running indicator
This patch will switch from dlm_allow_conn to check if dlm lowcomms is running or not to if we actually have a listen socket set or not. The list socket will be set and unset in lowcomms start and shutdown functionality. To synchronize with data_ready() callback we will set the socket callback to NULL while socket lock is held. Signed-off-by: Alexander Aring <aahringo@redhat.com> Signed-off-by: David Teigland <teigland@redhat.com>
This commit is contained in:
parent
dd070a56e0
commit
1037c2a94a
@ -183,7 +183,7 @@ static int dlm_check_protocol_and_dlm_running(unsigned int x)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (dlm_allow_conn)
|
||||
if (dlm_lowcomms_is_running())
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
@ -194,7 +194,7 @@ static int dlm_check_zero_and_dlm_running(unsigned int x)
|
||||
if (!x)
|
||||
return -EINVAL;
|
||||
|
||||
if (dlm_allow_conn)
|
||||
if (dlm_lowcomms_is_running())
|
||||
return -EBUSY;
|
||||
|
||||
return 0;
|
||||
|
@ -176,7 +176,6 @@ static DEFINE_SPINLOCK(dlm_node_addrs_spin);
|
||||
static struct listen_connection listen_con;
|
||||
static struct sockaddr_storage *dlm_local_addr[DLM_MAX_ADDR_COUNT];
|
||||
static int dlm_local_count;
|
||||
int dlm_allow_conn;
|
||||
|
||||
/* Work queues */
|
||||
static struct workqueue_struct *recv_workqueue;
|
||||
@ -191,6 +190,11 @@ static const struct dlm_proto_ops *dlm_proto_ops;
|
||||
static void process_recv_sockets(struct work_struct *work);
|
||||
static void process_send_sockets(struct work_struct *work);
|
||||
|
||||
bool dlm_lowcomms_is_running(void)
|
||||
{
|
||||
return !!listen_con.sock;
|
||||
}
|
||||
|
||||
static void writequeue_entry_ctor(void *data)
|
||||
{
|
||||
struct writequeue_entry *entry = data;
|
||||
@ -511,9 +515,6 @@ static void lowcomms_data_ready(struct sock *sk)
|
||||
|
||||
static void lowcomms_listen_data_ready(struct sock *sk)
|
||||
{
|
||||
if (!dlm_allow_conn)
|
||||
return;
|
||||
|
||||
queue_work(recv_workqueue, &listen_con.rwork);
|
||||
}
|
||||
|
||||
@ -1689,10 +1690,7 @@ void dlm_lowcomms_shutdown(void)
|
||||
{
|
||||
int idx;
|
||||
|
||||
/* Set all the flags to prevent any
|
||||
* socket activity.
|
||||
*/
|
||||
dlm_allow_conn = 0;
|
||||
restore_callbacks(listen_con.sock);
|
||||
|
||||
if (recv_workqueue)
|
||||
flush_workqueue(recv_workqueue);
|
||||
@ -1995,8 +1993,6 @@ int dlm_lowcomms_start(void)
|
||||
if (error)
|
||||
goto fail_local;
|
||||
|
||||
dlm_allow_conn = 1;
|
||||
|
||||
/* Start listening */
|
||||
switch (dlm_config.ci_protocol) {
|
||||
case DLM_PROTO_TCP:
|
||||
@ -2021,7 +2017,6 @@ int dlm_lowcomms_start(void)
|
||||
fail_listen:
|
||||
dlm_proto_ops = NULL;
|
||||
fail_proto_ops:
|
||||
dlm_allow_conn = 0;
|
||||
work_stop();
|
||||
fail_local:
|
||||
deinit_local();
|
||||
|
@ -29,8 +29,8 @@ static inline int nodeid_hash(int nodeid)
|
||||
return nodeid & (CONN_HASH_SIZE-1);
|
||||
}
|
||||
|
||||
/* switch to check if dlm is running */
|
||||
extern int dlm_allow_conn;
|
||||
/* check if dlm is running */
|
||||
bool dlm_lowcomms_is_running(void);
|
||||
|
||||
int dlm_lowcomms_start(void);
|
||||
void dlm_lowcomms_shutdown(void);
|
||||
|
Loading…
Reference in New Issue
Block a user