diff options
author | Alexander Aring <aahringo@redhat.com> | 2021-06-02 09:45:15 -0400 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2021-06-02 11:53:04 -0500 |
commit | fcef0e6c27ce109d2c617aa12f0bfd9f7ff47d38 (patch) | |
tree | 1eb7b27eb8f117214ee98bf8c8b31e2c7a5d099e /fs/dlm | |
parent | 7d3848c03e09ea9cdfde8bb2b82282d252943ee6 (diff) | |
download | linux-fcef0e6c27ce109d2c617aa12f0bfd9f7ff47d38.tar.bz2 |
fs: dlm: fix lowcomms_start error case
This patch fixes the error path handling in lowcomms_start(). We need to
cleanup some static allocated data structure and cleanup possible
workqueue if these have started.
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/lowcomms.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 36adccc4f849..b71f7eafb808 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c @@ -1803,10 +1803,15 @@ static void process_send_sockets(struct work_struct *work) static void work_stop(void) { - if (recv_workqueue) + if (recv_workqueue) { destroy_workqueue(recv_workqueue); - if (send_workqueue) + recv_workqueue = NULL; + } + + if (send_workqueue) { destroy_workqueue(send_workqueue); + send_workqueue = NULL; + } } static int work_start(void) @@ -1823,6 +1828,7 @@ static int work_start(void) if (!send_workqueue) { log_print("can't start dlm_send"); destroy_workqueue(recv_workqueue); + recv_workqueue = NULL; return -ENOMEM; } @@ -1960,7 +1966,7 @@ int dlm_lowcomms_start(void) error = work_start(); if (error) - goto fail; + goto fail_local; dlm_allow_conn = 1; @@ -1977,6 +1983,9 @@ int dlm_lowcomms_start(void) fail_unlisten: dlm_allow_conn = 0; dlm_close_sock(&listen_con.sock); + work_stop(); +fail_local: + deinit_local(); fail: return error; } |