1 // SPDX-License-Identifier: GPL-2.0 2 3 #include <linux/slab.h> 4 #include <trace/events/btrfs.h> 5 #include "messages.h" 6 #include "ctree.h" 7 #include "extent_io.h" 8 #include "extent-io-tree.h" 9 #include "btrfs_inode.h" 10 11 static struct kmem_cache *extent_state_cache; 12 13 static inline bool extent_state_in_tree(const struct extent_state *state) 14 { 15 return !RB_EMPTY_NODE(&state->rb_node); 16 } 17 18 #ifdef CONFIG_BTRFS_DEBUG 19 static LIST_HEAD(states); 20 static DEFINE_SPINLOCK(leak_lock); 21 22 static inline void btrfs_leak_debug_add_state(struct extent_state *state) 23 { 24 unsigned long flags; 25 26 spin_lock_irqsave(&leak_lock, flags); 27 list_add(&state->leak_list, &states); 28 spin_unlock_irqrestore(&leak_lock, flags); 29 } 30 31 static inline void btrfs_leak_debug_del_state(struct extent_state *state) 32 { 33 unsigned long flags; 34 35 spin_lock_irqsave(&leak_lock, flags); 36 list_del(&state->leak_list); 37 spin_unlock_irqrestore(&leak_lock, flags); 38 } 39 40 static inline void btrfs_extent_state_leak_debug_check(void) 41 { 42 struct extent_state *state; 43 44 while (!list_empty(&states)) { 45 state = list_first_entry(&states, struct extent_state, leak_list); 46 btrfs_err(NULL, 47 "state leak: start %llu end %llu state %u in tree %d refs %d", 48 state->start, state->end, state->state, 49 extent_state_in_tree(state), 50 refcount_read(&state->refs)); 51 list_del(&state->leak_list); 52 WARN_ON_ONCE(1); 53 kmem_cache_free(extent_state_cache, state); 54 } 55 } 56 57 #define btrfs_debug_check_extent_io_range(tree, start, end) \ 58 __btrfs_debug_check_extent_io_range(__func__, (tree), (start), (end)) 59 static inline void __btrfs_debug_check_extent_io_range(const char *caller, 60 struct extent_io_tree *tree, 61 u64 start, u64 end) 62 { 63 const struct btrfs_inode *inode = tree->inode; 64 u64 isize; 65 66 if (tree->owner != IO_TREE_INODE_IO) 67 return; 68 69 isize = i_size_read(&inode->vfs_inode); 70 if (end >= PAGE_SIZE && (end % 2) == 0 && end != isize - 1) { 71 btrfs_debug_rl(inode->root->fs_info, 72 "%s: ino %llu isize %llu odd range [%llu,%llu]", 73 caller, btrfs_ino(inode), isize, start, end); 74 } 75 } 76 #else 77 #define btrfs_leak_debug_add_state(state) do {} while (0) 78 #define btrfs_leak_debug_del_state(state) do {} while (0) 79 #define btrfs_extent_state_leak_debug_check() do {} while (0) 80 #define btrfs_debug_check_extent_io_range(c, s, e) do {} while (0) 81 #endif 82 83 /* Read-only access to the inode. */ 84 const struct btrfs_inode *btrfs_extent_io_tree_to_inode(const struct extent_io_tree *tree) 85 { 86 if (tree->owner == IO_TREE_INODE_IO) 87 return tree->inode; 88 return NULL; 89 } 90 91 /* For read-only access to fs_info. */ 92 const struct btrfs_fs_info *btrfs_extent_io_tree_to_fs_info(const struct extent_io_tree *tree) 93 { 94 if (tree->owner == IO_TREE_INODE_IO) 95 return tree->inode->root->fs_info; 96 return tree->fs_info; 97 } 98 99 void btrfs_extent_io_tree_init(struct btrfs_fs_info *fs_info, 100 struct extent_io_tree *tree, unsigned int owner) 101 { 102 tree->state = RB_ROOT; 103 spin_lock_init(&tree->lock); 104 tree->fs_info = fs_info; 105 tree->owner = owner; 106 } 107 108 /* 109 * Empty an io tree, removing and freeing every extent state record from the 110 * tree. This should be called once we are sure no other task can access the 111 * tree anymore, so no tree updates happen after we empty the tree and there 112 * aren't any waiters on any extent state record (EXTENT_LOCK_BITS are never 113 * set on any extent state when calling this function). 114 */ 115 void btrfs_extent_io_tree_release(struct extent_io_tree *tree) 116 { 117 struct rb_root root; 118 struct extent_state *state; 119 struct extent_state *tmp; 120 121 spin_lock(&tree->lock); 122 root = tree->state; 123 tree->state = RB_ROOT; 124 rbtree_postorder_for_each_entry_safe(state, tmp, &root, rb_node) { 125 /* Clear node to keep free_extent_state() happy. */ 126 RB_CLEAR_NODE(&state->rb_node); 127 ASSERT(!(state->state & EXTENT_LOCK_BITS)); 128 /* 129 * No need for a memory barrier here, as we are holding the tree 130 * lock and we only change the waitqueue while holding that lock 131 * (see wait_extent_bit()). 132 */ 133 ASSERT(!waitqueue_active(&state->wq)); 134 btrfs_free_extent_state(state); 135 cond_resched_lock(&tree->lock); 136 } 137 /* 138 * Should still be empty even after a reschedule, no other task should 139 * be accessing the tree anymore. 140 */ 141 ASSERT(RB_EMPTY_ROOT(&tree->state)); 142 spin_unlock(&tree->lock); 143 } 144 145 static struct extent_state *alloc_extent_state(gfp_t mask) 146 { 147 struct extent_state *state; 148 149 /* 150 * The given mask might be not appropriate for the slab allocator, 151 * drop the unsupported bits 152 */ 153 mask &= ~(__GFP_DMA32|__GFP_HIGHMEM); 154 state = kmem_cache_alloc(extent_state_cache, mask); 155 if (!state) 156 return state; 157 state->state = 0; 158 RB_CLEAR_NODE(&state->rb_node); 159 btrfs_leak_debug_add_state(state); 160 refcount_set(&state->refs, 1); 161 init_waitqueue_head(&state->wq); 162 trace_btrfs_alloc_extent_state(state, mask, _RET_IP_); 163 return state; 164 } 165 166 static struct extent_state *alloc_extent_state_atomic(struct extent_state *prealloc) 167 { 168 if (!prealloc) 169 prealloc = alloc_extent_state(GFP_ATOMIC); 170 171 return prealloc; 172 } 173 174 void btrfs_free_extent_state(struct extent_state *state) 175 { 176 if (!state) 177 return; 178 if (refcount_dec_and_test(&state->refs)) { 179 WARN_ON(extent_state_in_tree(state)); 180 btrfs_leak_debug_del_state(state); 181 trace_btrfs_free_extent_state(state, _RET_IP_); 182 kmem_cache_free(extent_state_cache, state); 183 } 184 } 185 186 static int add_extent_changeset(struct extent_state *state, u32 bits, 187 struct extent_changeset *changeset, 188 bool set) 189 { 190 int ret; 191 192 if (!changeset) 193 return 0; 194 if (set && (state->state & bits) == bits) 195 return 0; 196 if (!set && (state->state & bits) == 0) 197 return 0; 198 199 changeset->bytes_changed += state->end - state->start + 1; 200 if (!extent_changeset_tracks_ranges(changeset)) 201 return 0; 202 203 ret = ulist_add(&changeset->range_changed, state->start, state->end, GFP_ATOMIC); 204 if (ret < 0) 205 return ret; 206 return 0; 207 } 208 209 static inline struct extent_state *next_state(struct extent_state *state) 210 { 211 struct rb_node *next = rb_next(&state->rb_node); 212 213 return rb_entry_safe(next, struct extent_state, rb_node); 214 } 215 216 static inline struct extent_state *prev_state(struct extent_state *state) 217 { 218 struct rb_node *next = rb_prev(&state->rb_node); 219 220 return rb_entry_safe(next, struct extent_state, rb_node); 221 } 222 223 /* 224 * Search @tree for an entry that contains @offset or if none exists for the 225 * first entry that starts and ends after that offset. 226 * 227 * @tree: the tree to search 228 * @offset: search offset 229 * @node_ret: pointer where new node should be anchored (used when inserting an 230 * entry in the tree) 231 * @parent_ret: points to entry which would have been the parent of the entry, 232 * containing @offset 233 * 234 * Return a pointer to the entry that contains @offset byte address. 235 * 236 * If no such entry exists, return the first entry that starts and ends after 237 * @offset if one exists, otherwise NULL. 238 * 239 * If the returned entry starts at @offset, then @node_ret and @parent_ret 240 * aren't changed. 241 */ 242 static inline struct extent_state *tree_search_for_insert(struct extent_io_tree *tree, 243 u64 offset, 244 struct rb_node ***node_ret, 245 struct rb_node **parent_ret) 246 { 247 struct rb_root *root = &tree->state; 248 struct rb_node **node = &root->rb_node; 249 struct rb_node *prev = NULL; 250 struct extent_state *entry = NULL; 251 252 while (*node) { 253 prev = *node; 254 entry = rb_entry(prev, struct extent_state, rb_node); 255 256 if (offset < entry->start) 257 node = &(*node)->rb_left; 258 else if (offset > entry->end) 259 node = &(*node)->rb_right; 260 else 261 return entry; 262 } 263 264 if (node_ret) 265 *node_ret = node; 266 if (parent_ret) 267 *parent_ret = prev; 268 269 /* 270 * Return either the current entry if it contains offset (it ends after 271 * or at offset) or the first entry that starts and ends after offset if 272 * one exists, or NULL. 273 */ 274 while (entry && offset > entry->end) 275 entry = next_state(entry); 276 277 return entry; 278 } 279 280 /* 281 * Search offset in the tree or fill neighbor rbtree node pointers. 282 * 283 * @tree: the tree to search 284 * @offset: offset that should fall within an entry in @tree 285 * @next_ret: pointer to the first entry whose range ends after @offset 286 * @prev_ret: pointer to the first entry whose range begins before @offset 287 * 288 * Return a pointer to the entry that contains @offset byte address. If no 289 * such entry exists, then return NULL and fill @prev_ret and @next_ret. 290 * Otherwise return the found entry and other pointers are left untouched. 291 */ 292 static struct extent_state *tree_search_prev_next(struct extent_io_tree *tree, 293 u64 offset, 294 struct extent_state **prev_ret, 295 struct extent_state **next_ret) 296 { 297 struct rb_root *root = &tree->state; 298 struct rb_node **node = &root->rb_node; 299 struct extent_state *orig_prev; 300 struct extent_state *entry = NULL; 301 302 ASSERT(prev_ret); 303 ASSERT(next_ret); 304 305 while (*node) { 306 entry = rb_entry(*node, struct extent_state, rb_node); 307 308 if (offset < entry->start) 309 node = &(*node)->rb_left; 310 else if (offset > entry->end) 311 node = &(*node)->rb_right; 312 else 313 return entry; 314 } 315 316 orig_prev = entry; 317 while (entry && offset > entry->end) 318 entry = next_state(entry); 319 *next_ret = entry; 320 entry = orig_prev; 321 322 while (entry && offset < entry->start) 323 entry = prev_state(entry); 324 *prev_ret = entry; 325 326 return NULL; 327 } 328 329 /* 330 * Inexact rb-tree search, return the next entry if @offset is not found 331 */ 332 static inline struct extent_state *tree_search(struct extent_io_tree *tree, u64 offset) 333 { 334 return tree_search_for_insert(tree, offset, NULL, NULL); 335 } 336 337 static void validate_extent_state(const struct extent_io_tree *tree, 338 const struct extent_state *state) 339 { 340 u32 blocksize; 341 342 if (tree->owner != IO_TREE_INODE_IO) 343 return; 344 345 blocksize = btrfs_extent_io_tree_to_fs_info(tree)->sectorsize; 346 ASSERT(IS_ALIGNED(state->start, blocksize) && 347 IS_ALIGNED(state->end + 1, blocksize), 348 "unaligned extent state, blocksize=%u start=%llu end=%llu state=0x%x", 349 blocksize, state->start, state->end, state->state); 350 } 351 352 #define extent_io_tree_panic(tree, state, opname, err) \ 353 btrfs_panic(btrfs_extent_io_tree_to_fs_info((tree)), (err), \ 354 "extent io tree error on %s state start %llu end %llu", \ 355 (opname), (state)->start, (state)->end) 356 357 static void merge_prev_state(struct extent_io_tree *tree, struct extent_state *state) 358 { 359 struct extent_state *prev; 360 361 prev = prev_state(state); 362 if (prev && prev->end == state->start - 1 && prev->state == state->state) { 363 if (tree->owner == IO_TREE_INODE_IO) 364 btrfs_merge_delalloc_extent(tree->inode, state, prev); 365 state->start = prev->start; 366 rb_erase(&prev->rb_node, &tree->state); 367 RB_CLEAR_NODE(&prev->rb_node); 368 btrfs_free_extent_state(prev); 369 } 370 } 371 372 static void merge_next_state(struct extent_io_tree *tree, struct extent_state *state) 373 { 374 struct extent_state *next; 375 376 next = next_state(state); 377 if (next && next->start == state->end + 1 && next->state == state->state) { 378 if (tree->owner == IO_TREE_INODE_IO) 379 btrfs_merge_delalloc_extent(tree->inode, state, next); 380 state->end = next->end; 381 rb_erase(&next->rb_node, &tree->state); 382 RB_CLEAR_NODE(&next->rb_node); 383 btrfs_free_extent_state(next); 384 } 385 } 386 387 /* 388 * Utility function to look for merge candidates inside a given range. Any 389 * extents with matching state are merged together into a single extent in the 390 * tree. Extents with EXTENT_IO in their state field are not merged because 391 * the end_io handlers need to be able to do operations on them without 392 * sleeping (or doing allocations/splits). 393 * 394 * This should be called with the tree lock held. 395 */ 396 static void merge_state(struct extent_io_tree *tree, struct extent_state *state) 397 { 398 if (state->state & (EXTENT_LOCK_BITS | EXTENT_BOUNDARY)) 399 return; 400 401 merge_prev_state(tree, state); 402 merge_next_state(tree, state); 403 } 404 405 static void set_state_bits(struct extent_io_tree *tree, 406 struct extent_state *state, 407 u32 bits, struct extent_changeset *changeset) 408 { 409 u32 bits_to_set = bits & ~EXTENT_CTLBITS; 410 int ret; 411 412 if (tree->owner == IO_TREE_INODE_IO) 413 btrfs_set_delalloc_extent(tree->inode, state, bits); 414 415 ret = add_extent_changeset(state, bits_to_set, changeset, true); 416 if (unlikely(ret)) 417 extent_io_tree_panic(tree, state, "add_extent_changeset", ret); 418 state->state |= bits_to_set; 419 } 420 421 /* 422 * Insert an extent_state struct into the tree. 'bits' are set on the 423 * struct before it is inserted. 424 * 425 * Returns a pointer to the struct extent_state record containing the range 426 * requested for insertion, which may be the same as the given struct or it 427 * may be an existing record in the tree that was expanded to accommodate the 428 * requested range. In case of an extent_state different from the one that was 429 * given, the later can be freed or reused by the caller. 430 * 431 * On error it returns an error pointer. 432 * 433 * The tree lock is not taken internally. This is a utility function and 434 * probably isn't what you want to call (see set/clear_extent_bit). 435 */ 436 static struct extent_state *insert_state(struct extent_io_tree *tree, 437 struct extent_state *state, 438 u32 bits, 439 struct extent_changeset *changeset) 440 { 441 struct rb_node **node; 442 struct rb_node *parent = NULL; 443 const u64 start = state->start - 1; 444 const u64 end = state->end + 1; 445 const bool try_merge = !(bits & (EXTENT_LOCK_BITS | EXTENT_BOUNDARY)); 446 447 validate_extent_state(tree, state); 448 449 set_state_bits(tree, state, bits, changeset); 450 451 node = &tree->state.rb_node; 452 while (*node) { 453 struct extent_state *entry; 454 455 parent = *node; 456 entry = rb_entry(parent, struct extent_state, rb_node); 457 458 if (state->end < entry->start) { 459 if (try_merge && end == entry->start && 460 state->state == entry->state) { 461 if (tree->owner == IO_TREE_INODE_IO) 462 btrfs_merge_delalloc_extent(tree->inode, 463 state, entry); 464 entry->start = state->start; 465 merge_prev_state(tree, entry); 466 state->state = 0; 467 return entry; 468 } 469 node = &(*node)->rb_left; 470 } else if (state->end > entry->end) { 471 if (try_merge && entry->end == start && 472 state->state == entry->state) { 473 if (tree->owner == IO_TREE_INODE_IO) 474 btrfs_merge_delalloc_extent(tree->inode, 475 state, entry); 476 entry->end = state->end; 477 merge_next_state(tree, entry); 478 state->state = 0; 479 return entry; 480 } 481 node = &(*node)->rb_right; 482 } else { 483 return ERR_PTR(-EEXIST); 484 } 485 } 486 487 rb_link_node(&state->rb_node, parent, node); 488 rb_insert_color(&state->rb_node, &tree->state); 489 490 return state; 491 } 492 493 /* 494 * Insert state to @tree to the location given by @node and @parent. 495 */ 496 static void insert_state_fast(struct extent_io_tree *tree, 497 struct extent_state *state, struct rb_node **node, 498 struct rb_node *parent, unsigned bits, 499 struct extent_changeset *changeset) 500 { 501 validate_extent_state(tree, state); 502 503 set_state_bits(tree, state, bits, changeset); 504 rb_link_node(&state->rb_node, parent, node); 505 rb_insert_color(&state->rb_node, &tree->state); 506 merge_state(tree, state); 507 } 508 509 /* 510 * Split a given extent state struct in two, inserting the preallocated 511 * struct 'prealloc' as the newly created second half. 'split' indicates an 512 * offset inside 'orig' where it should be split. 513 * 514 * Before calling, 515 * the tree has 'orig' at [orig->start, orig->end]. After calling, there 516 * are two extent state structs in the tree: 517 * prealloc: [orig->start, split - 1] 518 * orig: [ split, orig->end ] 519 * 520 * The tree locks are not taken by this function. They need to be held 521 * by the caller. 522 */ 523 static int split_state(struct extent_io_tree *tree, struct extent_state *orig, 524 struct extent_state *prealloc, u64 split) 525 { 526 struct rb_node *parent = NULL; 527 struct rb_node **node; 528 529 if (tree->owner == IO_TREE_INODE_IO) 530 btrfs_split_delalloc_extent(tree->inode, orig, split); 531 532 prealloc->start = orig->start; 533 prealloc->end = split - 1; 534 prealloc->state = orig->state; 535 orig->start = split; 536 537 parent = &orig->rb_node; 538 node = &parent; 539 while (*node) { 540 struct extent_state *entry; 541 542 parent = *node; 543 entry = rb_entry(parent, struct extent_state, rb_node); 544 545 if (prealloc->end < entry->start) { 546 node = &(*node)->rb_left; 547 } else if (prealloc->end > entry->end) { 548 node = &(*node)->rb_right; 549 } else { 550 btrfs_free_extent_state(prealloc); 551 return -EEXIST; 552 } 553 } 554 555 validate_extent_state(tree, orig); 556 validate_extent_state(tree, prealloc); 557 rb_link_node(&prealloc->rb_node, parent, node); 558 rb_insert_color(&prealloc->rb_node, &tree->state); 559 560 return 0; 561 } 562 563 static inline void state_wake_up(struct extent_io_tree *tree, 564 struct extent_state *state, u32 bits) 565 { 566 lockdep_assert_held(&tree->lock); 567 568 if (!(bits & EXTENT_LOCK_BITS)) 569 return; 570 571 /* 572 * No memory barriers because the tree's lock is held while: 573 * 574 * 1) Adding waiters to the queue. 575 * 2) Waking up waiters. 576 * 3) Removing waiters from queue. 577 */ 578 cond_wake_up_nomb(&state->wq); 579 } 580 581 /* 582 * Use this during tree iteration to avoid doing next node searches when it's 583 * not needed (the current record ends at or after the target range's end). 584 */ 585 static inline struct extent_state *next_search_state(struct extent_state *state, u64 end) 586 { 587 if (state->end < end) 588 return next_state(state); 589 590 return NULL; 591 } 592 593 /* 594 * Utility function to clear some bits in an extent state struct. It will 595 * optionally wake up anyone waiting on this state. 596 * 597 * If no bits are set on the state struct after clearing things, the 598 * struct is freed and removed from the tree 599 */ 600 static struct extent_state *clear_state_bit(struct extent_io_tree *tree, 601 struct extent_state *state, 602 u32 bits, u64 end, 603 struct extent_changeset *changeset) 604 { 605 struct extent_state *next; 606 u32 bits_to_clear = bits & ~EXTENT_CTLBITS; 607 int ret; 608 609 if (tree->owner == IO_TREE_INODE_IO) 610 btrfs_clear_delalloc_extent(tree->inode, state, bits); 611 612 ret = add_extent_changeset(state, bits_to_clear, changeset, false); 613 if (unlikely(ret)) 614 extent_io_tree_panic(tree, state, "add_extent_changeset", ret); 615 state->state &= ~bits_to_clear; 616 state_wake_up(tree, state, bits); 617 if (state->state == 0) { 618 if (unlikely(!extent_state_in_tree(state))) 619 extent_io_tree_panic(tree, state, "extent_state_in_tree", -EUCLEAN); 620 621 next = next_search_state(state, end); 622 rb_erase(&state->rb_node, &tree->state); 623 RB_CLEAR_NODE(&state->rb_node); 624 btrfs_free_extent_state(state); 625 } else { 626 merge_state(tree, state); 627 next = next_search_state(state, end); 628 } 629 return next; 630 } 631 632 /* 633 * Detect if extent bits request NOWAIT semantics and set the gfp mask accordingly, 634 * unset the EXTENT_NOWAIT bit. 635 */ 636 static void set_gfp_mask_from_bits(u32 *bits, gfp_t *mask) 637 { 638 *mask = (*bits & EXTENT_NOWAIT ? GFP_NOWAIT : GFP_NOFS); 639 *bits &= EXTENT_NOWAIT - 1; 640 } 641 642 /* 643 * Clear some bits on a range in the tree. This may require splitting or 644 * inserting elements in the tree, so the gfp mask is used to indicate which 645 * allocations or sleeping are allowed. 646 * 647 * The range [start, end] is inclusive. 648 * 649 * This takes the tree lock, and returns 0 on success and < 0 on error. 650 */ 651 int btrfs_clear_extent_bit_changeset(struct extent_io_tree *tree, u64 start, u64 end, 652 u32 bits, struct extent_state **cached_state, 653 struct extent_changeset *changeset) 654 { 655 struct extent_state *state; 656 struct extent_state *cached; 657 struct extent_state *prealloc = NULL; 658 u64 last_end; 659 int ret = 0; 660 bool clear; 661 const bool delete = (bits & EXTENT_CLEAR_ALL_BITS); 662 const u32 bits_to_clear = (bits & ~EXTENT_CTLBITS); 663 gfp_t mask; 664 665 set_gfp_mask_from_bits(&bits, &mask); 666 btrfs_debug_check_extent_io_range(tree, start, end); 667 trace_btrfs_clear_extent_bit(tree, start, end - start + 1, bits); 668 669 if (delete) 670 bits |= ~EXTENT_CTLBITS; 671 672 if (bits & EXTENT_DELALLOC) 673 bits |= EXTENT_NORESERVE; 674 675 clear = (bits & (EXTENT_LOCK_BITS | EXTENT_BOUNDARY)); 676 again: 677 if (!prealloc) { 678 /* 679 * Don't care for allocation failure here because we might end 680 * up not needing the pre-allocated extent state at all, which 681 * is the case if we only have in the tree extent states that 682 * cover our input range and don't cover too any other range. 683 * If we end up needing a new extent state we allocate it later. 684 */ 685 prealloc = alloc_extent_state(mask); 686 } 687 688 spin_lock(&tree->lock); 689 if (cached_state) { 690 cached = *cached_state; 691 692 if (clear) { 693 *cached_state = NULL; 694 cached_state = NULL; 695 } 696 697 if (cached && extent_state_in_tree(cached) && 698 cached->start <= start && cached->end > start) { 699 if (clear) 700 refcount_dec(&cached->refs); 701 state = cached; 702 goto hit_next; 703 } 704 if (clear) 705 btrfs_free_extent_state(cached); 706 } 707 708 /* This search will find the extents that end after our range starts. */ 709 state = tree_search(tree, start); 710 if (!state) 711 goto out; 712 hit_next: 713 if (state->start > end) 714 goto out; 715 WARN_ON(state->end < start); 716 last_end = state->end; 717 718 /* The state doesn't have the wanted bits, go ahead. */ 719 if (!(state->state & bits)) { 720 state = next_search_state(state, end); 721 goto next; 722 } 723 724 /* 725 * | ---- desired range ---- | 726 * | state | or 727 * | ------------- state -------------- | 728 * 729 * We need to split the extent we found, and may flip bits on second 730 * half. 731 * 732 * If the extent we found extends past our range, we just split and 733 * search again. It'll get split again the next time though. 734 * 735 * If the extent we found is inside our range, we clear the desired bit 736 * on it. 737 */ 738 739 if (state->start < start) { 740 /* 741 * If all bits are cleared, there's no point in allocating or 742 * using the prealloc extent, split the state record, insert the 743 * prealloc record and then remove this record. We can just 744 * adjust this record and move on to the next without adding or 745 * removing anything to the tree. 746 */ 747 if (state->end <= end && (state->state & ~bits_to_clear) == 0) { 748 const u64 orig_start = state->start; 749 750 if (tree->owner == IO_TREE_INODE_IO) 751 btrfs_split_delalloc_extent(tree->inode, state, start); 752 753 /* 754 * Temporarily ajdust this state's range to match the 755 * range for which we are clearing bits. 756 */ 757 state->start = start; 758 759 ret = add_extent_changeset(state, bits_to_clear, changeset, false); 760 if (unlikely(ret < 0)) { 761 extent_io_tree_panic(tree, state, 762 "add_extent_changeset", ret); 763 goto out; 764 } 765 766 if (tree->owner == IO_TREE_INODE_IO) 767 btrfs_clear_delalloc_extent(tree->inode, state, bits); 768 769 /* 770 * Now adjust the range to the section for which no bits 771 * are cleared. 772 */ 773 state->start = orig_start; 774 state->end = start - 1; 775 776 state_wake_up(tree, state, bits); 777 state = next_search_state(state, end); 778 goto next; 779 } 780 781 prealloc = alloc_extent_state_atomic(prealloc); 782 if (!prealloc) 783 goto search_again; 784 ret = split_state(tree, state, prealloc, start); 785 prealloc = NULL; 786 if (unlikely(ret)) { 787 extent_io_tree_panic(tree, state, "split", ret); 788 goto out; 789 } 790 if (state->end <= end) { 791 state = clear_state_bit(tree, state, bits, end, changeset); 792 goto next; 793 } 794 if (need_resched()) 795 goto search_again; 796 /* 797 * Fallthrough and try atomic extent state allocation if needed. 798 * If it fails we'll jump to 'search_again' retry the allocation 799 * in non-atomic mode and start the search again. 800 */ 801 } 802 /* 803 * | ---- desired range ---- | 804 * | state | 805 * We need to split the extent, and clear the bit on the first half. 806 */ 807 if (state->start <= end && state->end > end) { 808 /* 809 * If all bits are cleared, there's no point in allocating or 810 * using the prealloc extent, split the state record, insert the 811 * prealloc record and then remove it. We can just adjust the 812 * start offset of the current state and avoid all that. 813 */ 814 if ((state->state & ~bits_to_clear) == 0) { 815 const u64 orig_end = state->end; 816 817 if (tree->owner == IO_TREE_INODE_IO) 818 btrfs_split_delalloc_extent(tree->inode, state, end + 1); 819 820 /* 821 * Temporarily adjust the end offset to match the 822 * removed subrange to update the changeset. 823 */ 824 state->end = end; 825 826 ret = add_extent_changeset(state, bits_to_clear, changeset, false); 827 if (unlikely(ret < 0)) { 828 extent_io_tree_panic(tree, state, 829 "add_extent_changeset", ret); 830 goto out; 831 } 832 833 if (tree->owner == IO_TREE_INODE_IO) 834 btrfs_clear_delalloc_extent(tree->inode, state, bits); 835 836 state->start = end + 1; 837 state->end = orig_end; 838 839 state_wake_up(tree, state, bits); 840 goto out; 841 } 842 843 prealloc = alloc_extent_state_atomic(prealloc); 844 if (!prealloc) 845 goto search_again; 846 ret = split_state(tree, state, prealloc, end + 1); 847 if (unlikely(ret)) { 848 extent_io_tree_panic(tree, state, "split", ret); 849 prealloc = NULL; 850 goto out; 851 } 852 853 state_wake_up(tree, state, bits); 854 855 clear_state_bit(tree, prealloc, bits, end, changeset); 856 857 prealloc = NULL; 858 goto out; 859 } 860 861 state = clear_state_bit(tree, state, bits, end, changeset); 862 next: 863 if (last_end >= end) 864 goto out; 865 start = last_end + 1; 866 if (state && !need_resched()) 867 goto hit_next; 868 869 search_again: 870 spin_unlock(&tree->lock); 871 if (gfpflags_allow_blocking(mask)) 872 cond_resched(); 873 goto again; 874 875 out: 876 spin_unlock(&tree->lock); 877 btrfs_free_extent_state(prealloc); 878 879 return ret; 880 881 } 882 883 /* 884 * Wait for one or more bits to clear on a range in the state tree. 885 * The range [start, end] is inclusive. 886 * The tree lock is taken by this function 887 */ 888 static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 889 u32 bits, struct extent_state **cached_state) 890 { 891 struct extent_state *state; 892 893 btrfs_debug_check_extent_io_range(tree, start, end); 894 895 spin_lock(&tree->lock); 896 again: 897 /* 898 * Maintain cached_state, as we may not remove it from the tree if there 899 * are more bits than the bits we're waiting on set on this state. 900 */ 901 if (cached_state && *cached_state) { 902 state = *cached_state; 903 if (extent_state_in_tree(state) && 904 state->start <= start && start < state->end) 905 goto process_node; 906 } 907 while (1) { 908 /* 909 * This search will find all the extents that end after our 910 * range starts. 911 */ 912 state = tree_search(tree, start); 913 process_node: 914 if (!state) 915 break; 916 if (state->start > end) 917 goto out; 918 919 if (state->state & bits) { 920 DEFINE_WAIT(wait); 921 922 start = state->start; 923 refcount_inc(&state->refs); 924 prepare_to_wait(&state->wq, &wait, TASK_UNINTERRUPTIBLE); 925 spin_unlock(&tree->lock); 926 schedule(); 927 spin_lock(&tree->lock); 928 finish_wait(&state->wq, &wait); 929 btrfs_free_extent_state(state); 930 goto again; 931 } 932 start = state->end + 1; 933 934 if (start > end) 935 break; 936 937 if (!cond_resched_lock(&tree->lock)) { 938 state = next_state(state); 939 goto process_node; 940 } 941 } 942 out: 943 spin_unlock(&tree->lock); 944 /* This state is no longer useful, clear it and free it up. */ 945 if (cached_state && *cached_state) { 946 state = *cached_state; 947 *cached_state = NULL; 948 btrfs_free_extent_state(state); 949 } 950 } 951 952 static void cache_state_if_flags(struct extent_state *state, 953 struct extent_state **cached_ptr, 954 unsigned flags) 955 { 956 if (cached_ptr && !(*cached_ptr)) { 957 if (!flags || (state->state & flags)) { 958 *cached_ptr = state; 959 refcount_inc(&state->refs); 960 } 961 } 962 } 963 964 static void cache_state(struct extent_state *state, 965 struct extent_state **cached_ptr) 966 { 967 return cache_state_if_flags(state, cached_ptr, EXTENT_LOCK_BITS | EXTENT_BOUNDARY); 968 } 969 970 /* 971 * Find the first state struct with 'bits' set after 'start', and return it. 972 * tree->lock must be held. NULL will returned if nothing was found after 973 * 'start'. 974 */ 975 static struct extent_state *find_first_extent_bit_state(struct extent_io_tree *tree, 976 u64 start, u32 bits) 977 { 978 struct extent_state *state; 979 980 /* 981 * This search will find all the extents that end after our range 982 * starts. 983 */ 984 state = tree_search(tree, start); 985 while (state) { 986 if (state->state & bits) 987 return state; 988 state = next_state(state); 989 } 990 return NULL; 991 } 992 993 /* 994 * Find the first offset in the io tree with one or more @bits set. 995 * 996 * Note: If there are multiple bits set in @bits, any of them will match. 997 * 998 * Return true if we find something, and update @start_ret and @end_ret. 999 * Return false if we found nothing. 1000 */ 1001 bool btrfs_find_first_extent_bit(struct extent_io_tree *tree, u64 start, 1002 u64 *start_ret, u64 *end_ret, u32 bits, 1003 struct extent_state **cached_state) 1004 { 1005 struct extent_state *state; 1006 bool ret = false; 1007 1008 spin_lock(&tree->lock); 1009 if (cached_state && *cached_state) { 1010 state = *cached_state; 1011 if (state->end == start - 1 && extent_state_in_tree(state)) { 1012 while ((state = next_state(state)) != NULL) { 1013 if (state->state & bits) 1014 break; 1015 } 1016 /* 1017 * If we found the next extent state, clear cached_state 1018 * so that we can cache the next extent state below and 1019 * avoid future calls going over the same extent state 1020 * again. If we haven't found any, clear as well since 1021 * it's now useless. 1022 */ 1023 btrfs_free_extent_state(*cached_state); 1024 *cached_state = NULL; 1025 if (state) 1026 goto got_it; 1027 goto out; 1028 } 1029 btrfs_free_extent_state(*cached_state); 1030 *cached_state = NULL; 1031 } 1032 1033 state = find_first_extent_bit_state(tree, start, bits); 1034 got_it: 1035 if (state) { 1036 cache_state_if_flags(state, cached_state, 0); 1037 *start_ret = state->start; 1038 *end_ret = state->end; 1039 ret = true; 1040 } 1041 out: 1042 spin_unlock(&tree->lock); 1043 return ret; 1044 } 1045 1046 /* 1047 * Find a contiguous area of bits 1048 * 1049 * @tree: io tree to check 1050 * @start: offset to start the search from 1051 * @start_ret: the first offset we found with the bits set 1052 * @end_ret: the final contiguous range of the bits that were set 1053 * @bits: bits to look for 1054 * 1055 * set_extent_bit and clear_extent_bit can temporarily split contiguous ranges 1056 * to set bits appropriately, and then merge them again. During this time it 1057 * will drop the tree->lock, so use this helper if you want to find the actual 1058 * contiguous area for given bits. We will search to the first bit we find, and 1059 * then walk down the tree until we find a non-contiguous area. The area 1060 * returned will be the full contiguous area with the bits set. 1061 * 1062 * Returns true if we found a range with the given bits set, in which case 1063 * @start_ret and @end_ret are updated, or false if no range was found. 1064 */ 1065 bool btrfs_find_contiguous_extent_bit(struct extent_io_tree *tree, u64 start, 1066 u64 *start_ret, u64 *end_ret, u32 bits) 1067 { 1068 struct extent_state *state; 1069 bool ret = false; 1070 1071 ASSERT(!btrfs_fs_incompat(btrfs_extent_io_tree_to_fs_info(tree), NO_HOLES)); 1072 1073 spin_lock(&tree->lock); 1074 state = find_first_extent_bit_state(tree, start, bits); 1075 if (state) { 1076 *start_ret = state->start; 1077 *end_ret = state->end; 1078 while ((state = next_state(state)) != NULL) { 1079 if (state->start > (*end_ret + 1)) 1080 break; 1081 *end_ret = state->end; 1082 } 1083 ret = true; 1084 } 1085 spin_unlock(&tree->lock); 1086 return ret; 1087 } 1088 1089 /* 1090 * Find a contiguous range of bytes in the file marked as delalloc, not more 1091 * than 'max_bytes'. start and end are used to return the range, 1092 * 1093 * True is returned if we find something, false if nothing was in the tree. 1094 */ 1095 bool btrfs_find_delalloc_range(struct extent_io_tree *tree, u64 *start, 1096 u64 *end, u64 max_bytes, 1097 struct extent_state **cached_state) 1098 { 1099 struct extent_state *state; 1100 u64 cur_start = *start; 1101 bool found = false; 1102 u64 total_bytes = 0; 1103 1104 spin_lock(&tree->lock); 1105 1106 /* 1107 * This search will find all the extents that end after our range 1108 * starts. 1109 */ 1110 state = tree_search(tree, cur_start); 1111 if (!state) { 1112 *end = (u64)-1; 1113 goto out; 1114 } 1115 1116 while (state) { 1117 if (found && (state->start != cur_start || 1118 (state->state & EXTENT_BOUNDARY))) { 1119 goto out; 1120 } 1121 if (!(state->state & EXTENT_DELALLOC)) { 1122 if (!found) 1123 *end = state->end; 1124 goto out; 1125 } 1126 if (!found) { 1127 *start = state->start; 1128 *cached_state = state; 1129 refcount_inc(&state->refs); 1130 } 1131 found = true; 1132 *end = state->end; 1133 cur_start = state->end + 1; 1134 total_bytes += state->end - state->start + 1; 1135 if (total_bytes >= max_bytes) 1136 break; 1137 state = next_state(state); 1138 } 1139 out: 1140 spin_unlock(&tree->lock); 1141 return found; 1142 } 1143 1144 /* 1145 * Set some bits on a range in the tree. This may require allocations or 1146 * sleeping. By default all allocations use GFP_NOFS, use EXTENT_NOWAIT for 1147 * GFP_NOWAIT. 1148 * 1149 * If any of the exclusive bits are set, this will fail with -EEXIST if some 1150 * part of the range already has the desired bits set. The extent_state of the 1151 * existing range is returned in failed_state in this case, and the start of the 1152 * existing range is returned in failed_start. failed_state is used as an 1153 * optimization for wait_extent_bit, failed_start must be used as the source of 1154 * truth as failed_state may have changed since we returned. 1155 * 1156 * [start, end] is inclusive This takes the tree lock. 1157 */ 1158 static int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 1159 u32 bits, u64 *failed_start, 1160 struct extent_state **failed_state, 1161 struct extent_state **cached_state, 1162 struct extent_changeset *changeset) 1163 { 1164 struct extent_state *state; 1165 struct extent_state *prealloc = NULL; 1166 struct rb_node **p = NULL; 1167 struct rb_node *parent = NULL; 1168 int ret = 0; 1169 u64 last_start; 1170 u64 last_end; 1171 u32 exclusive_bits = (bits & EXTENT_LOCK_BITS); 1172 gfp_t mask; 1173 1174 set_gfp_mask_from_bits(&bits, &mask); 1175 btrfs_debug_check_extent_io_range(tree, start, end); 1176 trace_btrfs_set_extent_bit(tree, start, end - start + 1, bits); 1177 1178 if (exclusive_bits) 1179 ASSERT(failed_start); 1180 else 1181 ASSERT(failed_start == NULL && failed_state == NULL); 1182 again: 1183 if (!prealloc) { 1184 /* 1185 * Don't care for allocation failure here because we might end 1186 * up not needing the pre-allocated extent state at all, which 1187 * is the case if we only have in the tree extent states that 1188 * cover our input range and don't cover too any other range. 1189 * If we end up needing a new extent state we allocate it later. 1190 */ 1191 prealloc = alloc_extent_state(mask); 1192 } 1193 /* Optimistically preallocate the extent changeset ulist node. */ 1194 if (changeset) 1195 extent_changeset_prealloc(changeset, mask); 1196 1197 spin_lock(&tree->lock); 1198 if (cached_state && *cached_state) { 1199 state = *cached_state; 1200 if (state->start <= start && state->end > start && 1201 extent_state_in_tree(state)) 1202 goto hit_next; 1203 } 1204 /* 1205 * This search will find all the extents that end after our range 1206 * starts. 1207 */ 1208 state = tree_search_for_insert(tree, start, &p, &parent); 1209 if (!state) { 1210 prealloc = alloc_extent_state_atomic(prealloc); 1211 if (!prealloc) 1212 goto search_again; 1213 prealloc->start = start; 1214 prealloc->end = end; 1215 insert_state_fast(tree, prealloc, p, parent, bits, changeset); 1216 cache_state(prealloc, cached_state); 1217 prealloc = NULL; 1218 goto out; 1219 } 1220 hit_next: 1221 last_start = state->start; 1222 last_end = state->end; 1223 1224 /* 1225 * | ---- desired range ---- | 1226 * | state | 1227 * 1228 * Just lock what we found and keep going 1229 */ 1230 if (state->start == start && state->end <= end) { 1231 if (state->state & exclusive_bits) { 1232 *failed_start = state->start; 1233 cache_state(state, failed_state); 1234 ret = -EEXIST; 1235 goto out; 1236 } 1237 1238 set_state_bits(tree, state, bits, changeset); 1239 cache_state(state, cached_state); 1240 merge_state(tree, state); 1241 if (last_end >= end) 1242 goto out; 1243 start = last_end + 1; 1244 state = next_state(state); 1245 if (state && state->start == start && !need_resched()) 1246 goto hit_next; 1247 goto search_again; 1248 } 1249 1250 /* 1251 * | ---- desired range ---- | 1252 * | state | 1253 * or 1254 * | ------------- state -------------- | 1255 * 1256 * We need to split the extent we found, and may flip bits on second 1257 * half. 1258 * 1259 * If the extent we found extends past our range, we just split and 1260 * search again. It'll get split again the next time though. 1261 * 1262 * If the extent we found is inside our range, we set the desired bit 1263 * on it. 1264 */ 1265 if (state->start < start) { 1266 if (state->state & exclusive_bits) { 1267 *failed_start = start; 1268 cache_state(state, failed_state); 1269 ret = -EEXIST; 1270 goto out; 1271 } 1272 1273 /* 1274 * If this extent already has all the bits we want set, then 1275 * skip it, not necessary to split it or do anything with it. 1276 */ 1277 if ((state->state & bits) == bits) { 1278 start = state->end + 1; 1279 cache_state(state, cached_state); 1280 goto search_again; 1281 } 1282 1283 prealloc = alloc_extent_state_atomic(prealloc); 1284 if (!prealloc) 1285 goto search_again; 1286 ret = split_state(tree, state, prealloc, start); 1287 if (unlikely(ret)) 1288 extent_io_tree_panic(tree, state, "split", ret); 1289 1290 prealloc = NULL; 1291 if (ret) 1292 goto out; 1293 if (state->end <= end) { 1294 set_state_bits(tree, state, bits, changeset); 1295 cache_state(state, cached_state); 1296 merge_state(tree, state); 1297 if (last_end >= end) 1298 goto out; 1299 start = last_end + 1; 1300 state = next_state(state); 1301 if (state && state->start == start && !need_resched()) 1302 goto hit_next; 1303 } 1304 goto search_again; 1305 } 1306 /* 1307 * | ---- desired range ---- | 1308 * | state | or | state | 1309 * 1310 * There's a hole, we need to insert something in it and ignore the 1311 * extent we found. 1312 */ 1313 if (state->start > start) { 1314 struct extent_state *inserted_state; 1315 1316 prealloc = alloc_extent_state_atomic(prealloc); 1317 if (!prealloc) 1318 goto search_again; 1319 1320 /* 1321 * Avoid to free 'prealloc' if it can be merged with the later 1322 * extent. 1323 */ 1324 prealloc->start = start; 1325 if (end < last_start) 1326 prealloc->end = end; 1327 else 1328 prealloc->end = last_start - 1; 1329 1330 inserted_state = insert_state(tree, prealloc, bits, changeset); 1331 if (IS_ERR(inserted_state)) { 1332 ret = PTR_ERR(inserted_state); 1333 extent_io_tree_panic(tree, prealloc, "insert", ret); 1334 goto out; 1335 } 1336 1337 cache_state(inserted_state, cached_state); 1338 if (inserted_state == prealloc) 1339 prealloc = NULL; 1340 start = inserted_state->end + 1; 1341 1342 /* Beyond target range, stop. */ 1343 if (start > end) 1344 goto out; 1345 1346 if (need_resched()) 1347 goto search_again; 1348 1349 state = next_search_state(inserted_state, end); 1350 /* 1351 * If there's a next state, whether contiguous or not, we don't 1352 * need to unlock and start search again. If it's not contiguous 1353 * we will end up here and try to allocate a prealloc state and insert. 1354 */ 1355 if (state) 1356 goto hit_next; 1357 goto search_again; 1358 } 1359 /* 1360 * | ---- desired range ---- | 1361 * | state | 1362 * 1363 * We need to split the extent, and set the bit on the first half 1364 */ 1365 if (state->start <= end && state->end > end) { 1366 if (state->state & exclusive_bits) { 1367 *failed_start = start; 1368 cache_state(state, failed_state); 1369 ret = -EEXIST; 1370 goto out; 1371 } 1372 1373 prealloc = alloc_extent_state_atomic(prealloc); 1374 if (!prealloc) 1375 goto search_again; 1376 ret = split_state(tree, state, prealloc, end + 1); 1377 if (unlikely(ret)) { 1378 extent_io_tree_panic(tree, state, "split", ret); 1379 prealloc = NULL; 1380 goto out; 1381 } 1382 1383 set_state_bits(tree, prealloc, bits, changeset); 1384 cache_state(prealloc, cached_state); 1385 merge_state(tree, prealloc); 1386 prealloc = NULL; 1387 goto out; 1388 } 1389 1390 search_again: 1391 if (start > end) 1392 goto out; 1393 spin_unlock(&tree->lock); 1394 if (gfpflags_allow_blocking(mask)) 1395 cond_resched(); 1396 goto again; 1397 1398 out: 1399 spin_unlock(&tree->lock); 1400 btrfs_free_extent_state(prealloc); 1401 1402 return ret; 1403 1404 } 1405 1406 int btrfs_set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 1407 u32 bits, struct extent_state **cached_state) 1408 { 1409 return set_extent_bit(tree, start, end, bits, NULL, NULL, cached_state, NULL); 1410 } 1411 1412 /* 1413 * Convert all bits in a given range from one bit to another 1414 * 1415 * @tree: the io tree to search 1416 * @start: the start offset in bytes 1417 * @end: the end offset in bytes (inclusive) 1418 * @bits: the bits to set in this range 1419 * @clear_bits: the bits to clear in this range 1420 * @cached_state: state that we're going to cache 1421 * 1422 * This will go through and set bits for the given range. If any states exist 1423 * already in this range they are set with the given bit and cleared of the 1424 * clear_bits. This is only meant to be used by things that are mergeable, ie. 1425 * converting from say DELALLOC to DIRTY. This is not meant to be used with 1426 * boundary bits like LOCK. 1427 * 1428 * All allocations are done with GFP_NOFS. 1429 */ 1430 int btrfs_convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 1431 u32 bits, u32 clear_bits, 1432 struct extent_state **cached_state) 1433 { 1434 struct extent_state *state; 1435 struct extent_state *prealloc = NULL; 1436 struct rb_node **p = NULL; 1437 struct rb_node *parent = NULL; 1438 int ret = 0; 1439 u64 last_start; 1440 u64 last_end; 1441 bool first_iteration = true; 1442 1443 btrfs_debug_check_extent_io_range(tree, start, end); 1444 trace_btrfs_convert_extent_bit(tree, start, end - start + 1, bits, 1445 clear_bits); 1446 1447 again: 1448 if (!prealloc) { 1449 /* 1450 * Best effort, don't worry if extent state allocation fails 1451 * here for the first iteration. We might have a cached state 1452 * that matches exactly the target range, in which case no 1453 * extent state allocations are needed. We'll only know this 1454 * after locking the tree. 1455 */ 1456 prealloc = alloc_extent_state(GFP_NOFS); 1457 if (!prealloc && !first_iteration) 1458 return -ENOMEM; 1459 } 1460 1461 spin_lock(&tree->lock); 1462 if (cached_state && *cached_state) { 1463 state = *cached_state; 1464 if (state->start <= start && state->end > start && 1465 extent_state_in_tree(state)) 1466 goto hit_next; 1467 } 1468 1469 /* 1470 * This search will find all the extents that end after our range 1471 * starts. 1472 */ 1473 state = tree_search_for_insert(tree, start, &p, &parent); 1474 if (!state) { 1475 prealloc = alloc_extent_state_atomic(prealloc); 1476 if (!prealloc) { 1477 ret = -ENOMEM; 1478 goto out; 1479 } 1480 prealloc->start = start; 1481 prealloc->end = end; 1482 insert_state_fast(tree, prealloc, p, parent, bits, NULL); 1483 cache_state(prealloc, cached_state); 1484 prealloc = NULL; 1485 goto out; 1486 } 1487 hit_next: 1488 last_start = state->start; 1489 last_end = state->end; 1490 1491 /* 1492 * | ---- desired range ---- | 1493 * | state | 1494 * 1495 * Just lock what we found and keep going. 1496 */ 1497 if (state->start == start && state->end <= end) { 1498 set_state_bits(tree, state, bits, NULL); 1499 cache_state(state, cached_state); 1500 state = clear_state_bit(tree, state, clear_bits, end, NULL); 1501 if (last_end >= end) 1502 goto out; 1503 start = last_end + 1; 1504 if (state && state->start == start && !need_resched()) 1505 goto hit_next; 1506 goto search_again; 1507 } 1508 1509 /* 1510 * | ---- desired range ---- | 1511 * | state | 1512 * or 1513 * | ------------- state -------------- | 1514 * 1515 * We need to split the extent we found, and may flip bits on second 1516 * half. 1517 * 1518 * If the extent we found extends past our range, we just split and 1519 * search again. It'll get split again the next time though. 1520 * 1521 * If the extent we found is inside our range, we set the desired bit 1522 * on it. 1523 */ 1524 if (state->start < start) { 1525 prealloc = alloc_extent_state_atomic(prealloc); 1526 if (!prealloc) { 1527 ret = -ENOMEM; 1528 goto out; 1529 } 1530 ret = split_state(tree, state, prealloc, start); 1531 prealloc = NULL; 1532 if (unlikely(ret)) { 1533 extent_io_tree_panic(tree, state, "split", ret); 1534 goto out; 1535 } 1536 if (state->end <= end) { 1537 set_state_bits(tree, state, bits, NULL); 1538 cache_state(state, cached_state); 1539 state = clear_state_bit(tree, state, clear_bits, end, NULL); 1540 if (last_end >= end) 1541 goto out; 1542 start = last_end + 1; 1543 if (state && state->start == start && !need_resched()) 1544 goto hit_next; 1545 } 1546 goto search_again; 1547 } 1548 /* 1549 * | ---- desired range ---- | 1550 * | state | or | state | 1551 * 1552 * There's a hole, we need to insert something in it and ignore the 1553 * extent we found. 1554 */ 1555 if (state->start > start) { 1556 struct extent_state *inserted_state; 1557 1558 prealloc = alloc_extent_state_atomic(prealloc); 1559 if (!prealloc) { 1560 ret = -ENOMEM; 1561 goto out; 1562 } 1563 1564 /* 1565 * Avoid to free 'prealloc' if it can be merged with the later 1566 * extent. 1567 */ 1568 prealloc->start = start; 1569 if (end < last_start) 1570 prealloc->end = end; 1571 else 1572 prealloc->end = last_start - 1; 1573 1574 inserted_state = insert_state(tree, prealloc, bits, NULL); 1575 if (IS_ERR(inserted_state)) { 1576 ret = PTR_ERR(inserted_state); 1577 extent_io_tree_panic(tree, prealloc, "insert", ret); 1578 goto out; 1579 } 1580 cache_state(inserted_state, cached_state); 1581 if (inserted_state == prealloc) 1582 prealloc = NULL; 1583 start = inserted_state->end + 1; 1584 1585 /* Beyond target range, stop. */ 1586 if (start > end) 1587 goto out; 1588 1589 if (need_resched()) 1590 goto search_again; 1591 1592 state = next_search_state(inserted_state, end); 1593 /* 1594 * If there's a next state, whether contiguous or not, we don't 1595 * need to unlock and start search again. If it's not contiguous 1596 * we will end up here and try to allocate a prealloc state and insert. 1597 */ 1598 if (state) 1599 goto hit_next; 1600 goto search_again; 1601 } 1602 /* 1603 * | ---- desired range ---- | 1604 * | state | 1605 * 1606 * We need to split the extent, and set the bit on the first half. 1607 */ 1608 if (state->start <= end && state->end > end) { 1609 prealloc = alloc_extent_state_atomic(prealloc); 1610 if (!prealloc) { 1611 ret = -ENOMEM; 1612 goto out; 1613 } 1614 1615 ret = split_state(tree, state, prealloc, end + 1); 1616 if (unlikely(ret)) { 1617 extent_io_tree_panic(tree, state, "split", ret); 1618 prealloc = NULL; 1619 goto out; 1620 } 1621 1622 set_state_bits(tree, prealloc, bits, NULL); 1623 cache_state(prealloc, cached_state); 1624 clear_state_bit(tree, prealloc, clear_bits, end, NULL); 1625 prealloc = NULL; 1626 goto out; 1627 } 1628 1629 search_again: 1630 if (start > end) 1631 goto out; 1632 spin_unlock(&tree->lock); 1633 cond_resched(); 1634 first_iteration = false; 1635 goto again; 1636 1637 out: 1638 spin_unlock(&tree->lock); 1639 btrfs_free_extent_state(prealloc); 1640 1641 return ret; 1642 } 1643 1644 /* 1645 * Find the first range that has @bits not set. This range could start before 1646 * @start. 1647 * 1648 * @tree: the tree to search 1649 * @start: offset at/after which the found extent should start 1650 * @start_ret: records the beginning of the range 1651 * @end_ret: records the end of the range (inclusive) 1652 * @bits: the set of bits which must be unset 1653 * 1654 * Since unallocated range is also considered one which doesn't have the bits 1655 * set it's possible that @end_ret contains -1, this happens in case the range 1656 * spans (last_range_end, end of device]. In this case it's up to the caller to 1657 * trim @end_ret to the appropriate size. 1658 */ 1659 void btrfs_find_first_clear_extent_bit(struct extent_io_tree *tree, u64 start, 1660 u64 *start_ret, u64 *end_ret, u32 bits) 1661 { 1662 struct extent_state *state; 1663 struct extent_state *prev = NULL, *next = NULL; 1664 1665 spin_lock(&tree->lock); 1666 1667 /* Find first extent with bits cleared */ 1668 while (1) { 1669 state = tree_search_prev_next(tree, start, &prev, &next); 1670 if (!state && !next && !prev) { 1671 /* 1672 * Tree is completely empty, send full range and let 1673 * caller deal with it 1674 */ 1675 *start_ret = 0; 1676 *end_ret = -1; 1677 goto out; 1678 } else if (!state && !next) { 1679 /* 1680 * We are past the last allocated chunk, set start at 1681 * the end of the last extent. 1682 */ 1683 *start_ret = prev->end + 1; 1684 *end_ret = -1; 1685 goto out; 1686 } else if (!state) { 1687 state = next; 1688 } 1689 1690 /* 1691 * At this point 'state' either contains 'start' or start is 1692 * before 'state' 1693 */ 1694 if (in_range(start, state->start, state->end - state->start + 1)) { 1695 if (state->state & bits) { 1696 /* 1697 * |--range with bits sets--| 1698 * | 1699 * start 1700 */ 1701 start = state->end + 1; 1702 } else { 1703 /* 1704 * 'start' falls within a range that doesn't 1705 * have the bits set, so take its start as the 1706 * beginning of the desired range 1707 * 1708 * |--range with bits cleared----| 1709 * | 1710 * start 1711 */ 1712 *start_ret = state->start; 1713 break; 1714 } 1715 } else { 1716 /* 1717 * |---prev range---|---hole/unset---|---node range---| 1718 * | 1719 * start 1720 * 1721 * or 1722 * 1723 * |---hole/unset--||--first node--| 1724 * 0 | 1725 * start 1726 */ 1727 if (prev) 1728 *start_ret = prev->end + 1; 1729 else 1730 *start_ret = 0; 1731 break; 1732 } 1733 } 1734 1735 /* 1736 * Find the longest stretch from start until an entry which has the 1737 * bits set 1738 */ 1739 while (state) { 1740 if (state->end >= start && !(state->state & bits)) { 1741 *end_ret = state->end; 1742 } else { 1743 *end_ret = state->start - 1; 1744 break; 1745 } 1746 state = next_state(state); 1747 } 1748 out: 1749 spin_unlock(&tree->lock); 1750 } 1751 1752 /* 1753 * Count the number of bytes in the tree that have a given bit(s) set for a 1754 * given range. 1755 * 1756 * @tree: The io tree to search. 1757 * @start: The start offset of the range. This value is updated to the 1758 * offset of the first byte found with the given bit(s), so it 1759 * can end up being bigger than the initial value. 1760 * @search_end: The end offset (inclusive value) of the search range. 1761 * @max_bytes: The maximum byte count we are interested. The search stops 1762 * once it reaches this count. 1763 * @bits: The bits the range must have in order to be accounted for. 1764 * If multiple bits are set, then only subranges that have all 1765 * the bits set are accounted for. 1766 * @contig: Indicate if we should ignore holes in the range or not. If 1767 * this is true, then stop once we find a hole. 1768 * @cached_state: A cached state to be used across multiple calls to this 1769 * function in order to speedup searches. Use NULL if this is 1770 * called only once or if each call does not start where the 1771 * previous one ended. 1772 * 1773 * Returns the total number of bytes found within the given range that have 1774 * all given bits set. If the returned number of bytes is greater than zero 1775 * then @start is updated with the offset of the first byte with the bits set. 1776 */ 1777 u64 btrfs_count_range_bits(struct extent_io_tree *tree, 1778 u64 *start, u64 search_end, u64 max_bytes, 1779 u32 bits, bool contig, 1780 struct extent_state **cached_state) 1781 { 1782 struct extent_state *state = NULL; 1783 struct extent_state *cached; 1784 u64 cur_start = *start; 1785 u64 total_bytes = 0; 1786 u64 last = 0; 1787 bool found = false; 1788 1789 if (WARN_ON(search_end < cur_start)) 1790 return 0; 1791 1792 spin_lock(&tree->lock); 1793 1794 if (!cached_state || !*cached_state) 1795 goto search; 1796 1797 cached = *cached_state; 1798 1799 if (!extent_state_in_tree(cached)) 1800 goto search; 1801 1802 if (cached->start <= cur_start && cur_start <= cached->end) { 1803 state = cached; 1804 } else if (cached->start > cur_start) { 1805 struct extent_state *prev; 1806 1807 /* 1808 * The cached state starts after our search range's start. Check 1809 * if the previous state record starts at or before the range we 1810 * are looking for, and if so, use it - this is a common case 1811 * when there are holes between records in the tree. If there is 1812 * no previous state record, we can start from our cached state. 1813 */ 1814 prev = prev_state(cached); 1815 if (!prev) 1816 state = cached; 1817 else if (prev->start <= cur_start && cur_start <= prev->end) 1818 state = prev; 1819 } 1820 1821 /* 1822 * This search will find all the extents that end after our range 1823 * starts. 1824 */ 1825 search: 1826 if (!state) 1827 state = tree_search(tree, cur_start); 1828 1829 while (state) { 1830 if (state->start > search_end) 1831 break; 1832 if (contig && found && state->start > last + 1) 1833 break; 1834 if (state->end >= cur_start && (state->state & bits) == bits) { 1835 total_bytes += min(search_end, state->end) + 1 - 1836 max(cur_start, state->start); 1837 if (total_bytes >= max_bytes) 1838 break; 1839 if (!found) { 1840 *start = max(cur_start, state->start); 1841 found = true; 1842 } 1843 last = state->end; 1844 } else if (contig && found) { 1845 break; 1846 } 1847 state = next_state(state); 1848 } 1849 1850 if (cached_state) { 1851 btrfs_free_extent_state(*cached_state); 1852 *cached_state = state; 1853 if (state) 1854 refcount_inc(&state->refs); 1855 } 1856 1857 spin_unlock(&tree->lock); 1858 1859 return total_bytes; 1860 } 1861 1862 /* 1863 * Check if the single @bit exists in the given range. 1864 */ 1865 bool btrfs_test_range_bit_exists(struct extent_io_tree *tree, u64 start, u64 end, u32 bit) 1866 { 1867 struct extent_state *state; 1868 bool bitset = false; 1869 1870 ASSERT(is_power_of_2(bit)); 1871 1872 spin_lock(&tree->lock); 1873 state = tree_search(tree, start); 1874 while (state) { 1875 if (state->start > end) 1876 break; 1877 1878 if (state->state & bit) { 1879 bitset = true; 1880 break; 1881 } 1882 1883 if (state->end >= end) 1884 break; 1885 state = next_state(state); 1886 } 1887 spin_unlock(&tree->lock); 1888 return bitset; 1889 } 1890 1891 void btrfs_get_range_bits(struct extent_io_tree *tree, u64 start, u64 end, u32 *bits, 1892 struct extent_state **cached_state) 1893 { 1894 struct extent_state *state; 1895 1896 /* 1897 * The cached state is currently mandatory and not used to start the 1898 * search, only to cache the first state record found in the range. 1899 */ 1900 ASSERT(cached_state != NULL); 1901 ASSERT(*cached_state == NULL); 1902 1903 *bits = 0; 1904 1905 spin_lock(&tree->lock); 1906 state = tree_search(tree, start); 1907 if (state && state->start < end) { 1908 *cached_state = state; 1909 refcount_inc(&state->refs); 1910 } 1911 while (state) { 1912 if (state->start > end) 1913 break; 1914 1915 *bits |= state->state; 1916 1917 if (state->end >= end) 1918 break; 1919 1920 state = next_state(state); 1921 } 1922 spin_unlock(&tree->lock); 1923 } 1924 1925 /* 1926 * Check if the whole range [@start,@end) contains the single @bit set. 1927 */ 1928 bool btrfs_test_range_bit(struct extent_io_tree *tree, u64 start, u64 end, u32 bit, 1929 struct extent_state *cached) 1930 { 1931 struct extent_state *state; 1932 bool bitset = true; 1933 1934 ASSERT(is_power_of_2(bit)); 1935 ASSERT(start < end); 1936 1937 spin_lock(&tree->lock); 1938 if (cached && extent_state_in_tree(cached) && cached->start <= start && 1939 cached->end > start) 1940 state = cached; 1941 else 1942 state = tree_search(tree, start); 1943 while (state) { 1944 if (state->start > start) { 1945 bitset = false; 1946 break; 1947 } 1948 1949 if ((state->state & bit) == 0) { 1950 bitset = false; 1951 break; 1952 } 1953 1954 if (state->end >= end) 1955 break; 1956 1957 /* Next state must start where this one ends. */ 1958 start = state->end + 1; 1959 state = next_state(state); 1960 } 1961 1962 /* We ran out of states and were still inside of our range. */ 1963 if (!state) 1964 bitset = false; 1965 spin_unlock(&tree->lock); 1966 return bitset; 1967 } 1968 1969 /* Wrappers around set/clear extent bit */ 1970 int btrfs_set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 1971 u32 bits, struct extent_changeset *changeset) 1972 { 1973 /* 1974 * We don't support EXTENT_LOCK_BITS yet, as current changeset will 1975 * record any bits changed, so for EXTENT_LOCK_BITS case, it will either 1976 * fail with -EEXIST or changeset will record the whole range. 1977 */ 1978 ASSERT(!(bits & EXTENT_LOCK_BITS)); 1979 1980 return set_extent_bit(tree, start, end, bits, NULL, NULL, NULL, changeset); 1981 } 1982 1983 int btrfs_clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 1984 u32 bits, struct extent_changeset *changeset) 1985 { 1986 /* 1987 * Don't support EXTENT_LOCK_BITS case, same reason as 1988 * set_record_extent_bits(). 1989 */ 1990 ASSERT(!(bits & EXTENT_LOCK_BITS)); 1991 1992 return btrfs_clear_extent_bit_changeset(tree, start, end, bits, NULL, changeset); 1993 } 1994 1995 bool btrfs_try_lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 1996 u32 bits, struct extent_state **cached) 1997 { 1998 int ret; 1999 u64 failed_start; 2000 2001 ret = set_extent_bit(tree, start, end, bits, &failed_start, NULL, cached, NULL); 2002 if (ret == -EEXIST) { 2003 if (failed_start > start) 2004 btrfs_clear_extent_bit(tree, start, failed_start - 1, 2005 bits, cached); 2006 return 0; 2007 } 2008 return 1; 2009 } 2010 2011 /* 2012 * Either insert or lock state struct between start and end use mask to tell 2013 * us if waiting is desired. 2014 */ 2015 int btrfs_lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, u32 bits, 2016 struct extent_state **cached_state) 2017 { 2018 struct extent_state *failed_state = NULL; 2019 int ret; 2020 u64 failed_start; 2021 2022 ret = set_extent_bit(tree, start, end, bits, &failed_start, 2023 &failed_state, cached_state, NULL); 2024 while (ret == -EEXIST) { 2025 if (failed_start != start) 2026 btrfs_clear_extent_bit(tree, start, failed_start - 1, 2027 bits, cached_state); 2028 2029 wait_extent_bit(tree, failed_start, end, bits, &failed_state); 2030 ret = set_extent_bit(tree, start, end, bits, &failed_start, 2031 &failed_state, cached_state, NULL); 2032 } 2033 return ret; 2034 } 2035 2036 /* 2037 * Get the extent state that follows the given extent state. 2038 * This is meant to be used in a context where we know no other tasks can 2039 * concurrently modify the tree. 2040 */ 2041 struct extent_state *btrfs_next_extent_state(struct extent_io_tree *tree, 2042 struct extent_state *state) 2043 { 2044 struct extent_state *next; 2045 2046 spin_lock(&tree->lock); 2047 ASSERT(extent_state_in_tree(state)); 2048 next = next_state(state); 2049 if (next) 2050 refcount_inc(&next->refs); 2051 spin_unlock(&tree->lock); 2052 2053 return next; 2054 } 2055 2056 void __cold btrfs_extent_state_free_cachep(void) 2057 { 2058 btrfs_extent_state_leak_debug_check(); 2059 kmem_cache_destroy(extent_state_cache); 2060 } 2061 2062 int __init btrfs_extent_state_init_cachep(void) 2063 { 2064 extent_state_cache = kmem_cache_create("btrfs_extent_state", 2065 sizeof(struct extent_state), 0, 0, 2066 NULL); 2067 if (!extent_state_cache) 2068 return -ENOMEM; 2069 2070 return 0; 2071 } 2072