• L
    fanotify: dont merge permission events · 03a1cec1
    Lino Sanfilippo 提交于
    Boyd Yang reported a problem for the case that multiple threads of the same
    thread group are waiting for a reponse for a permission event.
    In this case it is possible that some of the threads are never woken up, even
    if the response for the event has been received
    (see http://marc.info/?l=linux-kernel&m=131822913806350&w=2).
    
    The reason is that we are currently merging permission events if they belong to
    the same thread group. But we are not prepared to wake up more than one waiter
    for each event. We do
    
    wait_event(group->fanotify_data.access_waitq, event->response ||
    			atomic_read(&group->fanotify_data.bypass_perm));
    and after that
      event->response = 0;
    
    which is the reason that even if we woke up all waiters for the same event
    some of them may see event->response being already set 0 again, then go back to
    sleep and block forever.
    
    With this patch we avoid that more than one thread is waiting for a response
    by not merging permission events for the same thread group any more.
    Reported-by: NBoyd Yang <boyd.yang@gmail.com>
    Signed-off-by: NLino Sanfilippo <LinoSanfilipp@gmx.de>
    Signed-off-by: NEric Paris <eparis@redhat.com>
    03a1cec1
fanotify.c 6.3 KB