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