From mboxrd@z Thu Jan 1 00:00:00 1970 From: teigland@sourceware.org Date: 14 Jan 2008 16:00:21 -0000 Subject: [Cluster-devel] cluster/gfs-kernel/src/dlm thread.c Message-ID: <20080114160021.5637.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: teigland at sourceware.org 2008-01-14 16:00:20 Modified files: gfs-kernel/src/dlm: thread.c Log message: bz 352731 I've looked at other users of kthread_stop()/kthread_should_stop(), and most seem to incorporate a call to kthread_should_stop() within the test that adds the thread to a wait_queue. I'm guessing that that's what we should be doing also (and at the same time using wait_event_interruptible() instead of an open-coded equivalent.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/dlm/thread.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.16.2.6&r2=1.16.2.7 --- cluster/gfs-kernel/src/dlm/Attic/thread.c 2007/08/31 15:23:32 1.16.2.6 +++ cluster/gfs-kernel/src/dlm/Attic/thread.c 2008/01/14 16:00:20 1.16.2.7 @@ -330,15 +330,10 @@ dlm_lock_t *lp = NULL; dlm_start_t *ds = NULL; uint8_t complete, blocking, submit, start, finish, drop, shrink; - DECLARE_WAITQUEUE(wait, current); while (!kthread_should_stop()) { - set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&dlm->wait, &wait); - if (no_work(dlm)) - schedule(); - remove_wait_queue(&dlm->wait, &wait); - set_current_state(TASK_RUNNING); + wait_event_interruptible(dlm->wait, + !no_work(dlm) || kthread_should_stop()); complete = blocking = submit = start = finish = 0; drop = shrink = 0;