diff options
| author | David Teigland <teigland@redhat.com> | 2007-11-07 10:03:56 -0500 |
|---|---|---|
| committer | Steven Whitehouse <swhiteho@redhat.com> | 2008-01-25 03:07:49 -0500 |
| commit | 8cbc4342478311c2a85260a7ca54d96cb7f71f7b (patch) | |
| tree | 23a8ab6a4a2c154274d01cfe0e69715cd7ad4d86 /fs/gfs2/locking/dlm | |
| parent | c7227e46423a57b4df27a2d75b5869bd3ae654d0 (diff) | |
[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: David Teigland <teigland@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/locking/dlm')
| -rw-r--r-- | fs/gfs2/locking/dlm/thread.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/fs/gfs2/locking/dlm/thread.c b/fs/gfs2/locking/dlm/thread.c index bd938f06481d..521694fc19d6 100644 --- a/fs/gfs2/locking/dlm/thread.c +++ b/fs/gfs2/locking/dlm/thread.c | |||
| @@ -273,18 +273,13 @@ static int gdlm_thread(void *data, int blist) | |||
| 273 | struct gdlm_ls *ls = (struct gdlm_ls *) data; | 273 | struct gdlm_ls *ls = (struct gdlm_ls *) data; |
| 274 | struct gdlm_lock *lp = NULL; | 274 | struct gdlm_lock *lp = NULL; |
| 275 | uint8_t complete, blocking, submit, drop; | 275 | uint8_t complete, blocking, submit, drop; |
| 276 | DECLARE_WAITQUEUE(wait, current); | ||
| 277 | 276 | ||
| 278 | /* Only thread1 is allowed to do blocking callbacks since gfs | 277 | /* Only thread1 is allowed to do blocking callbacks since gfs |
| 279 | may wait for a completion callback within a blocking cb. */ | 278 | may wait for a completion callback within a blocking cb. */ |
| 280 | 279 | ||
| 281 | while (!kthread_should_stop()) { | 280 | while (!kthread_should_stop()) { |
| 282 | set_current_state(TASK_INTERRUPTIBLE); | 281 | wait_event_interruptible(ls->thread_wait, |
| 283 | add_wait_queue(&ls->thread_wait, &wait); | 282 | !no_work(ls, blist) || kthread_should_stop()); |
| 284 | if (no_work(ls, blist)) | ||
| 285 | schedule(); | ||
| 286 | remove_wait_queue(&ls->thread_wait, &wait); | ||
| 287 | set_current_state(TASK_RUNNING); | ||
| 288 | 283 | ||
| 289 | complete = blocking = submit = drop = 0; | 284 | complete = blocking = submit = drop = 0; |
| 290 | 285 | ||
