Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-2.6-microblaze.git] / fs / btrfs / free-space-tree.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2015 Facebook.  All rights reserved.
4  */
5
6 #include <linux/kernel.h>
7 #include <linux/sched/mm.h>
8 #include "ctree.h"
9 #include "disk-io.h"
10 #include "locking.h"
11 #include "free-space-tree.h"
12 #include "transaction.h"
13 #include "block-group.h"
14
15 static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
16                                         struct btrfs_block_group *block_group,
17                                         struct btrfs_path *path);
18
19 void set_free_space_tree_thresholds(struct btrfs_block_group *cache)
20 {
21         u32 bitmap_range;
22         size_t bitmap_size;
23         u64 num_bitmaps, total_bitmap_size;
24
25         if (WARN_ON(cache->length == 0))
26                 btrfs_warn(cache->fs_info, "block group %llu length is zero",
27                            cache->start);
28
29         /*
30          * We convert to bitmaps when the disk space required for using extents
31          * exceeds that required for using bitmaps.
32          */
33         bitmap_range = cache->fs_info->sectorsize * BTRFS_FREE_SPACE_BITMAP_BITS;
34         num_bitmaps = div_u64(cache->length + bitmap_range - 1, bitmap_range);
35         bitmap_size = sizeof(struct btrfs_item) + BTRFS_FREE_SPACE_BITMAP_SIZE;
36         total_bitmap_size = num_bitmaps * bitmap_size;
37         cache->bitmap_high_thresh = div_u64(total_bitmap_size,
38                                             sizeof(struct btrfs_item));
39
40         /*
41          * We allow for a small buffer between the high threshold and low
42          * threshold to avoid thrashing back and forth between the two formats.
43          */
44         if (cache->bitmap_high_thresh > 100)
45                 cache->bitmap_low_thresh = cache->bitmap_high_thresh - 100;
46         else
47                 cache->bitmap_low_thresh = 0;
48 }
49
50 static int add_new_free_space_info(struct btrfs_trans_handle *trans,
51                                    struct btrfs_block_group *block_group,
52                                    struct btrfs_path *path)
53 {
54         struct btrfs_root *root = trans->fs_info->free_space_root;
55         struct btrfs_free_space_info *info;
56         struct btrfs_key key;
57         struct extent_buffer *leaf;
58         int ret;
59
60         key.objectid = block_group->start;
61         key.type = BTRFS_FREE_SPACE_INFO_KEY;
62         key.offset = block_group->length;
63
64         ret = btrfs_insert_empty_item(trans, root, path, &key, sizeof(*info));
65         if (ret)
66                 goto out;
67
68         leaf = path->nodes[0];
69         info = btrfs_item_ptr(leaf, path->slots[0],
70                               struct btrfs_free_space_info);
71         btrfs_set_free_space_extent_count(leaf, info, 0);
72         btrfs_set_free_space_flags(leaf, info, 0);
73         btrfs_mark_buffer_dirty(leaf);
74
75         ret = 0;
76 out:
77         btrfs_release_path(path);
78         return ret;
79 }
80
81 EXPORT_FOR_TESTS
82 struct btrfs_free_space_info *search_free_space_info(
83                 struct btrfs_trans_handle *trans,
84                 struct btrfs_block_group *block_group,
85                 struct btrfs_path *path, int cow)
86 {
87         struct btrfs_fs_info *fs_info = block_group->fs_info;
88         struct btrfs_root *root = fs_info->free_space_root;
89         struct btrfs_key key;
90         int ret;
91
92         key.objectid = block_group->start;
93         key.type = BTRFS_FREE_SPACE_INFO_KEY;
94         key.offset = block_group->length;
95
96         ret = btrfs_search_slot(trans, root, &key, path, 0, cow);
97         if (ret < 0)
98                 return ERR_PTR(ret);
99         if (ret != 0) {
100                 btrfs_warn(fs_info, "missing free space info for %llu",
101                            block_group->start);
102                 ASSERT(0);
103                 return ERR_PTR(-ENOENT);
104         }
105
106         return btrfs_item_ptr(path->nodes[0], path->slots[0],
107                               struct btrfs_free_space_info);
108 }
109
110 /*
111  * btrfs_search_slot() but we're looking for the greatest key less than the
112  * passed key.
113  */
114 static int btrfs_search_prev_slot(struct btrfs_trans_handle *trans,
115                                   struct btrfs_root *root,
116                                   struct btrfs_key *key, struct btrfs_path *p,
117                                   int ins_len, int cow)
118 {
119         int ret;
120
121         ret = btrfs_search_slot(trans, root, key, p, ins_len, cow);
122         if (ret < 0)
123                 return ret;
124
125         if (ret == 0) {
126                 ASSERT(0);
127                 return -EIO;
128         }
129
130         if (p->slots[0] == 0) {
131                 ASSERT(0);
132                 return -EIO;
133         }
134         p->slots[0]--;
135
136         return 0;
137 }
138
139 static inline u32 free_space_bitmap_size(const struct btrfs_fs_info *fs_info,
140                                          u64 size)
141 {
142         return DIV_ROUND_UP(size >> fs_info->sectorsize_bits, BITS_PER_BYTE);
143 }
144
145 static unsigned long *alloc_bitmap(u32 bitmap_size)
146 {
147         unsigned long *ret;
148         unsigned int nofs_flag;
149         u32 bitmap_rounded_size = round_up(bitmap_size, sizeof(unsigned long));
150
151         /*
152          * GFP_NOFS doesn't work with kvmalloc(), but we really can't recurse
153          * into the filesystem as the free space bitmap can be modified in the
154          * critical section of a transaction commit.
155          *
156          * TODO: push the memalloc_nofs_{save,restore}() to the caller where we
157          * know that recursion is unsafe.
158          */
159         nofs_flag = memalloc_nofs_save();
160         ret = kvzalloc(bitmap_rounded_size, GFP_KERNEL);
161         memalloc_nofs_restore(nofs_flag);
162         return ret;
163 }
164
165 static void le_bitmap_set(unsigned long *map, unsigned int start, int len)
166 {
167         u8 *p = ((u8 *)map) + BIT_BYTE(start);
168         const unsigned int size = start + len;
169         int bits_to_set = BITS_PER_BYTE - (start % BITS_PER_BYTE);
170         u8 mask_to_set = BITMAP_FIRST_BYTE_MASK(start);
171
172         while (len - bits_to_set >= 0) {
173                 *p |= mask_to_set;
174                 len -= bits_to_set;
175                 bits_to_set = BITS_PER_BYTE;
176                 mask_to_set = ~0;
177                 p++;
178         }
179         if (len) {
180                 mask_to_set &= BITMAP_LAST_BYTE_MASK(size);
181                 *p |= mask_to_set;
182         }
183 }
184
185 EXPORT_FOR_TESTS
186 int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
187                                   struct btrfs_block_group *block_group,
188                                   struct btrfs_path *path)
189 {
190         struct btrfs_fs_info *fs_info = trans->fs_info;
191         struct btrfs_root *root = fs_info->free_space_root;
192         struct btrfs_free_space_info *info;
193         struct btrfs_key key, found_key;
194         struct extent_buffer *leaf;
195         unsigned long *bitmap;
196         char *bitmap_cursor;
197         u64 start, end;
198         u64 bitmap_range, i;
199         u32 bitmap_size, flags, expected_extent_count;
200         u32 extent_count = 0;
201         int done = 0, nr;
202         int ret;
203
204         bitmap_size = free_space_bitmap_size(fs_info, block_group->length);
205         bitmap = alloc_bitmap(bitmap_size);
206         if (!bitmap) {
207                 ret = -ENOMEM;
208                 goto out;
209         }
210
211         start = block_group->start;
212         end = block_group->start + block_group->length;
213
214         key.objectid = end - 1;
215         key.type = (u8)-1;
216         key.offset = (u64)-1;
217
218         while (!done) {
219                 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1);
220                 if (ret)
221                         goto out;
222
223                 leaf = path->nodes[0];
224                 nr = 0;
225                 path->slots[0]++;
226                 while (path->slots[0] > 0) {
227                         btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
228
229                         if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
230                                 ASSERT(found_key.objectid == block_group->start);
231                                 ASSERT(found_key.offset == block_group->length);
232                                 done = 1;
233                                 break;
234                         } else if (found_key.type == BTRFS_FREE_SPACE_EXTENT_KEY) {
235                                 u64 first, last;
236
237                                 ASSERT(found_key.objectid >= start);
238                                 ASSERT(found_key.objectid < end);
239                                 ASSERT(found_key.objectid + found_key.offset <= end);
240
241                                 first = div_u64(found_key.objectid - start,
242                                                 fs_info->sectorsize);
243                                 last = div_u64(found_key.objectid + found_key.offset - start,
244                                                fs_info->sectorsize);
245                                 le_bitmap_set(bitmap, first, last - first);
246
247                                 extent_count++;
248                                 nr++;
249                                 path->slots[0]--;
250                         } else {
251                                 ASSERT(0);
252                         }
253                 }
254
255                 ret = btrfs_del_items(trans, root, path, path->slots[0], nr);
256                 if (ret)
257                         goto out;
258                 btrfs_release_path(path);
259         }
260
261         info = search_free_space_info(trans, block_group, path, 1);
262         if (IS_ERR(info)) {
263                 ret = PTR_ERR(info);
264                 goto out;
265         }
266         leaf = path->nodes[0];
267         flags = btrfs_free_space_flags(leaf, info);
268         flags |= BTRFS_FREE_SPACE_USING_BITMAPS;
269         btrfs_set_free_space_flags(leaf, info, flags);
270         expected_extent_count = btrfs_free_space_extent_count(leaf, info);
271         btrfs_mark_buffer_dirty(leaf);
272         btrfs_release_path(path);
273
274         if (extent_count != expected_extent_count) {
275                 btrfs_err(fs_info,
276                           "incorrect extent count for %llu; counted %u, expected %u",
277                           block_group->start, extent_count,
278                           expected_extent_count);
279                 ASSERT(0);
280                 ret = -EIO;
281                 goto out;
282         }
283
284         bitmap_cursor = (char *)bitmap;
285         bitmap_range = fs_info->sectorsize * BTRFS_FREE_SPACE_BITMAP_BITS;
286         i = start;
287         while (i < end) {
288                 unsigned long ptr;
289                 u64 extent_size;
290                 u32 data_size;
291
292                 extent_size = min(end - i, bitmap_range);
293                 data_size = free_space_bitmap_size(fs_info, extent_size);
294
295                 key.objectid = i;
296                 key.type = BTRFS_FREE_SPACE_BITMAP_KEY;
297                 key.offset = extent_size;
298
299                 ret = btrfs_insert_empty_item(trans, root, path, &key,
300                                               data_size);
301                 if (ret)
302                         goto out;
303
304                 leaf = path->nodes[0];
305                 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
306                 write_extent_buffer(leaf, bitmap_cursor, ptr,
307                                     data_size);
308                 btrfs_mark_buffer_dirty(leaf);
309                 btrfs_release_path(path);
310
311                 i += extent_size;
312                 bitmap_cursor += data_size;
313         }
314
315         ret = 0;
316 out:
317         kvfree(bitmap);
318         if (ret)
319                 btrfs_abort_transaction(trans, ret);
320         return ret;
321 }
322
323 EXPORT_FOR_TESTS
324 int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
325                                   struct btrfs_block_group *block_group,
326                                   struct btrfs_path *path)
327 {
328         struct btrfs_fs_info *fs_info = trans->fs_info;
329         struct btrfs_root *root = fs_info->free_space_root;
330         struct btrfs_free_space_info *info;
331         struct btrfs_key key, found_key;
332         struct extent_buffer *leaf;
333         unsigned long *bitmap;
334         u64 start, end;
335         u32 bitmap_size, flags, expected_extent_count;
336         unsigned long nrbits, start_bit, end_bit;
337         u32 extent_count = 0;
338         int done = 0, nr;
339         int ret;
340
341         bitmap_size = free_space_bitmap_size(fs_info, block_group->length);
342         bitmap = alloc_bitmap(bitmap_size);
343         if (!bitmap) {
344                 ret = -ENOMEM;
345                 goto out;
346         }
347
348         start = block_group->start;
349         end = block_group->start + block_group->length;
350
351         key.objectid = end - 1;
352         key.type = (u8)-1;
353         key.offset = (u64)-1;
354
355         while (!done) {
356                 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1);
357                 if (ret)
358                         goto out;
359
360                 leaf = path->nodes[0];
361                 nr = 0;
362                 path->slots[0]++;
363                 while (path->slots[0] > 0) {
364                         btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
365
366                         if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
367                                 ASSERT(found_key.objectid == block_group->start);
368                                 ASSERT(found_key.offset == block_group->length);
369                                 done = 1;
370                                 break;
371                         } else if (found_key.type == BTRFS_FREE_SPACE_BITMAP_KEY) {
372                                 unsigned long ptr;
373                                 char *bitmap_cursor;
374                                 u32 bitmap_pos, data_size;
375
376                                 ASSERT(found_key.objectid >= start);
377                                 ASSERT(found_key.objectid < end);
378                                 ASSERT(found_key.objectid + found_key.offset <= end);
379
380                                 bitmap_pos = div_u64(found_key.objectid - start,
381                                                      fs_info->sectorsize *
382                                                      BITS_PER_BYTE);
383                                 bitmap_cursor = ((char *)bitmap) + bitmap_pos;
384                                 data_size = free_space_bitmap_size(fs_info,
385                                                                 found_key.offset);
386
387                                 ptr = btrfs_item_ptr_offset(leaf, path->slots[0] - 1);
388                                 read_extent_buffer(leaf, bitmap_cursor, ptr,
389                                                    data_size);
390
391                                 nr++;
392                                 path->slots[0]--;
393                         } else {
394                                 ASSERT(0);
395                         }
396                 }
397
398                 ret = btrfs_del_items(trans, root, path, path->slots[0], nr);
399                 if (ret)
400                         goto out;
401                 btrfs_release_path(path);
402         }
403
404         info = search_free_space_info(trans, block_group, path, 1);
405         if (IS_ERR(info)) {
406                 ret = PTR_ERR(info);
407                 goto out;
408         }
409         leaf = path->nodes[0];
410         flags = btrfs_free_space_flags(leaf, info);
411         flags &= ~BTRFS_FREE_SPACE_USING_BITMAPS;
412         btrfs_set_free_space_flags(leaf, info, flags);
413         expected_extent_count = btrfs_free_space_extent_count(leaf, info);
414         btrfs_mark_buffer_dirty(leaf);
415         btrfs_release_path(path);
416
417         nrbits = block_group->length >> block_group->fs_info->sectorsize_bits;
418         start_bit = find_next_bit_le(bitmap, nrbits, 0);
419
420         while (start_bit < nrbits) {
421                 end_bit = find_next_zero_bit_le(bitmap, nrbits, start_bit);
422                 ASSERT(start_bit < end_bit);
423
424                 key.objectid = start + start_bit * block_group->fs_info->sectorsize;
425                 key.type = BTRFS_FREE_SPACE_EXTENT_KEY;
426                 key.offset = (end_bit - start_bit) * block_group->fs_info->sectorsize;
427
428                 ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
429                 if (ret)
430                         goto out;
431                 btrfs_release_path(path);
432
433                 extent_count++;
434
435                 start_bit = find_next_bit_le(bitmap, nrbits, end_bit);
436         }
437
438         if (extent_count != expected_extent_count) {
439                 btrfs_err(fs_info,
440                           "incorrect extent count for %llu; counted %u, expected %u",
441                           block_group->start, extent_count,
442                           expected_extent_count);
443                 ASSERT(0);
444                 ret = -EIO;
445                 goto out;
446         }
447
448         ret = 0;
449 out:
450         kvfree(bitmap);
451         if (ret)
452                 btrfs_abort_transaction(trans, ret);
453         return ret;
454 }
455
456 static int update_free_space_extent_count(struct btrfs_trans_handle *trans,
457                                           struct btrfs_block_group *block_group,
458                                           struct btrfs_path *path,
459                                           int new_extents)
460 {
461         struct btrfs_free_space_info *info;
462         u32 flags;
463         u32 extent_count;
464         int ret = 0;
465
466         if (new_extents == 0)
467                 return 0;
468
469         info = search_free_space_info(trans, block_group, path, 1);
470         if (IS_ERR(info)) {
471                 ret = PTR_ERR(info);
472                 goto out;
473         }
474         flags = btrfs_free_space_flags(path->nodes[0], info);
475         extent_count = btrfs_free_space_extent_count(path->nodes[0], info);
476
477         extent_count += new_extents;
478         btrfs_set_free_space_extent_count(path->nodes[0], info, extent_count);
479         btrfs_mark_buffer_dirty(path->nodes[0]);
480         btrfs_release_path(path);
481
482         if (!(flags & BTRFS_FREE_SPACE_USING_BITMAPS) &&
483             extent_count > block_group->bitmap_high_thresh) {
484                 ret = convert_free_space_to_bitmaps(trans, block_group, path);
485         } else if ((flags & BTRFS_FREE_SPACE_USING_BITMAPS) &&
486                    extent_count < block_group->bitmap_low_thresh) {
487                 ret = convert_free_space_to_extents(trans, block_group, path);
488         }
489
490 out:
491         return ret;
492 }
493
494 EXPORT_FOR_TESTS
495 int free_space_test_bit(struct btrfs_block_group *block_group,
496                         struct btrfs_path *path, u64 offset)
497 {
498         struct extent_buffer *leaf;
499         struct btrfs_key key;
500         u64 found_start, found_end;
501         unsigned long ptr, i;
502
503         leaf = path->nodes[0];
504         btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
505         ASSERT(key.type == BTRFS_FREE_SPACE_BITMAP_KEY);
506
507         found_start = key.objectid;
508         found_end = key.objectid + key.offset;
509         ASSERT(offset >= found_start && offset < found_end);
510
511         ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
512         i = div_u64(offset - found_start,
513                     block_group->fs_info->sectorsize);
514         return !!extent_buffer_test_bit(leaf, ptr, i);
515 }
516
517 static void free_space_set_bits(struct btrfs_block_group *block_group,
518                                 struct btrfs_path *path, u64 *start, u64 *size,
519                                 int bit)
520 {
521         struct btrfs_fs_info *fs_info = block_group->fs_info;
522         struct extent_buffer *leaf;
523         struct btrfs_key key;
524         u64 end = *start + *size;
525         u64 found_start, found_end;
526         unsigned long ptr, first, last;
527
528         leaf = path->nodes[0];
529         btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
530         ASSERT(key.type == BTRFS_FREE_SPACE_BITMAP_KEY);
531
532         found_start = key.objectid;
533         found_end = key.objectid + key.offset;
534         ASSERT(*start >= found_start && *start < found_end);
535         ASSERT(end > found_start);
536
537         if (end > found_end)
538                 end = found_end;
539
540         ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
541         first = (*start - found_start) >> fs_info->sectorsize_bits;
542         last = (end - found_start) >> fs_info->sectorsize_bits;
543         if (bit)
544                 extent_buffer_bitmap_set(leaf, ptr, first, last - first);
545         else
546                 extent_buffer_bitmap_clear(leaf, ptr, first, last - first);
547         btrfs_mark_buffer_dirty(leaf);
548
549         *size -= end - *start;
550         *start = end;
551 }
552
553 /*
554  * We can't use btrfs_next_item() in modify_free_space_bitmap() because
555  * btrfs_next_leaf() doesn't get the path for writing. We can forgo the fancy
556  * tree walking in btrfs_next_leaf() anyways because we know exactly what we're
557  * looking for.
558  */
559 static int free_space_next_bitmap(struct btrfs_trans_handle *trans,
560                                   struct btrfs_root *root, struct btrfs_path *p)
561 {
562         struct btrfs_key key;
563
564         if (p->slots[0] + 1 < btrfs_header_nritems(p->nodes[0])) {
565                 p->slots[0]++;
566                 return 0;
567         }
568
569         btrfs_item_key_to_cpu(p->nodes[0], &key, p->slots[0]);
570         btrfs_release_path(p);
571
572         key.objectid += key.offset;
573         key.type = (u8)-1;
574         key.offset = (u64)-1;
575
576         return btrfs_search_prev_slot(trans, root, &key, p, 0, 1);
577 }
578
579 /*
580  * If remove is 1, then we are removing free space, thus clearing bits in the
581  * bitmap. If remove is 0, then we are adding free space, thus setting bits in
582  * the bitmap.
583  */
584 static int modify_free_space_bitmap(struct btrfs_trans_handle *trans,
585                                     struct btrfs_block_group *block_group,
586                                     struct btrfs_path *path,
587                                     u64 start, u64 size, int remove)
588 {
589         struct btrfs_root *root = block_group->fs_info->free_space_root;
590         struct btrfs_key key;
591         u64 end = start + size;
592         u64 cur_start, cur_size;
593         int prev_bit, next_bit;
594         int new_extents;
595         int ret;
596
597         /*
598          * Read the bit for the block immediately before the extent of space if
599          * that block is within the block group.
600          */
601         if (start > block_group->start) {
602                 u64 prev_block = start - block_group->fs_info->sectorsize;
603
604                 key.objectid = prev_block;
605                 key.type = (u8)-1;
606                 key.offset = (u64)-1;
607
608                 ret = btrfs_search_prev_slot(trans, root, &key, path, 0, 1);
609                 if (ret)
610                         goto out;
611
612                 prev_bit = free_space_test_bit(block_group, path, prev_block);
613
614                 /* The previous block may have been in the previous bitmap. */
615                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
616                 if (start >= key.objectid + key.offset) {
617                         ret = free_space_next_bitmap(trans, root, path);
618                         if (ret)
619                                 goto out;
620                 }
621         } else {
622                 key.objectid = start;
623                 key.type = (u8)-1;
624                 key.offset = (u64)-1;
625
626                 ret = btrfs_search_prev_slot(trans, root, &key, path, 0, 1);
627                 if (ret)
628                         goto out;
629
630                 prev_bit = -1;
631         }
632
633         /*
634          * Iterate over all of the bitmaps overlapped by the extent of space,
635          * clearing/setting bits as required.
636          */
637         cur_start = start;
638         cur_size = size;
639         while (1) {
640                 free_space_set_bits(block_group, path, &cur_start, &cur_size,
641                                     !remove);
642                 if (cur_size == 0)
643                         break;
644                 ret = free_space_next_bitmap(trans, root, path);
645                 if (ret)
646                         goto out;
647         }
648
649         /*
650          * Read the bit for the block immediately after the extent of space if
651          * that block is within the block group.
652          */
653         if (end < block_group->start + block_group->length) {
654                 /* The next block may be in the next bitmap. */
655                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
656                 if (end >= key.objectid + key.offset) {
657                         ret = free_space_next_bitmap(trans, root, path);
658                         if (ret)
659                                 goto out;
660                 }
661
662                 next_bit = free_space_test_bit(block_group, path, end);
663         } else {
664                 next_bit = -1;
665         }
666
667         if (remove) {
668                 new_extents = -1;
669                 if (prev_bit == 1) {
670                         /* Leftover on the left. */
671                         new_extents++;
672                 }
673                 if (next_bit == 1) {
674                         /* Leftover on the right. */
675                         new_extents++;
676                 }
677         } else {
678                 new_extents = 1;
679                 if (prev_bit == 1) {
680                         /* Merging with neighbor on the left. */
681                         new_extents--;
682                 }
683                 if (next_bit == 1) {
684                         /* Merging with neighbor on the right. */
685                         new_extents--;
686                 }
687         }
688
689         btrfs_release_path(path);
690         ret = update_free_space_extent_count(trans, block_group, path,
691                                              new_extents);
692
693 out:
694         return ret;
695 }
696
697 static int remove_free_space_extent(struct btrfs_trans_handle *trans,
698                                     struct btrfs_block_group *block_group,
699                                     struct btrfs_path *path,
700                                     u64 start, u64 size)
701 {
702         struct btrfs_root *root = trans->fs_info->free_space_root;
703         struct btrfs_key key;
704         u64 found_start, found_end;
705         u64 end = start + size;
706         int new_extents = -1;
707         int ret;
708
709         key.objectid = start;
710         key.type = (u8)-1;
711         key.offset = (u64)-1;
712
713         ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1);
714         if (ret)
715                 goto out;
716
717         btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
718
719         ASSERT(key.type == BTRFS_FREE_SPACE_EXTENT_KEY);
720
721         found_start = key.objectid;
722         found_end = key.objectid + key.offset;
723         ASSERT(start >= found_start && end <= found_end);
724
725         /*
726          * Okay, now that we've found the free space extent which contains the
727          * free space that we are removing, there are four cases:
728          *
729          * 1. We're using the whole extent: delete the key we found and
730          * decrement the free space extent count.
731          * 2. We are using part of the extent starting at the beginning: delete
732          * the key we found and insert a new key representing the leftover at
733          * the end. There is no net change in the number of extents.
734          * 3. We are using part of the extent ending at the end: delete the key
735          * we found and insert a new key representing the leftover at the
736          * beginning. There is no net change in the number of extents.
737          * 4. We are using part of the extent in the middle: delete the key we
738          * found and insert two new keys representing the leftovers on each
739          * side. Where we used to have one extent, we now have two, so increment
740          * the extent count. We may need to convert the block group to bitmaps
741          * as a result.
742          */
743
744         /* Delete the existing key (cases 1-4). */
745         ret = btrfs_del_item(trans, root, path);
746         if (ret)
747                 goto out;
748
749         /* Add a key for leftovers at the beginning (cases 3 and 4). */
750         if (start > found_start) {
751                 key.objectid = found_start;
752                 key.type = BTRFS_FREE_SPACE_EXTENT_KEY;
753                 key.offset = start - found_start;
754
755                 btrfs_release_path(path);
756                 ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
757                 if (ret)
758                         goto out;
759                 new_extents++;
760         }
761
762         /* Add a key for leftovers at the end (cases 2 and 4). */
763         if (end < found_end) {
764                 key.objectid = end;
765                 key.type = BTRFS_FREE_SPACE_EXTENT_KEY;
766                 key.offset = found_end - end;
767
768                 btrfs_release_path(path);
769                 ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
770                 if (ret)
771                         goto out;
772                 new_extents++;
773         }
774
775         btrfs_release_path(path);
776         ret = update_free_space_extent_count(trans, block_group, path,
777                                              new_extents);
778
779 out:
780         return ret;
781 }
782
783 EXPORT_FOR_TESTS
784 int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
785                                   struct btrfs_block_group *block_group,
786                                   struct btrfs_path *path, u64 start, u64 size)
787 {
788         struct btrfs_free_space_info *info;
789         u32 flags;
790         int ret;
791
792         if (block_group->needs_free_space) {
793                 ret = __add_block_group_free_space(trans, block_group, path);
794                 if (ret)
795                         return ret;
796         }
797
798         info = search_free_space_info(NULL, block_group, path, 0);
799         if (IS_ERR(info))
800                 return PTR_ERR(info);
801         flags = btrfs_free_space_flags(path->nodes[0], info);
802         btrfs_release_path(path);
803
804         if (flags & BTRFS_FREE_SPACE_USING_BITMAPS) {
805                 return modify_free_space_bitmap(trans, block_group, path,
806                                                 start, size, 1);
807         } else {
808                 return remove_free_space_extent(trans, block_group, path,
809                                                 start, size);
810         }
811 }
812
813 int remove_from_free_space_tree(struct btrfs_trans_handle *trans,
814                                 u64 start, u64 size)
815 {
816         struct btrfs_block_group *block_group;
817         struct btrfs_path *path;
818         int ret;
819
820         if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE))
821                 return 0;
822
823         path = btrfs_alloc_path();
824         if (!path) {
825                 ret = -ENOMEM;
826                 goto out;
827         }
828
829         block_group = btrfs_lookup_block_group(trans->fs_info, start);
830         if (!block_group) {
831                 ASSERT(0);
832                 ret = -ENOENT;
833                 goto out;
834         }
835
836         mutex_lock(&block_group->free_space_lock);
837         ret = __remove_from_free_space_tree(trans, block_group, path, start,
838                                             size);
839         mutex_unlock(&block_group->free_space_lock);
840
841         btrfs_put_block_group(block_group);
842 out:
843         btrfs_free_path(path);
844         if (ret)
845                 btrfs_abort_transaction(trans, ret);
846         return ret;
847 }
848
849 static int add_free_space_extent(struct btrfs_trans_handle *trans,
850                                  struct btrfs_block_group *block_group,
851                                  struct btrfs_path *path,
852                                  u64 start, u64 size)
853 {
854         struct btrfs_root *root = trans->fs_info->free_space_root;
855         struct btrfs_key key, new_key;
856         u64 found_start, found_end;
857         u64 end = start + size;
858         int new_extents = 1;
859         int ret;
860
861         /*
862          * We are adding a new extent of free space, but we need to merge
863          * extents. There are four cases here:
864          *
865          * 1. The new extent does not have any immediate neighbors to merge
866          * with: add the new key and increment the free space extent count. We
867          * may need to convert the block group to bitmaps as a result.
868          * 2. The new extent has an immediate neighbor before it: remove the
869          * previous key and insert a new key combining both of them. There is no
870          * net change in the number of extents.
871          * 3. The new extent has an immediate neighbor after it: remove the next
872          * key and insert a new key combining both of them. There is no net
873          * change in the number of extents.
874          * 4. The new extent has immediate neighbors on both sides: remove both
875          * of the keys and insert a new key combining all of them. Where we used
876          * to have two extents, we now have one, so decrement the extent count.
877          */
878
879         new_key.objectid = start;
880         new_key.type = BTRFS_FREE_SPACE_EXTENT_KEY;
881         new_key.offset = size;
882
883         /* Search for a neighbor on the left. */
884         if (start == block_group->start)
885                 goto right;
886         key.objectid = start - 1;
887         key.type = (u8)-1;
888         key.offset = (u64)-1;
889
890         ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1);
891         if (ret)
892                 goto out;
893
894         btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
895
896         if (key.type != BTRFS_FREE_SPACE_EXTENT_KEY) {
897                 ASSERT(key.type == BTRFS_FREE_SPACE_INFO_KEY);
898                 btrfs_release_path(path);
899                 goto right;
900         }
901
902         found_start = key.objectid;
903         found_end = key.objectid + key.offset;
904         ASSERT(found_start >= block_group->start &&
905                found_end > block_group->start);
906         ASSERT(found_start < start && found_end <= start);
907
908         /*
909          * Delete the neighbor on the left and absorb it into the new key (cases
910          * 2 and 4).
911          */
912         if (found_end == start) {
913                 ret = btrfs_del_item(trans, root, path);
914                 if (ret)
915                         goto out;
916                 new_key.objectid = found_start;
917                 new_key.offset += key.offset;
918                 new_extents--;
919         }
920         btrfs_release_path(path);
921
922 right:
923         /* Search for a neighbor on the right. */
924         if (end == block_group->start + block_group->length)
925                 goto insert;
926         key.objectid = end;
927         key.type = (u8)-1;
928         key.offset = (u64)-1;
929
930         ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1);
931         if (ret)
932                 goto out;
933
934         btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
935
936         if (key.type != BTRFS_FREE_SPACE_EXTENT_KEY) {
937                 ASSERT(key.type == BTRFS_FREE_SPACE_INFO_KEY);
938                 btrfs_release_path(path);
939                 goto insert;
940         }
941
942         found_start = key.objectid;
943         found_end = key.objectid + key.offset;
944         ASSERT(found_start >= block_group->start &&
945                found_end > block_group->start);
946         ASSERT((found_start < start && found_end <= start) ||
947                (found_start >= end && found_end > end));
948
949         /*
950          * Delete the neighbor on the right and absorb it into the new key
951          * (cases 3 and 4).
952          */
953         if (found_start == end) {
954                 ret = btrfs_del_item(trans, root, path);
955                 if (ret)
956                         goto out;
957                 new_key.offset += key.offset;
958                 new_extents--;
959         }
960         btrfs_release_path(path);
961
962 insert:
963         /* Insert the new key (cases 1-4). */
964         ret = btrfs_insert_empty_item(trans, root, path, &new_key, 0);
965         if (ret)
966                 goto out;
967
968         btrfs_release_path(path);
969         ret = update_free_space_extent_count(trans, block_group, path,
970                                              new_extents);
971
972 out:
973         return ret;
974 }
975
976 EXPORT_FOR_TESTS
977 int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
978                              struct btrfs_block_group *block_group,
979                              struct btrfs_path *path, u64 start, u64 size)
980 {
981         struct btrfs_free_space_info *info;
982         u32 flags;
983         int ret;
984
985         if (block_group->needs_free_space) {
986                 ret = __add_block_group_free_space(trans, block_group, path);
987                 if (ret)
988                         return ret;
989         }
990
991         info = search_free_space_info(NULL, block_group, path, 0);
992         if (IS_ERR(info))
993                 return PTR_ERR(info);
994         flags = btrfs_free_space_flags(path->nodes[0], info);
995         btrfs_release_path(path);
996
997         if (flags & BTRFS_FREE_SPACE_USING_BITMAPS) {
998                 return modify_free_space_bitmap(trans, block_group, path,
999                                                 start, size, 0);
1000         } else {
1001                 return add_free_space_extent(trans, block_group, path, start,
1002                                              size);
1003         }
1004 }
1005
1006 int add_to_free_space_tree(struct btrfs_trans_handle *trans,
1007                            u64 start, u64 size)
1008 {
1009         struct btrfs_block_group *block_group;
1010         struct btrfs_path *path;
1011         int ret;
1012
1013         if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE))
1014                 return 0;
1015
1016         path = btrfs_alloc_path();
1017         if (!path) {
1018                 ret = -ENOMEM;
1019                 goto out;
1020         }
1021
1022         block_group = btrfs_lookup_block_group(trans->fs_info, start);
1023         if (!block_group) {
1024                 ASSERT(0);
1025                 ret = -ENOENT;
1026                 goto out;
1027         }
1028
1029         mutex_lock(&block_group->free_space_lock);
1030         ret = __add_to_free_space_tree(trans, block_group, path, start, size);
1031         mutex_unlock(&block_group->free_space_lock);
1032
1033         btrfs_put_block_group(block_group);
1034 out:
1035         btrfs_free_path(path);
1036         if (ret)
1037                 btrfs_abort_transaction(trans, ret);
1038         return ret;
1039 }
1040
1041 /*
1042  * Populate the free space tree by walking the extent tree. Operations on the
1043  * extent tree that happen as a result of writes to the free space tree will go
1044  * through the normal add/remove hooks.
1045  */
1046 static int populate_free_space_tree(struct btrfs_trans_handle *trans,
1047                                     struct btrfs_block_group *block_group)
1048 {
1049         struct btrfs_root *extent_root = trans->fs_info->extent_root;
1050         struct btrfs_path *path, *path2;
1051         struct btrfs_key key;
1052         u64 start, end;
1053         int ret;
1054
1055         path = btrfs_alloc_path();
1056         if (!path)
1057                 return -ENOMEM;
1058         path->reada = READA_FORWARD;
1059
1060         path2 = btrfs_alloc_path();
1061         if (!path2) {
1062                 btrfs_free_path(path);
1063                 return -ENOMEM;
1064         }
1065
1066         ret = add_new_free_space_info(trans, block_group, path2);
1067         if (ret)
1068                 goto out;
1069
1070         mutex_lock(&block_group->free_space_lock);
1071
1072         /*
1073          * Iterate through all of the extent and metadata items in this block
1074          * group, adding the free space between them and the free space at the
1075          * end. Note that EXTENT_ITEM and METADATA_ITEM are less than
1076          * BLOCK_GROUP_ITEM, so an extent may precede the block group that it's
1077          * contained in.
1078          */
1079         key.objectid = block_group->start;
1080         key.type = BTRFS_EXTENT_ITEM_KEY;
1081         key.offset = 0;
1082
1083         ret = btrfs_search_slot_for_read(extent_root, &key, path, 1, 0);
1084         if (ret < 0)
1085                 goto out_locked;
1086         ASSERT(ret == 0);
1087
1088         start = block_group->start;
1089         end = block_group->start + block_group->length;
1090         while (1) {
1091                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
1092
1093                 if (key.type == BTRFS_EXTENT_ITEM_KEY ||
1094                     key.type == BTRFS_METADATA_ITEM_KEY) {
1095                         if (key.objectid >= end)
1096                                 break;
1097
1098                         if (start < key.objectid) {
1099                                 ret = __add_to_free_space_tree(trans,
1100                                                                block_group,
1101                                                                path2, start,
1102                                                                key.objectid -
1103                                                                start);
1104                                 if (ret)
1105                                         goto out_locked;
1106                         }
1107                         start = key.objectid;
1108                         if (key.type == BTRFS_METADATA_ITEM_KEY)
1109                                 start += trans->fs_info->nodesize;
1110                         else
1111                                 start += key.offset;
1112                 } else if (key.type == BTRFS_BLOCK_GROUP_ITEM_KEY) {
1113                         if (key.objectid != block_group->start)
1114                                 break;
1115                 }
1116
1117                 ret = btrfs_next_item(extent_root, path);
1118                 if (ret < 0)
1119                         goto out_locked;
1120                 if (ret)
1121                         break;
1122         }
1123         if (start < end) {
1124                 ret = __add_to_free_space_tree(trans, block_group, path2,
1125                                                start, end - start);
1126                 if (ret)
1127                         goto out_locked;
1128         }
1129
1130         ret = 0;
1131 out_locked:
1132         mutex_unlock(&block_group->free_space_lock);
1133 out:
1134         btrfs_free_path(path2);
1135         btrfs_free_path(path);
1136         return ret;
1137 }
1138
1139 int btrfs_create_free_space_tree(struct btrfs_fs_info *fs_info)
1140 {
1141         struct btrfs_trans_handle *trans;
1142         struct btrfs_root *tree_root = fs_info->tree_root;
1143         struct btrfs_root *free_space_root;
1144         struct btrfs_block_group *block_group;
1145         struct rb_node *node;
1146         int ret;
1147
1148         trans = btrfs_start_transaction(tree_root, 0);
1149         if (IS_ERR(trans))
1150                 return PTR_ERR(trans);
1151
1152         set_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags);
1153         free_space_root = btrfs_create_tree(trans,
1154                                             BTRFS_FREE_SPACE_TREE_OBJECTID);
1155         if (IS_ERR(free_space_root)) {
1156                 ret = PTR_ERR(free_space_root);
1157                 goto abort;
1158         }
1159         fs_info->free_space_root = free_space_root;
1160
1161         node = rb_first(&fs_info->block_group_cache_tree);
1162         while (node) {
1163                 block_group = rb_entry(node, struct btrfs_block_group,
1164                                        cache_node);
1165                 ret = populate_free_space_tree(trans, block_group);
1166                 if (ret)
1167                         goto abort;
1168                 node = rb_next(node);
1169         }
1170
1171         btrfs_set_fs_compat_ro(fs_info, FREE_SPACE_TREE);
1172         btrfs_set_fs_compat_ro(fs_info, FREE_SPACE_TREE_VALID);
1173         clear_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags);
1174
1175         return btrfs_commit_transaction(trans);
1176
1177 abort:
1178         clear_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags);
1179         btrfs_abort_transaction(trans, ret);
1180         btrfs_end_transaction(trans);
1181         return ret;
1182 }
1183
1184 static int clear_free_space_tree(struct btrfs_trans_handle *trans,
1185                                  struct btrfs_root *root)
1186 {
1187         struct btrfs_path *path;
1188         struct btrfs_key key;
1189         int nr;
1190         int ret;
1191
1192         path = btrfs_alloc_path();
1193         if (!path)
1194                 return -ENOMEM;
1195
1196         key.objectid = 0;
1197         key.type = 0;
1198         key.offset = 0;
1199
1200         while (1) {
1201                 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1202                 if (ret < 0)
1203                         goto out;
1204
1205                 nr = btrfs_header_nritems(path->nodes[0]);
1206                 if (!nr)
1207                         break;
1208
1209                 path->slots[0] = 0;
1210                 ret = btrfs_del_items(trans, root, path, 0, nr);
1211                 if (ret)
1212                         goto out;
1213
1214                 btrfs_release_path(path);
1215         }
1216
1217         ret = 0;
1218 out:
1219         btrfs_free_path(path);
1220         return ret;
1221 }
1222
1223 int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info)
1224 {
1225         struct btrfs_trans_handle *trans;
1226         struct btrfs_root *tree_root = fs_info->tree_root;
1227         struct btrfs_root *free_space_root = fs_info->free_space_root;
1228         int ret;
1229
1230         trans = btrfs_start_transaction(tree_root, 0);
1231         if (IS_ERR(trans))
1232                 return PTR_ERR(trans);
1233
1234         btrfs_clear_fs_compat_ro(fs_info, FREE_SPACE_TREE);
1235         btrfs_clear_fs_compat_ro(fs_info, FREE_SPACE_TREE_VALID);
1236         fs_info->free_space_root = NULL;
1237
1238         ret = clear_free_space_tree(trans, free_space_root);
1239         if (ret)
1240                 goto abort;
1241
1242         ret = btrfs_del_root(trans, &free_space_root->root_key);
1243         if (ret)
1244                 goto abort;
1245
1246         list_del(&free_space_root->dirty_list);
1247
1248         btrfs_tree_lock(free_space_root->node);
1249         btrfs_clean_tree_block(free_space_root->node);
1250         btrfs_tree_unlock(free_space_root->node);
1251         btrfs_free_tree_block(trans, free_space_root, free_space_root->node,
1252                               0, 1);
1253
1254         btrfs_put_root(free_space_root);
1255
1256         return btrfs_commit_transaction(trans);
1257
1258 abort:
1259         btrfs_abort_transaction(trans, ret);
1260         btrfs_end_transaction(trans);
1261         return ret;
1262 }
1263
1264 static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
1265                                         struct btrfs_block_group *block_group,
1266                                         struct btrfs_path *path)
1267 {
1268         int ret;
1269
1270         block_group->needs_free_space = 0;
1271
1272         ret = add_new_free_space_info(trans, block_group, path);
1273         if (ret)
1274                 return ret;
1275
1276         return __add_to_free_space_tree(trans, block_group, path,
1277                                         block_group->start,
1278                                         block_group->length);
1279 }
1280
1281 int add_block_group_free_space(struct btrfs_trans_handle *trans,
1282                                struct btrfs_block_group *block_group)
1283 {
1284         struct btrfs_fs_info *fs_info = trans->fs_info;
1285         struct btrfs_path *path = NULL;
1286         int ret = 0;
1287
1288         if (!btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE))
1289                 return 0;
1290
1291         mutex_lock(&block_group->free_space_lock);
1292         if (!block_group->needs_free_space)
1293                 goto out;
1294
1295         path = btrfs_alloc_path();
1296         if (!path) {
1297                 ret = -ENOMEM;
1298                 goto out;
1299         }
1300
1301         ret = __add_block_group_free_space(trans, block_group, path);
1302
1303 out:
1304         btrfs_free_path(path);
1305         mutex_unlock(&block_group->free_space_lock);
1306         if (ret)
1307                 btrfs_abort_transaction(trans, ret);
1308         return ret;
1309 }
1310
1311 int remove_block_group_free_space(struct btrfs_trans_handle *trans,
1312                                   struct btrfs_block_group *block_group)
1313 {
1314         struct btrfs_root *root = trans->fs_info->free_space_root;
1315         struct btrfs_path *path;
1316         struct btrfs_key key, found_key;
1317         struct extent_buffer *leaf;
1318         u64 start, end;
1319         int done = 0, nr;
1320         int ret;
1321
1322         if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE))
1323                 return 0;
1324
1325         if (block_group->needs_free_space) {
1326                 /* We never added this block group to the free space tree. */
1327                 return 0;
1328         }
1329
1330         path = btrfs_alloc_path();
1331         if (!path) {
1332                 ret = -ENOMEM;
1333                 goto out;
1334         }
1335
1336         start = block_group->start;
1337         end = block_group->start + block_group->length;
1338
1339         key.objectid = end - 1;
1340         key.type = (u8)-1;
1341         key.offset = (u64)-1;
1342
1343         while (!done) {
1344                 ret = btrfs_search_prev_slot(trans, root, &key, path, -1, 1);
1345                 if (ret)
1346                         goto out;
1347
1348                 leaf = path->nodes[0];
1349                 nr = 0;
1350                 path->slots[0]++;
1351                 while (path->slots[0] > 0) {
1352                         btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
1353
1354                         if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
1355                                 ASSERT(found_key.objectid == block_group->start);
1356                                 ASSERT(found_key.offset == block_group->length);
1357                                 done = 1;
1358                                 nr++;
1359                                 path->slots[0]--;
1360                                 break;
1361                         } else if (found_key.type == BTRFS_FREE_SPACE_EXTENT_KEY ||
1362                                    found_key.type == BTRFS_FREE_SPACE_BITMAP_KEY) {
1363                                 ASSERT(found_key.objectid >= start);
1364                                 ASSERT(found_key.objectid < end);
1365                                 ASSERT(found_key.objectid + found_key.offset <= end);
1366                                 nr++;
1367                                 path->slots[0]--;
1368                         } else {
1369                                 ASSERT(0);
1370                         }
1371                 }
1372
1373                 ret = btrfs_del_items(trans, root, path, path->slots[0], nr);
1374                 if (ret)
1375                         goto out;
1376                 btrfs_release_path(path);
1377         }
1378
1379         ret = 0;
1380 out:
1381         btrfs_free_path(path);
1382         if (ret)
1383                 btrfs_abort_transaction(trans, ret);
1384         return ret;
1385 }
1386
1387 static int load_free_space_bitmaps(struct btrfs_caching_control *caching_ctl,
1388                                    struct btrfs_path *path,
1389                                    u32 expected_extent_count)
1390 {
1391         struct btrfs_block_group *block_group;
1392         struct btrfs_fs_info *fs_info;
1393         struct btrfs_root *root;
1394         struct btrfs_key key;
1395         int prev_bit = 0, bit;
1396         /* Initialize to silence GCC. */
1397         u64 extent_start = 0;
1398         u64 end, offset;
1399         u64 total_found = 0;
1400         u32 extent_count = 0;
1401         int ret;
1402
1403         block_group = caching_ctl->block_group;
1404         fs_info = block_group->fs_info;
1405         root = fs_info->free_space_root;
1406
1407         end = block_group->start + block_group->length;
1408
1409         while (1) {
1410                 ret = btrfs_next_item(root, path);
1411                 if (ret < 0)
1412                         goto out;
1413                 if (ret)
1414                         break;
1415
1416                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
1417
1418                 if (key.type == BTRFS_FREE_SPACE_INFO_KEY)
1419                         break;
1420
1421                 ASSERT(key.type == BTRFS_FREE_SPACE_BITMAP_KEY);
1422                 ASSERT(key.objectid < end && key.objectid + key.offset <= end);
1423
1424                 caching_ctl->progress = key.objectid;
1425
1426                 offset = key.objectid;
1427                 while (offset < key.objectid + key.offset) {
1428                         bit = free_space_test_bit(block_group, path, offset);
1429                         if (prev_bit == 0 && bit == 1) {
1430                                 extent_start = offset;
1431                         } else if (prev_bit == 1 && bit == 0) {
1432                                 total_found += add_new_free_space(block_group,
1433                                                                   extent_start,
1434                                                                   offset);
1435                                 if (total_found > CACHING_CTL_WAKE_UP) {
1436                                         total_found = 0;
1437                                         wake_up(&caching_ctl->wait);
1438                                 }
1439                                 extent_count++;
1440                         }
1441                         prev_bit = bit;
1442                         offset += fs_info->sectorsize;
1443                 }
1444         }
1445         if (prev_bit == 1) {
1446                 total_found += add_new_free_space(block_group, extent_start,
1447                                                   end);
1448                 extent_count++;
1449         }
1450
1451         if (extent_count != expected_extent_count) {
1452                 btrfs_err(fs_info,
1453                           "incorrect extent count for %llu; counted %u, expected %u",
1454                           block_group->start, extent_count,
1455                           expected_extent_count);
1456                 ASSERT(0);
1457                 ret = -EIO;
1458                 goto out;
1459         }
1460
1461         caching_ctl->progress = (u64)-1;
1462
1463         ret = 0;
1464 out:
1465         return ret;
1466 }
1467
1468 static int load_free_space_extents(struct btrfs_caching_control *caching_ctl,
1469                                    struct btrfs_path *path,
1470                                    u32 expected_extent_count)
1471 {
1472         struct btrfs_block_group *block_group;
1473         struct btrfs_fs_info *fs_info;
1474         struct btrfs_root *root;
1475         struct btrfs_key key;
1476         u64 end;
1477         u64 total_found = 0;
1478         u32 extent_count = 0;
1479         int ret;
1480
1481         block_group = caching_ctl->block_group;
1482         fs_info = block_group->fs_info;
1483         root = fs_info->free_space_root;
1484
1485         end = block_group->start + block_group->length;
1486
1487         while (1) {
1488                 ret = btrfs_next_item(root, path);
1489                 if (ret < 0)
1490                         goto out;
1491                 if (ret)
1492                         break;
1493
1494                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
1495
1496                 if (key.type == BTRFS_FREE_SPACE_INFO_KEY)
1497                         break;
1498
1499                 ASSERT(key.type == BTRFS_FREE_SPACE_EXTENT_KEY);
1500                 ASSERT(key.objectid < end && key.objectid + key.offset <= end);
1501
1502                 caching_ctl->progress = key.objectid;
1503
1504                 total_found += add_new_free_space(block_group, key.objectid,
1505                                                   key.objectid + key.offset);
1506                 if (total_found > CACHING_CTL_WAKE_UP) {
1507                         total_found = 0;
1508                         wake_up(&caching_ctl->wait);
1509                 }
1510                 extent_count++;
1511         }
1512
1513         if (extent_count != expected_extent_count) {
1514                 btrfs_err(fs_info,
1515                           "incorrect extent count for %llu; counted %u, expected %u",
1516                           block_group->start, extent_count,
1517                           expected_extent_count);
1518                 ASSERT(0);
1519                 ret = -EIO;
1520                 goto out;
1521         }
1522
1523         caching_ctl->progress = (u64)-1;
1524
1525         ret = 0;
1526 out:
1527         return ret;
1528 }
1529
1530 int load_free_space_tree(struct btrfs_caching_control *caching_ctl)
1531 {
1532         struct btrfs_block_group *block_group;
1533         struct btrfs_free_space_info *info;
1534         struct btrfs_path *path;
1535         u32 extent_count, flags;
1536         int ret;
1537
1538         block_group = caching_ctl->block_group;
1539
1540         path = btrfs_alloc_path();
1541         if (!path)
1542                 return -ENOMEM;
1543
1544         /*
1545          * Just like caching_thread() doesn't want to deadlock on the extent
1546          * tree, we don't want to deadlock on the free space tree.
1547          */
1548         path->skip_locking = 1;
1549         path->search_commit_root = 1;
1550         path->reada = READA_FORWARD;
1551
1552         info = search_free_space_info(NULL, block_group, path, 0);
1553         if (IS_ERR(info)) {
1554                 ret = PTR_ERR(info);
1555                 goto out;
1556         }
1557         extent_count = btrfs_free_space_extent_count(path->nodes[0], info);
1558         flags = btrfs_free_space_flags(path->nodes[0], info);
1559
1560         /*
1561          * We left path pointing to the free space info item, so now
1562          * load_free_space_foo can just iterate through the free space tree from
1563          * there.
1564          */
1565         if (flags & BTRFS_FREE_SPACE_USING_BITMAPS)
1566                 ret = load_free_space_bitmaps(caching_ctl, path, extent_count);
1567         else
1568                 ret = load_free_space_extents(caching_ctl, path, extent_count);
1569
1570 out:
1571         btrfs_free_path(path);
1572         return ret;
1573 }