• Matthew Wilcox's avatar
    userfaultfd: use fault_wqh lock · c430d1e8
    Matthew Wilcox authored
    The userfaultfd code currently uses the unlocked waitqueue helpers for
    managing fault_wqh, but instead of holding the waitqueue lock for this
    waitqueue around these calls, it the waitqueue lock of
    fault_pending_wq, which is a different waitqueue instance.  Given that
    the waitqueue is not exposed to the rest of the kernel this actually
    works ok at the moment, but prevents the userfaultfd locking rules from
    being enforced using lockdep.
    
    Switch to the internally locked waitqueue helpers instead.  This means
    that the lock inside fault_wqh now nests inside the fault_pending_wqh
    lock, but that's not a problem since it was entirely unused before.
    
    [hch@lst.de: slight changelog updates]
    [rppt@linux.vnet.ibm.com: spotted changelog spellos]
    Link: http://lkml.kernel.org/r/20171214152344.6880-3-hch@lst.deSigned-off-by: default avatarMatthew Wilcox <mawilcox@microsoft.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarMike Rapoport <rppt@linux.vnet.ibm.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jason Baron <jbaron@akamai.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c430d1e8
userfaultfd.c 49.8 KB