• Steven Whitehouse's avatar
    [GFS2] Fix a page lock / glock deadlock · 7afd88d9
    Steven Whitehouse authored
    We've previously been using a "try lock" in readpage on the basis that
    it would prevent deadlocks due to the inverted lock ordering (our normal
    lock ordering is glock first and then page lock). Unfortunately tests
    have shown that this isn't enough. If the glock has a demote request
    queued such that run_queue() in the glock code tries to do a demote when
    its called under readpage then it will try and write out all the dirty
    pages which requires locking them. This then deadlocks with the page
    locked by readpage.
    
    The solution is to always require two calls into readpage. The first
    unlocks the page, gets the glock and returns AOP_TRUNCATED_PAGE, the
    second does the actual readpage and unlocks the glock & page as
    required.
    Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
    7afd88d9
glock.h 4.05 KB