hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/btrfs/free-space-tree.c
....@@ -10,24 +10,28 @@
1010 #include "locking.h"
1111 #include "free-space-tree.h"
1212 #include "transaction.h"
13
+#include "block-group.h"
1314
1415 static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
15
- struct btrfs_block_group_cache *block_group,
16
+ struct btrfs_block_group *block_group,
1617 struct btrfs_path *path);
1718
18
-void set_free_space_tree_thresholds(struct btrfs_block_group_cache *cache)
19
+void set_free_space_tree_thresholds(struct btrfs_block_group *cache)
1920 {
2021 u32 bitmap_range;
2122 size_t bitmap_size;
2223 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);
2328
2429 /*
2530 * We convert to bitmaps when the disk space required for using extents
2631 * exceeds that required for using bitmaps.
2732 */
2833 bitmap_range = cache->fs_info->sectorsize * BTRFS_FREE_SPACE_BITMAP_BITS;
29
- num_bitmaps = div_u64(cache->key.offset + bitmap_range - 1,
30
- bitmap_range);
34
+ num_bitmaps = div_u64(cache->length + bitmap_range - 1, bitmap_range);
3135 bitmap_size = sizeof(struct btrfs_item) + BTRFS_FREE_SPACE_BITMAP_SIZE;
3236 total_bitmap_size = num_bitmaps * bitmap_size;
3337 cache->bitmap_high_thresh = div_u64(total_bitmap_size,
....@@ -44,7 +48,7 @@
4448 }
4549
4650 static int add_new_free_space_info(struct btrfs_trans_handle *trans,
47
- struct btrfs_block_group_cache *block_group,
51
+ struct btrfs_block_group *block_group,
4852 struct btrfs_path *path)
4953 {
5054 struct btrfs_root *root = trans->fs_info->free_space_root;
....@@ -53,9 +57,9 @@
5357 struct extent_buffer *leaf;
5458 int ret;
5559
56
- key.objectid = block_group->key.objectid;
60
+ key.objectid = block_group->start;
5761 key.type = BTRFS_FREE_SPACE_INFO_KEY;
58
- key.offset = block_group->key.offset;
62
+ key.offset = block_group->length;
5963
6064 ret = btrfs_insert_empty_item(trans, root, path, &key, sizeof(*info));
6165 if (ret)
....@@ -74,26 +78,27 @@
7478 return ret;
7579 }
7680
77
-struct btrfs_free_space_info *
78
-search_free_space_info(struct btrfs_trans_handle *trans,
79
- struct btrfs_fs_info *fs_info,
80
- struct btrfs_block_group_cache *block_group,
81
- struct btrfs_path *path, int cow)
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)
8286 {
87
+ struct btrfs_fs_info *fs_info = block_group->fs_info;
8388 struct btrfs_root *root = fs_info->free_space_root;
8489 struct btrfs_key key;
8590 int ret;
8691
87
- key.objectid = block_group->key.objectid;
92
+ key.objectid = block_group->start;
8893 key.type = BTRFS_FREE_SPACE_INFO_KEY;
89
- key.offset = block_group->key.offset;
94
+ key.offset = block_group->length;
9095
9196 ret = btrfs_search_slot(trans, root, &key, path, 0, cow);
9297 if (ret < 0)
9398 return ERR_PTR(ret);
9499 if (ret != 0) {
95100 btrfs_warn(fs_info, "missing free space info for %llu",
96
- block_group->key.objectid);
101
+ block_group->start);
97102 ASSERT(0);
98103 return ERR_PTR(-ENOENT);
99104 }
....@@ -176,8 +181,9 @@
176181 }
177182 }
178183
184
+EXPORT_FOR_TESTS
179185 int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
180
- struct btrfs_block_group_cache *block_group,
186
+ struct btrfs_block_group *block_group,
181187 struct btrfs_path *path)
182188 {
183189 struct btrfs_fs_info *fs_info = trans->fs_info;
....@@ -194,7 +200,7 @@
194200 int done = 0, nr;
195201 int ret;
196202
197
- bitmap_size = free_space_bitmap_size(block_group->key.offset,
203
+ bitmap_size = free_space_bitmap_size(block_group->length,
198204 fs_info->sectorsize);
199205 bitmap = alloc_bitmap(bitmap_size);
200206 if (!bitmap) {
....@@ -202,8 +208,8 @@
202208 goto out;
203209 }
204210
205
- start = block_group->key.objectid;
206
- end = block_group->key.objectid + block_group->key.offset;
211
+ start = block_group->start;
212
+ end = block_group->start + block_group->length;
207213
208214 key.objectid = end - 1;
209215 key.type = (u8)-1;
....@@ -221,8 +227,8 @@
221227 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
222228
223229 if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
224
- ASSERT(found_key.objectid == block_group->key.objectid);
225
- ASSERT(found_key.offset == block_group->key.offset);
230
+ ASSERT(found_key.objectid == block_group->start);
231
+ ASSERT(found_key.offset == block_group->length);
226232 done = 1;
227233 break;
228234 } else if (found_key.type == BTRFS_FREE_SPACE_EXTENT_KEY) {
....@@ -252,7 +258,7 @@
252258 btrfs_release_path(path);
253259 }
254260
255
- info = search_free_space_info(trans, fs_info, block_group, path, 1);
261
+ info = search_free_space_info(trans, block_group, path, 1);
256262 if (IS_ERR(info)) {
257263 ret = PTR_ERR(info);
258264 goto out;
....@@ -268,7 +274,7 @@
268274 if (extent_count != expected_extent_count) {
269275 btrfs_err(fs_info,
270276 "incorrect extent count for %llu; counted %u, expected %u",
271
- block_group->key.objectid, extent_count,
277
+ block_group->start, extent_count,
272278 expected_extent_count);
273279 ASSERT(0);
274280 ret = -EIO;
....@@ -315,8 +321,9 @@
315321 return ret;
316322 }
317323
324
+EXPORT_FOR_TESTS
318325 int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
319
- struct btrfs_block_group_cache *block_group,
326
+ struct btrfs_block_group *block_group,
320327 struct btrfs_path *path)
321328 {
322329 struct btrfs_fs_info *fs_info = trans->fs_info;
....@@ -332,7 +339,7 @@
332339 int done = 0, nr;
333340 int ret;
334341
335
- bitmap_size = free_space_bitmap_size(block_group->key.offset,
342
+ bitmap_size = free_space_bitmap_size(block_group->length,
336343 fs_info->sectorsize);
337344 bitmap = alloc_bitmap(bitmap_size);
338345 if (!bitmap) {
....@@ -340,8 +347,8 @@
340347 goto out;
341348 }
342349
343
- start = block_group->key.objectid;
344
- end = block_group->key.objectid + block_group->key.offset;
350
+ start = block_group->start;
351
+ end = block_group->start + block_group->length;
345352
346353 key.objectid = end - 1;
347354 key.type = (u8)-1;
....@@ -359,8 +366,8 @@
359366 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
360367
361368 if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
362
- ASSERT(found_key.objectid == block_group->key.objectid);
363
- ASSERT(found_key.offset == block_group->key.offset);
369
+ ASSERT(found_key.objectid == block_group->start);
370
+ ASSERT(found_key.offset == block_group->length);
364371 done = 1;
365372 break;
366373 } else if (found_key.type == BTRFS_FREE_SPACE_BITMAP_KEY) {
....@@ -396,7 +403,7 @@
396403 btrfs_release_path(path);
397404 }
398405
399
- info = search_free_space_info(trans, fs_info, block_group, path, 1);
406
+ info = search_free_space_info(trans, block_group, path, 1);
400407 if (IS_ERR(info)) {
401408 ret = PTR_ERR(info);
402409 goto out;
....@@ -409,7 +416,7 @@
409416 btrfs_mark_buffer_dirty(leaf);
410417 btrfs_release_path(path);
411418
412
- nrbits = div_u64(block_group->key.offset, block_group->fs_info->sectorsize);
419
+ nrbits = div_u64(block_group->length, block_group->fs_info->sectorsize);
413420 start_bit = find_next_bit_le(bitmap, nrbits, 0);
414421
415422 while (start_bit < nrbits) {
....@@ -433,7 +440,7 @@
433440 if (extent_count != expected_extent_count) {
434441 btrfs_err(fs_info,
435442 "incorrect extent count for %llu; counted %u, expected %u",
436
- block_group->key.objectid, extent_count,
443
+ block_group->start, extent_count,
437444 expected_extent_count);
438445 ASSERT(0);
439446 ret = -EIO;
....@@ -449,7 +456,7 @@
449456 }
450457
451458 static int update_free_space_extent_count(struct btrfs_trans_handle *trans,
452
- struct btrfs_block_group_cache *block_group,
459
+ struct btrfs_block_group *block_group,
453460 struct btrfs_path *path,
454461 int new_extents)
455462 {
....@@ -461,8 +468,7 @@
461468 if (new_extents == 0)
462469 return 0;
463470
464
- info = search_free_space_info(trans, trans->fs_info, block_group, path,
465
- 1);
471
+ info = search_free_space_info(trans, block_group, path, 1);
466472 if (IS_ERR(info)) {
467473 ret = PTR_ERR(info);
468474 goto out;
....@@ -487,7 +493,8 @@
487493 return ret;
488494 }
489495
490
-int free_space_test_bit(struct btrfs_block_group_cache *block_group,
496
+EXPORT_FOR_TESTS
497
+int free_space_test_bit(struct btrfs_block_group *block_group,
491498 struct btrfs_path *path, u64 offset)
492499 {
493500 struct extent_buffer *leaf;
....@@ -509,7 +516,7 @@
509516 return !!extent_buffer_test_bit(leaf, ptr, i);
510517 }
511518
512
-static void free_space_set_bits(struct btrfs_block_group_cache *block_group,
519
+static void free_space_set_bits(struct btrfs_block_group *block_group,
513520 struct btrfs_path *path, u64 *start, u64 *size,
514521 int bit)
515522 {
....@@ -577,7 +584,7 @@
577584 * the bitmap.
578585 */
579586 static int modify_free_space_bitmap(struct btrfs_trans_handle *trans,
580
- struct btrfs_block_group_cache *block_group,
587
+ struct btrfs_block_group *block_group,
581588 struct btrfs_path *path,
582589 u64 start, u64 size, int remove)
583590 {
....@@ -593,7 +600,7 @@
593600 * Read the bit for the block immediately before the extent of space if
594601 * that block is within the block group.
595602 */
596
- if (start > block_group->key.objectid) {
603
+ if (start > block_group->start) {
597604 u64 prev_block = start - block_group->fs_info->sectorsize;
598605
599606 key.objectid = prev_block;
....@@ -645,7 +652,7 @@
645652 * Read the bit for the block immediately after the extent of space if
646653 * that block is within the block group.
647654 */
648
- if (end < block_group->key.objectid + block_group->key.offset) {
655
+ if (end < block_group->start + block_group->length) {
649656 /* The next block may be in the next bitmap. */
650657 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
651658 if (end >= key.objectid + key.offset) {
....@@ -690,7 +697,7 @@
690697 }
691698
692699 static int remove_free_space_extent(struct btrfs_trans_handle *trans,
693
- struct btrfs_block_group_cache *block_group,
700
+ struct btrfs_block_group *block_group,
694701 struct btrfs_path *path,
695702 u64 start, u64 size)
696703 {
....@@ -775,8 +782,9 @@
775782 return ret;
776783 }
777784
785
+EXPORT_FOR_TESTS
778786 int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
779
- struct btrfs_block_group_cache *block_group,
787
+ struct btrfs_block_group *block_group,
780788 struct btrfs_path *path, u64 start, u64 size)
781789 {
782790 struct btrfs_free_space_info *info;
....@@ -789,8 +797,7 @@
789797 return ret;
790798 }
791799
792
- info = search_free_space_info(NULL, trans->fs_info, block_group, path,
793
- 0);
800
+ info = search_free_space_info(NULL, block_group, path, 0);
794801 if (IS_ERR(info))
795802 return PTR_ERR(info);
796803 flags = btrfs_free_space_flags(path->nodes[0], info);
....@@ -808,7 +815,7 @@
808815 int remove_from_free_space_tree(struct btrfs_trans_handle *trans,
809816 u64 start, u64 size)
810817 {
811
- struct btrfs_block_group_cache *block_group;
818
+ struct btrfs_block_group *block_group;
812819 struct btrfs_path *path;
813820 int ret;
814821
....@@ -842,7 +849,7 @@
842849 }
843850
844851 static int add_free_space_extent(struct btrfs_trans_handle *trans,
845
- struct btrfs_block_group_cache *block_group,
852
+ struct btrfs_block_group *block_group,
846853 struct btrfs_path *path,
847854 u64 start, u64 size)
848855 {
....@@ -876,7 +883,7 @@
876883 new_key.offset = size;
877884
878885 /* Search for a neighbor on the left. */
879
- if (start == block_group->key.objectid)
886
+ if (start == block_group->start)
880887 goto right;
881888 key.objectid = start - 1;
882889 key.type = (u8)-1;
....@@ -896,8 +903,8 @@
896903
897904 found_start = key.objectid;
898905 found_end = key.objectid + key.offset;
899
- ASSERT(found_start >= block_group->key.objectid &&
900
- found_end > block_group->key.objectid);
906
+ ASSERT(found_start >= block_group->start &&
907
+ found_end > block_group->start);
901908 ASSERT(found_start < start && found_end <= start);
902909
903910 /*
....@@ -916,7 +923,7 @@
916923
917924 right:
918925 /* Search for a neighbor on the right. */
919
- if (end == block_group->key.objectid + block_group->key.offset)
926
+ if (end == block_group->start + block_group->length)
920927 goto insert;
921928 key.objectid = end;
922929 key.type = (u8)-1;
....@@ -936,8 +943,8 @@
936943
937944 found_start = key.objectid;
938945 found_end = key.objectid + key.offset;
939
- ASSERT(found_start >= block_group->key.objectid &&
940
- found_end > block_group->key.objectid);
946
+ ASSERT(found_start >= block_group->start &&
947
+ found_end > block_group->start);
941948 ASSERT((found_start < start && found_end <= start) ||
942949 (found_start >= end && found_end > end));
943950
....@@ -968,11 +975,11 @@
968975 return ret;
969976 }
970977
978
+EXPORT_FOR_TESTS
971979 int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
972
- struct btrfs_block_group_cache *block_group,
980
+ struct btrfs_block_group *block_group,
973981 struct btrfs_path *path, u64 start, u64 size)
974982 {
975
- struct btrfs_fs_info *fs_info = trans->fs_info;
976983 struct btrfs_free_space_info *info;
977984 u32 flags;
978985 int ret;
....@@ -983,7 +990,7 @@
983990 return ret;
984991 }
985992
986
- info = search_free_space_info(NULL, fs_info, block_group, path, 0);
993
+ info = search_free_space_info(NULL, block_group, path, 0);
987994 if (IS_ERR(info))
988995 return PTR_ERR(info);
989996 flags = btrfs_free_space_flags(path->nodes[0], info);
....@@ -1001,7 +1008,7 @@
10011008 int add_to_free_space_tree(struct btrfs_trans_handle *trans,
10021009 u64 start, u64 size)
10031010 {
1004
- struct btrfs_block_group_cache *block_group;
1011
+ struct btrfs_block_group *block_group;
10051012 struct btrfs_path *path;
10061013 int ret;
10071014
....@@ -1039,7 +1046,7 @@
10391046 * through the normal add/remove hooks.
10401047 */
10411048 static int populate_free_space_tree(struct btrfs_trans_handle *trans,
1042
- struct btrfs_block_group_cache *block_group)
1049
+ struct btrfs_block_group *block_group)
10431050 {
10441051 struct btrfs_root *extent_root = trans->fs_info->extent_root;
10451052 struct btrfs_path *path, *path2;
....@@ -1071,7 +1078,7 @@
10711078 * BLOCK_GROUP_ITEM, so an extent may precede the block group that it's
10721079 * contained in.
10731080 */
1074
- key.objectid = block_group->key.objectid;
1081
+ key.objectid = block_group->start;
10751082 key.type = BTRFS_EXTENT_ITEM_KEY;
10761083 key.offset = 0;
10771084
....@@ -1080,8 +1087,8 @@
10801087 goto out_locked;
10811088 ASSERT(ret == 0);
10821089
1083
- start = block_group->key.objectid;
1084
- end = block_group->key.objectid + block_group->key.offset;
1090
+ start = block_group->start;
1091
+ end = block_group->start + block_group->length;
10851092 while (1) {
10861093 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
10871094
....@@ -1105,7 +1112,7 @@
11051112 else
11061113 start += key.offset;
11071114 } else if (key.type == BTRFS_BLOCK_GROUP_ITEM_KEY) {
1108
- if (key.objectid != block_group->key.objectid)
1115
+ if (key.objectid != block_group->start)
11091116 break;
11101117 }
11111118
....@@ -1136,7 +1143,7 @@
11361143 struct btrfs_trans_handle *trans;
11371144 struct btrfs_root *tree_root = fs_info->tree_root;
11381145 struct btrfs_root *free_space_root;
1139
- struct btrfs_block_group_cache *block_group;
1146
+ struct btrfs_block_group *block_group;
11401147 struct rb_node *node;
11411148 int ret;
11421149
....@@ -1145,7 +1152,8 @@
11451152 return PTR_ERR(trans);
11461153
11471154 set_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags);
1148
- free_space_root = btrfs_create_tree(trans, fs_info,
1155
+ set_bit(BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED, &fs_info->flags);
1156
+ free_space_root = btrfs_create_tree(trans,
11491157 BTRFS_FREE_SPACE_TREE_OBJECTID);
11501158 if (IS_ERR(free_space_root)) {
11511159 ret = PTR_ERR(free_space_root);
....@@ -1155,7 +1163,7 @@
11551163
11561164 node = rb_first(&fs_info->block_group_cache_tree);
11571165 while (node) {
1158
- block_group = rb_entry(node, struct btrfs_block_group_cache,
1166
+ block_group = rb_entry(node, struct btrfs_block_group,
11591167 cache_node);
11601168 ret = populate_free_space_tree(trans, block_group);
11611169 if (ret)
....@@ -1166,11 +1174,18 @@
11661174 btrfs_set_fs_compat_ro(fs_info, FREE_SPACE_TREE);
11671175 btrfs_set_fs_compat_ro(fs_info, FREE_SPACE_TREE_VALID);
11681176 clear_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags);
1177
+ ret = btrfs_commit_transaction(trans);
11691178
1170
- return btrfs_commit_transaction(trans);
1179
+ /*
1180
+ * Now that we've committed the transaction any reading of our commit
1181
+ * root will be safe, so we can cache from the free space tree now.
1182
+ */
1183
+ clear_bit(BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED, &fs_info->flags);
1184
+ return ret;
11711185
11721186 abort:
11731187 clear_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags);
1188
+ clear_bit(BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED, &fs_info->flags);
11741189 btrfs_abort_transaction(trans, ret);
11751190 btrfs_end_transaction(trans);
11761191 return ret;
....@@ -1243,14 +1258,12 @@
12431258 list_del(&free_space_root->dirty_list);
12441259
12451260 btrfs_tree_lock(free_space_root->node);
1246
- clean_tree_block(fs_info, free_space_root->node);
1261
+ btrfs_clean_tree_block(free_space_root->node);
12471262 btrfs_tree_unlock(free_space_root->node);
12481263 btrfs_free_tree_block(trans, free_space_root, free_space_root->node,
12491264 0, 1);
12501265
1251
- free_extent_buffer(free_space_root->node);
1252
- free_extent_buffer(free_space_root->commit_root);
1253
- kfree(free_space_root);
1266
+ btrfs_put_root(free_space_root);
12541267
12551268 return btrfs_commit_transaction(trans);
12561269
....@@ -1261,7 +1274,7 @@
12611274 }
12621275
12631276 static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
1264
- struct btrfs_block_group_cache *block_group,
1277
+ struct btrfs_block_group *block_group,
12651278 struct btrfs_path *path)
12661279 {
12671280 int ret;
....@@ -1273,12 +1286,12 @@
12731286 return ret;
12741287
12751288 return __add_to_free_space_tree(trans, block_group, path,
1276
- block_group->key.objectid,
1277
- block_group->key.offset);
1289
+ block_group->start,
1290
+ block_group->length);
12781291 }
12791292
12801293 int add_block_group_free_space(struct btrfs_trans_handle *trans,
1281
- struct btrfs_block_group_cache *block_group)
1294
+ struct btrfs_block_group *block_group)
12821295 {
12831296 struct btrfs_fs_info *fs_info = trans->fs_info;
12841297 struct btrfs_path *path = NULL;
....@@ -1308,7 +1321,7 @@
13081321 }
13091322
13101323 int remove_block_group_free_space(struct btrfs_trans_handle *trans,
1311
- struct btrfs_block_group_cache *block_group)
1324
+ struct btrfs_block_group *block_group)
13121325 {
13131326 struct btrfs_root *root = trans->fs_info->free_space_root;
13141327 struct btrfs_path *path;
....@@ -1332,8 +1345,8 @@
13321345 goto out;
13331346 }
13341347
1335
- start = block_group->key.objectid;
1336
- end = block_group->key.objectid + block_group->key.offset;
1348
+ start = block_group->start;
1349
+ end = block_group->start + block_group->length;
13371350
13381351 key.objectid = end - 1;
13391352 key.type = (u8)-1;
....@@ -1351,8 +1364,8 @@
13511364 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0] - 1);
13521365
13531366 if (found_key.type == BTRFS_FREE_SPACE_INFO_KEY) {
1354
- ASSERT(found_key.objectid == block_group->key.objectid);
1355
- ASSERT(found_key.offset == block_group->key.offset);
1367
+ ASSERT(found_key.objectid == block_group->start);
1368
+ ASSERT(found_key.offset == block_group->length);
13561369 done = 1;
13571370 nr++;
13581371 path->slots[0]--;
....@@ -1387,7 +1400,7 @@
13871400 struct btrfs_path *path,
13881401 u32 expected_extent_count)
13891402 {
1390
- struct btrfs_block_group_cache *block_group;
1403
+ struct btrfs_block_group *block_group;
13911404 struct btrfs_fs_info *fs_info;
13921405 struct btrfs_root *root;
13931406 struct btrfs_key key;
....@@ -1403,7 +1416,7 @@
14031416 fs_info = block_group->fs_info;
14041417 root = fs_info->free_space_root;
14051418
1406
- end = block_group->key.objectid + block_group->key.offset;
1419
+ end = block_group->start + block_group->length;
14071420
14081421 while (1) {
14091422 ret = btrfs_next_item(root, path);
....@@ -1450,7 +1463,7 @@
14501463 if (extent_count != expected_extent_count) {
14511464 btrfs_err(fs_info,
14521465 "incorrect extent count for %llu; counted %u, expected %u",
1453
- block_group->key.objectid, extent_count,
1466
+ block_group->start, extent_count,
14541467 expected_extent_count);
14551468 ASSERT(0);
14561469 ret = -EIO;
....@@ -1468,7 +1481,7 @@
14681481 struct btrfs_path *path,
14691482 u32 expected_extent_count)
14701483 {
1471
- struct btrfs_block_group_cache *block_group;
1484
+ struct btrfs_block_group *block_group;
14721485 struct btrfs_fs_info *fs_info;
14731486 struct btrfs_root *root;
14741487 struct btrfs_key key;
....@@ -1481,7 +1494,7 @@
14811494 fs_info = block_group->fs_info;
14821495 root = fs_info->free_space_root;
14831496
1484
- end = block_group->key.objectid + block_group->key.offset;
1497
+ end = block_group->start + block_group->length;
14851498
14861499 while (1) {
14871500 ret = btrfs_next_item(root, path);
....@@ -1512,7 +1525,7 @@
15121525 if (extent_count != expected_extent_count) {
15131526 btrfs_err(fs_info,
15141527 "incorrect extent count for %llu; counted %u, expected %u",
1515
- block_group->key.objectid, extent_count,
1528
+ block_group->start, extent_count,
15161529 expected_extent_count);
15171530 ASSERT(0);
15181531 ret = -EIO;
....@@ -1528,15 +1541,13 @@
15281541
15291542 int load_free_space_tree(struct btrfs_caching_control *caching_ctl)
15301543 {
1531
- struct btrfs_block_group_cache *block_group;
1532
- struct btrfs_fs_info *fs_info;
1544
+ struct btrfs_block_group *block_group;
15331545 struct btrfs_free_space_info *info;
15341546 struct btrfs_path *path;
15351547 u32 extent_count, flags;
15361548 int ret;
15371549
15381550 block_group = caching_ctl->block_group;
1539
- fs_info = block_group->fs_info;
15401551
15411552 path = btrfs_alloc_path();
15421553 if (!path)
....@@ -1550,7 +1561,7 @@
15501561 path->search_commit_root = 1;
15511562 path->reada = READA_FORWARD;
15521563
1553
- info = search_free_space_info(NULL, fs_info, block_group, path, 0);
1564
+ info = search_free_space_info(NULL, block_group, path, 0);
15541565 if (IS_ERR(info)) {
15551566 ret = PTR_ERR(info);
15561567 goto out;