Btrfs: Replace the big fs_mutex with a collection of other locks
Extent alloctions are still protected by a large alloc_mutex.
Objectid allocations are covered by a objectid mutex
Other btree operations are protected by a lock on individual btree nodes
Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
index a0925ea..298346a 100644
--- a/fs/btrfs/inode-map.c
+++ b/fs/btrfs/inode-map.c
@@ -69,6 +69,12 @@
struct btrfs_key search_key;
u64 search_start = dirid;
+ mutex_lock(&root->objectid_mutex);
+ if (root->last_inode_alloc) {
+ *objectid = ++root->last_inode_alloc;
+ mutex_unlock(&root->objectid_mutex);
+ return 0;
+ }
path = btrfs_alloc_path();
BUG_ON(!path);
search_start = root->last_inode_alloc;
@@ -124,9 +130,11 @@
btrfs_release_path(root, path);
btrfs_free_path(path);
BUG_ON(*objectid < search_start);
+ mutex_unlock(&root->objectid_mutex);
return 0;
error:
btrfs_release_path(root, path);
btrfs_free_path(path);
+ mutex_unlock(&root->objectid_mutex);
return ret;
}