Btrfs: fix seekiness due to finding the wrong block group
[pandora-kernel.git] / fs / btrfs / extent-tree.c
index 8043b9d..64e14dd 100644 (file)
@@ -2238,7 +2238,10 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
        total_needed += empty_size;
 
 new_group:
-       block_group = btrfs_lookup_first_block_group(info, search_start);
+       block_group = btrfs_lookup_block_group(info, search_start);
+       if (!block_group)
+               block_group = btrfs_lookup_first_block_group(info,
+                                                            search_start);
 
        /*
         * Ok this looks a little tricky, buts its really simple.  First if we
@@ -2255,8 +2258,10 @@ new_group:
        if (!block_group || (!block_group_bits(block_group, data) &&
                             last_ptr && *last_ptr)) {
                if (search_start != orig_search_start) {
-                       if (last_ptr && *last_ptr)
+                       if (last_ptr && *last_ptr) {
+                               total_needed += empty_cluster;
                                *last_ptr = 0;
+                       }
                        search_start = orig_search_start;
                        goto new_group;
                } else if (!chunk_alloc_done && allowed_chunk_alloc) {