Lines Matching full:start
74 static u64 range_end(u64 start, u64 len) in range_end() argument
76 if (start + len < start) in range_end()
78 return start + len; in range_end()
87 u64 end = range_end(em->start, em->len); in tree_insert()
94 if (em->start < entry->start) { in tree_insert()
96 } else if (em->start >= extent_map_end(entry)) { in tree_insert()
105 while (parent && em->start >= extent_map_end(entry)) { in tree_insert()
110 if (end > entry->start && em->start < extent_map_end(entry)) in tree_insert()
115 while (parent && em->start < entry->start) { in tree_insert()
120 if (end > entry->start && em->start < extent_map_end(entry)) in tree_insert()
148 if (offset < entry->start) in __tree_search()
173 while (prev && offset < prev_entry->start) { in __tree_search()
215 if (extent_map_end(prev) != next->start) in mergeable_maps()
247 if (em->start != 0) { in try_merge_map()
252 em->start = merge->start; in try_merge_map()
287 * @start: logical offset in the file
295 int unpin_extent_cache(struct btrfs_inode *inode, u64 start, u64 len, u64 gen) in unpin_extent_cache() argument
304 em = lookup_extent_mapping(tree, start, len); in unpin_extent_cache()
310 start, len, gen); in unpin_extent_cache()
314 if (WARN_ON(em->start != start)) in unpin_extent_cache()
316 "found extent map for inode %llu (root %lld) with unexpected start offset %llu when unpinning exten… in unpin_extent_cache()
318 em->start, start, len, gen); in unpin_extent_cache()
322 em->mod_start = em->start; in unpin_extent_cache()
333 em->mod_start = em->start; in unpin_extent_cache()
358 em->mod_start = em->start; in setup_extent_mapping()
400 u64 start, u64 len, int strict) in __lookup_extent_mapping() argument
405 u64 end = range_end(start, len); in __lookup_extent_mapping()
407 rb_node = __tree_search(&tree->map.rb_root, start, &prev_or_next); in __lookup_extent_mapping()
417 if (strict && !(end > em->start && start < extent_map_end(em))) in __lookup_extent_mapping()
425 * Lookup extent_map that intersects @start + @len range.
428 * @start: byte offset to start the search
432 * [start, len] range. There may be additional objects in the tree that
437 u64 start, u64 len) in lookup_extent_mapping() argument
439 return __lookup_extent_mapping(tree, start, len, 1); in lookup_extent_mapping()
443 * Find a nearby extent map intersecting @start + @len (not an exact search).
446 * @start: byte offset to start the search
450 * [start, len] range.
455 u64 start, u64 len) in search_extent_mapping() argument
457 return __lookup_extent_mapping(tree, start, len, 0); in search_extent_mapping()
530 u64 start; in merge_extent_mapping() local
534 BUG_ON(map_start < em->start || map_start >= extent_map_end(em)); in merge_extent_mapping()
536 if (existing->start > map_start) { in merge_extent_mapping()
544 start = prev ? extent_map_end(prev) : em->start; in merge_extent_mapping()
545 start = max_t(u64, start, em->start); in merge_extent_mapping()
546 end = next ? next->start : extent_map_end(em); in merge_extent_mapping()
548 start_diff = start - em->start; in merge_extent_mapping()
549 em->start = start; in merge_extent_mapping()
550 em->len = end - start; in merge_extent_mapping()
565 * @start: start of the logical range btrfs_get_extent() is requesting
568 * Note that @em_in's range may be different from [start, start+len),
573 * a) Returning the existing extent in @em_in if @start is within the
582 struct extent_map **em_in, u64 start, u64 len) in btrfs_add_extent_mapping() argument
592 ASSERT(em->start == 0); in btrfs_add_extent_mapping()
602 existing = search_extent_mapping(em_tree, start, len); in btrfs_add_extent_mapping()
604 trace_btrfs_handle_em_exist(fs_info, existing, em, start, len); in btrfs_add_extent_mapping()
610 if (start >= existing->start && in btrfs_add_extent_mapping()
611 start < extent_map_end(existing)) { in btrfs_add_extent_mapping()
616 u64 orig_start = em->start; in btrfs_add_extent_mapping()
621 * the [start, start + len) range which overlaps in btrfs_add_extent_mapping()
624 em, start); in btrfs_add_extent_mapping()
629 "unexpected error %d: merge existing(start %llu len %llu) with em(start %llu len %llu)\n", in btrfs_add_extent_mapping()
630 ret, existing->start, existing->len, in btrfs_add_extent_mapping()
667 * @start: Start offset of the range.
671 * This drops all the extent maps that intersect the given range [@start, @end].
677 void btrfs_drop_extent_map_range(struct btrfs_inode *inode, u64 start, u64 end, in btrfs_drop_extent_map_range() argument
684 u64 len = end - start + 1; in btrfs_drop_extent_map_range()
686 WARN_ON(end < start); in btrfs_drop_extent_map_range()
688 if (start == 0 && !skip_pinned) { in btrfs_drop_extent_map_range()
710 em = lookup_extent_mapping(em_tree, start, len); in btrfs_drop_extent_map_range()
724 if (next_em->start < end) in btrfs_drop_extent_map_range()
732 start = em_end; in btrfs_drop_extent_map_range()
749 if (em->start >= start && em_end <= end) in btrfs_drop_extent_map_range()
755 if (em->start < start) { in btrfs_drop_extent_map_range()
762 split->start = em->start; in btrfs_drop_extent_map_range()
763 split->len = start - em->start; in btrfs_drop_extent_map_range()
777 split->orig_start = split->start; in btrfs_drop_extent_map_range()
798 split->start = end; in btrfs_drop_extent_map_range()
813 const u64 diff = start + len - em->start; in btrfs_drop_extent_map_range()
821 split->orig_start = split->start; in btrfs_drop_extent_map_range()
864 if ((em->start < start || em_end > end) && modified) { in btrfs_drop_extent_map_range()
906 const u64 end = new_em->start + new_em->len - 1; in btrfs_replace_extent_map_range()
921 btrfs_drop_extent_map_range(inode, new_em->start, end, false); in btrfs_replace_extent_map_range()
931 * Split off the first pre bytes from the extent_map at [start, start + len],
936 int split_extent_map(struct btrfs_inode *inode, u64 start, u64 len, u64 pre, in split_extent_map() argument
958 lock_extent(&inode->io_tree, start, start + len - 1, NULL); in split_extent_map()
960 em = lookup_extent_mapping(em_tree, start, len); in split_extent_map()
976 /* First, replace the em with a new extent_map starting from * em->start */ in split_extent_map()
977 split_pre->start = em->start; in split_extent_map()
979 split_pre->orig_start = split_pre->start; in split_extent_map()
991 * [em->start, em->start + pre] in split_extent_map()
995 split_mid->start = em->start + pre; in split_extent_map()
997 split_mid->orig_start = split_mid->start; in split_extent_map()
1013 unlock_extent(&inode->io_tree, start, start + len - 1, NULL); in split_extent_map()