Messages in this thread | | | Date | Mon, 4 Aug 2014 21:23:58 +0200 | From | Oleg Nesterov <> | Subject | Re: [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.
| |