Commit fcef0e6c authored by Alexander Aring's avatar Alexander Aring Committed by David Teigland
Browse files

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: default avatarAlexander Aring <aahringo@redhat.com>
Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
parent 7d3848c0
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -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;
}