diff options
author | Alexander Aring <aahringo@redhat.com> | 2022-11-17 17:11:49 -0500 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2022-11-21 09:45:49 -0600 |
commit | 1037c2a94ab51997d8b1ef9e7f6ed697e6e17d84 (patch) | |
tree | 6a15e6d22cccd6b4c0055a2724f6a7c12f323972 /fs/dlm | |
parent | dd070a56e0fa36f03bcd09fbf1521c733cf2aa21 (diff) | |
download | linux-1037c2a94ab51997d8b1ef9e7f6ed697e6e17d84.tar.gz linux-1037c2a94ab51997d8b1ef9e7f6ed697e6e17d84.tar.bz2 linux-1037c2a94ab51997d8b1ef9e7f6ed697e6e17d84.zip |
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')
-rw-r--r-- | fs/dlm/config.c | 4 | ||||
-rw-r--r-- | fs/dlm/lowcomms.c | 17 | ||||
-rw-r--r-- | fs/dlm/lowcomms.h | 4 |
3 files changed, 10 insertions, 15 deletions
diff --git a/fs/dlm/config.c b/fs/dlm/config.c index ac8b62106ce0..20b60709eccf 100644 --- a/fs/dlm/config.c +++ b/fs/dlm/config.c @@ -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; diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index d3302b10b37e..d9001d40aa6e 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(); diff --git a/fs/dlm/lowcomms.h b/fs/dlm/lowcomms.h index bbce7a18416d..acaf1b0b3885 100644 --- a/fs/dlm/lowcomms.h +++ b/fs/dlm/lowcomms.h @@ -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); |