• Chris Mason's avatar
    Btrfs: make a lockdep class for the extent buffer locks · 4008c04a
    Chris Mason authored
    Btrfs is currently using spin_lock_nested with a nested value based
    on the tree depth of the block.  But, this doesn't quite work because
    the max tree depth is bigger than what spin_lock_nested can deal with,
    and because locks are sometimes taken before the level field is filled in.
    The solution here is to use lockdep_set_class_and_name instead, and to
    set the class before unlocking the pages when the block is read from the
    disk and just after init of a freshly allocated tree block.
    btrfs_clear_path_blocking is also changed to take the locks in the proper
    order, and it also makes sure all the locks currently held are properly
    set to blocking before it tries to retake the spinlocks.  Otherwise, lockdep
    gets upset about bad lock orderin.
    The lockdep magic cam from Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>