aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/lowcomms.c
diff options
context:
space:
mode:
authorAlexander Aring <aahringo@redhat.com>2022-11-17 17:11:49 -0500
committerDavid Teigland <teigland@redhat.com>2022-11-21 09:45:49 -0600
commit1037c2a94ab51997d8b1ef9e7f6ed697e6e17d84 (patch)
tree6a15e6d22cccd6b4c0055a2724f6a7c12f323972 /fs/dlm/lowcomms.c
parentdd070a56e0fa36f03bcd09fbf1521c733cf2aa21 (diff)
downloadlinux-1037c2a94ab51997d8b1ef9e7f6ed697e6e17d84.tar.gz
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>
Diffstat (limited to 'fs/dlm/lowcomms.c')
-rw-r--r--fs/dlm/lowcomms.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
index d3302b10b37e0..d9001d40aa6e8 100644
--- a/fs/dlm/lowcomms.c
+++ b/fs/dlm/lowcomms.c
@@ -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();