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