• Nelson Elhage's avatar
    epoll: fix spurious lockdep warnings · d8805e63
    Nelson Elhage authored
    epoll can acquire recursively acquire ep->mtx on multiple "struct
    eventpoll"s at once in the case where one epoll fd is monitoring another
    epoll fd.  This is perfectly OK, since we're careful about the lock
    ordering, but it causes spurious lockdep warnings.  Annotate the recursion
    using mutex_lock_nested, and add a comment explaining the nesting rules
    for good measure.
    
    Recent versions of systemd are triggering this, and it can also be
    demonstrated with the following trivial test program:
    
    --------------------8<--------------------
    
    int main(void) {
       int e1, e2;
       struct epoll_event evt = {
           .events = EPOLLIN
       };
    
       e1 = epoll_create1(0);
       e2 = epoll_create1(0);
       epoll_ctl(e1, EPOLL_CTL_ADD, e2, &evt);
       return 0;
    }
    --------------------8<--------------------
    Reported-by: default avatarPaul Bolle <pebolle@tiscali.nl>
    Tested-by: default avatarPaul Bolle <pebolle@tiscali.nl>
    Signed-off-by: default avatarNelson Elhage <nelhage@nelhage.com>
    Acked-by: default avatarJason Baron <jbaron@redhat.com>
    Cc: Dave Jones <davej@redhat.com>
    Cc: Davide Libenzi <davidel@xmailserver.org>
    Cc: <stable@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d8805e63
eventpoll.c 44.5 KB