Messages in this thread |  | | | Subject | Re: [PATCH] slow_work_thread() should do the exclusive wait | | From | Trond Myklebust <> | | Date | Mon, 13 Apr 2009 15:03:49 -0400 |
| |
On Mon, 2009-04-13 at 20:17 +0200, Oleg Nesterov wrote: > slow_work_thread() sleeps on slow_work_thread_wq without WQ_FLAG_EXCLUSIVE, > this means that slow_work_enqueue()->__wake_up(nr_exclusive => 1) wakes up > all kslowd threads. Afaics this is not what we want, change slow_work_thread() > to use prepare_to_wait_exclusive(). > > Signed-off-by: Oleg Nesterov <oleg@redhat.com> > > --- 6.30/kernel/slow-work.c~1_SW_EXCLUSIVE 2009-04-06 00:03:42.000000000 +0200 > +++ 6.30/kernel/slow-work.c 2009-04-13 19:40:20.000000000 +0200 > @@ -372,8 +372,8 @@ static int slow_work_thread(void *_data) > vsmax *= atomic_read(&slow_work_thread_count); > vsmax /= 100; > > - prepare_to_wait(&slow_work_thread_wq, &wait, > - TASK_INTERRUPTIBLE); > + prepare_to_wait_exclusive(&slow_work_thread_wq, &wait, > + TASK_INTERRUPTIBLE); > if (!freezing(current) && > !slow_work_threads_should_exit && > !slow_work_available(vsmax) && >
Should that really be TASK_INTERRUPTIBLE? I don't see anything obvious in the enclosing for(;;) loop that checks for or handles signals...
Cheers Trond -- Trond Myklebust Linux NFS client maintainer
NetApp Trond.Myklebust@netapp.com www.netapp.com
|  |