Skip to content

Commit

Permalink
Btrfs: Use mutex_lock_nested for tree locking
Browse files Browse the repository at this point in the history
Lockdep has the notion of locking subclasses so that you can identify
locks you expect to be taken after other locks of the same class.  This
changes the per-extent buffer btree locking routines to use a subclass based
on the level in the tree.

Unfortunately, lockdep can only handle 8 total subclasses, and the btrfs
max level is also 8.  So when lockdep is on, use a lower max level.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Chris Mason committed Sep 25, 2008
1 parent f421950 commit 6dddcbe
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
6 changes: 5 additions & 1 deletion fs/btrfs/ctree.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,11 @@ struct btrfs_ordered_sum;

#define BTRFS_MAGIC "_B5RfS_M"

#define BTRFS_MAX_LEVEL 8
#ifdef CONFIG_LOCKDEP
# define BTRFS_MAX_LEVEL 7
#else
# define BTRFS_MAX_LEVEL 8
#endif

/* holds pointers to all of the tree roots */
#define BTRFS_ROOT_TREE_OBJECTID 1ULL
Expand Down
2 changes: 1 addition & 1 deletion fs/btrfs/locking.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ int btrfs_tree_lock(struct extent_buffer *eb)
return 0;
}
cpu_relax();
mutex_lock(&eb->mutex);
mutex_lock_nested(&eb->mutex, BTRFS_MAX_LEVEL - btrfs_header_level(eb));
return 0;
}

Expand Down

0 comments on commit 6dddcbe

Please sign in to comment.