Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8cbc4342 authored by David Teigland's avatar David Teigland Committed by Steven Whitehouse
Browse files

[GFS2] check kthread_should_stop when waiting



Use wait_event_interruptible() in the lock_dlm thread instead
of an open coded equivalent, and include a kthread_should_stop()
check in the wait test so we don't miss a kthread_stop().

Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent c7227e46
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -273,18 +273,13 @@ static int gdlm_thread(void *data, int blist)
	struct gdlm_ls *ls = (struct gdlm_ls *) data;
	struct gdlm_lock *lp = NULL;
	uint8_t complete, blocking, submit, drop;
	DECLARE_WAITQUEUE(wait, current);

	/* Only thread1 is allowed to do blocking callbacks since gfs
	   may wait for a completion callback within a blocking cb. */

	while (!kthread_should_stop()) {
		set_current_state(TASK_INTERRUPTIBLE);
		add_wait_queue(&ls->thread_wait, &wait);
		if (no_work(ls, blist))
			schedule();
		remove_wait_queue(&ls->thread_wait, &wait);
		set_current_state(TASK_RUNNING);
		wait_event_interruptible(ls->thread_wait,
				!no_work(ls, blist) || kthread_should_stop());

		complete = blocking = submit = drop = 0;