[GFS2] check kthread_should_stop when waiting
authorDavid Teigland <teigland@redhat.com>
Wed, 7 Nov 2007 15:03:56 +0000 (09:03 -0600)
committerSteven Whitehouse <swhiteho@redhat.com>
Fri, 25 Jan 2008 08:07:49 +0000 (08:07 +0000)
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: David Teigland <teigland@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/locking/dlm/thread.c

index bd938f06481d47c77ac8bb19276281d95dfe45fb..521694fc19d672c010fe6afdb4455fd389598a8e 100644 (file)
@@ -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;