aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode-map.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-06-25 16:01:30 -0400
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:03 -0400
commita213501153fd66e2359e091b1612841305ba6551 (patch)
tree1f4c316c9d3cad0eb6d9be14cb0e67e46e815dce /fs/btrfs/inode-map.c
parent925baeddc5b0764a53f2214a1253251bab0e0324 (diff)
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>
Diffstat (limited to 'fs/btrfs/inode-map.c')
-rw-r--r--fs/btrfs/inode-map.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
index a0925eabdaa2..298346ae1481 100644
--- a/fs/btrfs/inode-map.c
+++ b/fs/btrfs/inode-map.c
@@ -69,6 +69,12 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
69 struct btrfs_key search_key; 69 struct btrfs_key search_key;
70 u64 search_start = dirid; 70 u64 search_start = dirid;
71 71
72 mutex_lock(&root->objectid_mutex);
73 if (root->last_inode_alloc) {
74 *objectid = ++root->last_inode_alloc;
75 mutex_unlock(&root->objectid_mutex);
76 return 0;
77 }
72 path = btrfs_alloc_path(); 78 path = btrfs_alloc_path();
73 BUG_ON(!path); 79 BUG_ON(!path);
74 search_start = root->last_inode_alloc; 80 search_start = root->last_inode_alloc;
@@ -124,9 +130,11 @@ found:
124 btrfs_release_path(root, path); 130 btrfs_release_path(root, path);
125 btrfs_free_path(path); 131 btrfs_free_path(path);
126 BUG_ON(*objectid < search_start); 132 BUG_ON(*objectid < search_start);
133 mutex_unlock(&root->objectid_mutex);
127 return 0; 134 return 0;
128error: 135error:
129 btrfs_release_path(root, path); 136 btrfs_release_path(root, path);
130 btrfs_free_path(path); 137 btrfs_free_path(path);
138 mutex_unlock(&root->objectid_mutex);
131 return ret; 139 return ret;
132} 140}