diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-06-25 16:01:30 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:03 -0400 |
commit | a213501153fd66e2359e091b1612841305ba6551 (patch) | |
tree | 1f4c316c9d3cad0eb6d9be14cb0e67e46e815dce /fs/btrfs/inode-map.c | |
parent | 925baeddc5b0764a53f2214a1253251bab0e0324 (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.c | 8 |
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; |
128 | error: | 135 | error: |
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 | } |