Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 129001
b: refs/heads/master
c: 42e70e7
h: refs/heads/master
i:
  128999: 683bad5
v: v3
  • Loading branch information
Chris Mason committed Nov 7, 2008
1 parent c4cf2e3 commit fde1dbf
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: af09abfece59aa50bfbf16f6f1f85822554e061f
refs/heads/master: 42e70e7a2f9d96fd843723fa46d5121cb3e551d0
19 changes: 14 additions & 5 deletions trunk/fs/btrfs/extent-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -2152,11 +2152,13 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
}
search_start = max(search_start, first_logical_byte(root, 0));
search_start = max(search_start, hint_byte);
total_needed += empty_size;

if (search_start != last_wanted)
if (last_wanted && search_start != last_wanted) {
last_wanted = 0;
empty_size += empty_cluster;
}

total_needed += empty_size;
block_group = btrfs_lookup_block_group(root->fs_info, search_start);
if (!block_group)
block_group = btrfs_lookup_first_block_group(root->fs_info,
Expand All @@ -2171,7 +2173,9 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
* group thats not of the proper type, while looping this
* should never happen
*/
WARN_ON(!block_group);
if (!block_group)
goto new_group_no_lock;

mutex_lock(&block_group->alloc_mutex);
if (unlikely(!block_group_bits(block_group, data)))
goto new_group;
Expand Down Expand Up @@ -2248,12 +2252,13 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
break;
}
new_group:
mutex_unlock(&block_group->alloc_mutex);
new_group_no_lock:
last_wanted = 0;
if (loop > 0) {
if (!allowed_chunk_alloc && loop > 0) {
total_needed -= empty_cluster;
empty_cluster = 0;
}
mutex_unlock(&block_group->alloc_mutex);
/*
* Here's how this works.
* loop == 0: we were searching a block group via a hint
Expand All @@ -2271,6 +2276,10 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
cur = head->next;
loop++;
} else if (loop == 1 && cur == head) {

total_needed -= empty_cluster;
empty_cluster = 0;

if (allowed_chunk_alloc && !chunk_alloc_done) {
up_read(&space_info->groups_sem);
ret = do_chunk_alloc(trans, root, num_bytes +
Expand Down

0 comments on commit fde1dbf

Please sign in to comment.