lkml.org 
[lkml]   [2014]   [Aug]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RFC][PATCH 4/7] inotify: Deal with nested sleeps
On 08/04, Peter Zijlstra wrote:
>
> while (1) {
> - prepare_to_wait(&group->notification_waitq, &wait, TASK_INTERRUPTIBLE);
> -
> mutex_lock(&group->notification_mutex);

So yes, even these 2 lines look obviously buggy. Even if
fsnotify_add_notify_event()->wake_up(&group->notification_waitq) uses
TASK_NORMAL, so at least this can't miss an event.

It is too later for me, but I am wondering if we can do another thing.
Something like

int state;

prepare_to_wait(wait, TASK_INTERRUPTIBLE);

PUSH(&wait, state);
mutex_lock();
mutex_unlock();
POP(&wait, state);

and, ignoring all races, lack of barriers, etc

#define PUSH(w, s) s = current->state; current->state = RUNNING;

#define POP(w, s) current->state = WOKEN(w) ? RUNNING : s;

Probably not... just curious.

Oleg.



\
 
 \ /
  Last update: 2014-08-04 22:01    [W:0.169 / U:0.308 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site