Lines Matching refs:es
187 struct extent_status *es; in ext4_es_print_tree() local
188 es = rb_entry(node, struct extent_status, rb_node); in ext4_es_print_tree()
190 es->es_lblk, es->es_len, in ext4_es_print_tree()
191 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_print_tree()
200 static inline ext4_lblk_t ext4_es_end(struct extent_status *es) in ext4_es_end() argument
202 BUG_ON(es->es_lblk + es->es_len < es->es_lblk); in ext4_es_end()
203 return es->es_lblk + es->es_len - 1; in ext4_es_end()
214 struct extent_status *es = NULL; in __es_tree_search() local
217 es = rb_entry(node, struct extent_status, rb_node); in __es_tree_search()
218 if (lblk < es->es_lblk) in __es_tree_search()
220 else if (lblk > ext4_es_end(es)) in __es_tree_search()
223 return es; in __es_tree_search()
226 if (es && lblk < es->es_lblk) in __es_tree_search()
227 return es; in __es_tree_search()
229 if (es && lblk > ext4_es_end(es)) { in __es_tree_search()
230 node = rb_next(&es->rb_node); in __es_tree_search()
257 int (*matching_fn)(struct extent_status *es), in __es_find_extent_range() argument
259 struct extent_status *es) in __es_find_extent_range()
265 WARN_ON(es == NULL); in __es_find_extent_range()
271 es->es_lblk = es->es_len = es->es_pblk = 0; in __es_find_extent_range()
299 es->es_lblk = es1->es_lblk; in __es_find_extent_range()
300 es->es_len = es1->es_len; in __es_find_extent_range()
301 es->es_pblk = es1->es_pblk; in __es_find_extent_range()
310 int (*matching_fn)(struct extent_status *es), in ext4_es_find_extent_range() argument
312 struct extent_status *es) in ext4_es_find_extent_range()
320 __es_find_extent_range(inode, matching_fn, lblk, end, es); in ext4_es_find_extent_range()
323 trace_ext4_es_find_extent_range_exit(inode, es); in ext4_es_find_extent_range()
342 int (*matching_fn)(struct extent_status *es), in __es_scan_range() argument
345 struct extent_status es; in __es_scan_range() local
347 __es_find_extent_range(inode, matching_fn, start, end, &es); in __es_scan_range()
348 if (es.es_len == 0) in __es_scan_range()
350 else if (es.es_lblk <= start && in __es_scan_range()
351 start < es.es_lblk + es.es_len) in __es_scan_range()
353 else if (start <= es.es_lblk && es.es_lblk <= end) in __es_scan_range()
362 int (*matching_fn)(struct extent_status *es), in ext4_es_scan_range() argument
392 int (*matching_fn)(struct extent_status *es), in __es_scan_clu() argument
408 int (*matching_fn)(struct extent_status *es), in ext4_es_scan_clu() argument
457 struct extent_status *es; in ext4_es_alloc_extent() local
458 es = kmem_cache_alloc(ext4_es_cachep, GFP_ATOMIC); in ext4_es_alloc_extent()
459 if (es == NULL) in ext4_es_alloc_extent()
461 es->es_lblk = lblk; in ext4_es_alloc_extent()
462 es->es_len = len; in ext4_es_alloc_extent()
463 es->es_pblk = pblk; in ext4_es_alloc_extent()
468 if (!ext4_es_is_delayed(es)) { in ext4_es_alloc_extent()
478 return es; in ext4_es_alloc_extent()
481 static void ext4_es_free_extent(struct inode *inode, struct extent_status *es) in ext4_es_free_extent() argument
487 if (!ext4_es_is_delayed(es)) { in ext4_es_free_extent()
495 kmem_cache_free(ext4_es_cachep, es); in ext4_es_free_extent()
538 ext4_es_try_to_merge_left(struct inode *inode, struct extent_status *es) in ext4_es_try_to_merge_left() argument
544 node = rb_prev(&es->rb_node); in ext4_es_try_to_merge_left()
546 return es; in ext4_es_try_to_merge_left()
549 if (ext4_es_can_be_merged(es1, es)) { in ext4_es_try_to_merge_left()
550 es1->es_len += es->es_len; in ext4_es_try_to_merge_left()
551 if (ext4_es_is_referenced(es)) in ext4_es_try_to_merge_left()
553 rb_erase(&es->rb_node, &tree->root); in ext4_es_try_to_merge_left()
554 ext4_es_free_extent(inode, es); in ext4_es_try_to_merge_left()
555 es = es1; in ext4_es_try_to_merge_left()
558 return es; in ext4_es_try_to_merge_left()
562 ext4_es_try_to_merge_right(struct inode *inode, struct extent_status *es) in ext4_es_try_to_merge_right() argument
568 node = rb_next(&es->rb_node); in ext4_es_try_to_merge_right()
570 return es; in ext4_es_try_to_merge_right()
573 if (ext4_es_can_be_merged(es, es1)) { in ext4_es_try_to_merge_right()
574 es->es_len += es1->es_len; in ext4_es_try_to_merge_right()
576 ext4_es_set_referenced(es); in ext4_es_try_to_merge_right()
581 return es; in ext4_es_try_to_merge_right()
588 struct extent_status *es) in ext4_es_insert_extent_ext_check() argument
597 path = ext4_find_extent(inode, es->es_lblk, NULL, EXT4_EX_NOCACHE); in ext4_es_insert_extent_ext_check()
611 es_status = ext4_es_is_unwritten(es) ? 1 : 0; in ext4_es_insert_extent_ext_check()
617 if (!ext4_es_is_written(es) && !ext4_es_is_unwritten(es)) { in ext4_es_insert_extent_ext_check()
618 if (in_range(es->es_lblk, ee_block, ee_len)) { in ext4_es_insert_extent_ext_check()
626 es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
627 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ext_check()
636 if (es->es_lblk < ee_block || in ext4_es_insert_extent_ext_check()
637 ext4_es_pblock(es) != ee_start + es->es_lblk - ee_block) { in ext4_es_insert_extent_ext_check()
642 ee_status ? 'u' : 'w', es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
643 ext4_es_pblock(es), es_status ? 'u' : 'w'); in ext4_es_insert_extent_ext_check()
652 ee_status ? 'u' : 'w', es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
653 ext4_es_pblock(es), es_status ? 'u' : 'w'); in ext4_es_insert_extent_ext_check()
660 if (!ext4_es_is_delayed(es) && !ext4_es_is_hole(es)) { in ext4_es_insert_extent_ext_check()
665 es->es_lblk, es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
666 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ext_check()
675 struct extent_status *es) in ext4_es_insert_extent_ind_check() argument
687 map.m_lblk = es->es_lblk; in ext4_es_insert_extent_ind_check()
688 map.m_len = es->es_len; in ext4_es_insert_extent_ind_check()
692 if (ext4_es_is_delayed(es) || ext4_es_is_hole(es)) { in ext4_es_insert_extent_ind_check()
700 inode->i_ino, es->es_lblk, es->es_len, in ext4_es_insert_extent_ind_check()
701 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ind_check()
703 } else if (ext4_es_is_written(es)) { in ext4_es_insert_extent_ind_check()
704 if (retval != es->es_len) { in ext4_es_insert_extent_ind_check()
707 inode->i_ino, retval, es->es_len); in ext4_es_insert_extent_ind_check()
710 if (map.m_pblk != ext4_es_pblock(es)) { in ext4_es_insert_extent_ind_check()
715 ext4_es_pblock(es)); in ext4_es_insert_extent_ind_check()
726 if (ext4_es_is_written(es)) { in ext4_es_insert_extent_ind_check()
730 inode->i_ino, es->es_lblk, es->es_len, in ext4_es_insert_extent_ind_check()
731 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ind_check()
738 struct extent_status *es) in ext4_es_insert_extent_check() argument
746 ext4_es_insert_extent_ext_check(inode, es); in ext4_es_insert_extent_check()
748 ext4_es_insert_extent_ind_check(inode, es); in ext4_es_insert_extent_check()
752 struct extent_status *es) in ext4_es_insert_extent_check() argument
762 struct extent_status *es; in __es_insert_extent() local
766 es = rb_entry(parent, struct extent_status, rb_node); in __es_insert_extent()
768 if (newes->es_lblk < es->es_lblk) { in __es_insert_extent()
769 if (ext4_es_can_be_merged(newes, es)) { in __es_insert_extent()
774 es->es_lblk = newes->es_lblk; in __es_insert_extent()
775 es->es_len += newes->es_len; in __es_insert_extent()
776 if (ext4_es_is_written(es) || in __es_insert_extent()
777 ext4_es_is_unwritten(es)) in __es_insert_extent()
778 ext4_es_store_pblock(es, in __es_insert_extent()
780 es = ext4_es_try_to_merge_left(inode, es); in __es_insert_extent()
784 } else if (newes->es_lblk > ext4_es_end(es)) { in __es_insert_extent()
785 if (ext4_es_can_be_merged(es, newes)) { in __es_insert_extent()
786 es->es_len += newes->es_len; in __es_insert_extent()
787 es = ext4_es_try_to_merge_right(inode, es); in __es_insert_extent()
797 es = ext4_es_alloc_extent(inode, newes->es_lblk, newes->es_len, in __es_insert_extent()
799 if (!es) in __es_insert_extent()
801 rb_link_node(&es->rb_node, parent, p); in __es_insert_extent()
802 rb_insert_color(&es->rb_node, &tree->root); in __es_insert_extent()
805 tree->cache_es = es; in __es_insert_extent()
884 struct extent_status *es; in ext4_es_cache_extent() local
903 es = __es_tree_search(&EXT4_I(inode)->i_es_tree.root, lblk); in ext4_es_cache_extent()
904 if (!es || es->es_lblk > end) in ext4_es_cache_extent()
918 struct extent_status *es) in ext4_es_lookup_extent() argument
936 es->es_lblk = es->es_len = es->es_pblk = 0; in ext4_es_lookup_extent()
964 es->es_lblk = es1->es_lblk; in ext4_es_lookup_extent()
965 es->es_len = es1->es_len; in ext4_es_lookup_extent()
966 es->es_pblk = es1->es_pblk; in ext4_es_lookup_extent()
985 trace_ext4_es_lookup_extent_exit(inode, es, found); in ext4_es_lookup_extent()
1011 struct extent_status *es, struct rsvd_count *rc) in init_rsvd() argument
1026 if (lblk > es->es_lblk) { in init_rsvd()
1027 rc->left_es = es; in init_rsvd()
1029 node = rb_prev(&es->rb_node); in init_rsvd()
1053 struct extent_status *es, struct rsvd_count *rc) in count_rsvd() argument
1058 if (!ext4_es_is_delonly(es)) in count_rsvd()
1070 i = (lblk < es->es_lblk) ? es->es_lblk : lblk; in count_rsvd()
1072 end = (end > ext4_es_end(es)) ? ext4_es_end(es) : end; in count_rsvd()
1185 struct extent_status *es; in get_rsvd() local
1205 es = rc->left_es; in get_rsvd()
1206 while (es && ext4_es_end(es) >= in get_rsvd()
1208 if (ext4_es_is_delonly(es)) { in get_rsvd()
1213 node = rb_prev(&es->rb_node); in get_rsvd()
1216 es = rb_entry(node, struct extent_status, rb_node); in get_rsvd()
1220 es = right_es; in get_rsvd()
1223 es = node ? rb_entry(node, struct extent_status, in get_rsvd()
1226 while (es && es->es_lblk <= in get_rsvd()
1228 if (ext4_es_is_delonly(es)) { in get_rsvd()
1233 node = rb_next(&es->rb_node); in get_rsvd()
1236 es = rb_entry(node, struct extent_status, in get_rsvd()
1308 struct extent_status *es; in __es_remove_extent() local
1321 es = __es_tree_search(&tree->root, lblk); in __es_remove_extent()
1322 if (!es) in __es_remove_extent()
1324 if (es->es_lblk > end) in __es_remove_extent()
1330 init_rsvd(inode, lblk, es, &rc); in __es_remove_extent()
1332 orig_es.es_lblk = es->es_lblk; in __es_remove_extent()
1333 orig_es.es_len = es->es_len; in __es_remove_extent()
1334 orig_es.es_pblk = es->es_pblk; in __es_remove_extent()
1336 len1 = lblk > es->es_lblk ? lblk - es->es_lblk : 0; in __es_remove_extent()
1337 len2 = ext4_es_end(es) > end ? ext4_es_end(es) - end : 0; in __es_remove_extent()
1339 es->es_len = len1; in __es_remove_extent()
1355 es->es_lblk = orig_es.es_lblk; in __es_remove_extent()
1356 es->es_len = orig_es.es_len; in __es_remove_extent()
1364 es->es_lblk = end + 1; in __es_remove_extent()
1365 es->es_len = len2; in __es_remove_extent()
1366 if (ext4_es_is_written(es) || in __es_remove_extent()
1367 ext4_es_is_unwritten(es)) { in __es_remove_extent()
1369 ext4_es_store_pblock(es, block); in __es_remove_extent()
1382 node = rb_next(&es->rb_node); in __es_remove_extent()
1384 es = rb_entry(node, struct extent_status, rb_node); in __es_remove_extent()
1386 es = NULL; in __es_remove_extent()
1389 while (es && ext4_es_end(es) <= end) { in __es_remove_extent()
1391 count_rsvd(inode, es->es_lblk, es->es_len, es, &rc); in __es_remove_extent()
1392 node = rb_next(&es->rb_node); in __es_remove_extent()
1393 rb_erase(&es->rb_node, &tree->root); in __es_remove_extent()
1394 ext4_es_free_extent(inode, es); in __es_remove_extent()
1396 es = NULL; in __es_remove_extent()
1399 es = rb_entry(node, struct extent_status, rb_node); in __es_remove_extent()
1402 if (es && es->es_lblk < end + 1) { in __es_remove_extent()
1403 ext4_lblk_t orig_len = es->es_len; in __es_remove_extent()
1405 len1 = ext4_es_end(es) - end; in __es_remove_extent()
1407 count_rsvd(inode, es->es_lblk, orig_len - len1, in __es_remove_extent()
1408 es, &rc); in __es_remove_extent()
1409 es->es_lblk = end + 1; in __es_remove_extent()
1410 es->es_len = len1; in __es_remove_extent()
1411 if (ext4_es_is_written(es) || ext4_es_is_unwritten(es)) { in __es_remove_extent()
1412 block = es->es_pblk + orig_len - len1; in __es_remove_extent()
1413 ext4_es_store_pblock(es, block); in __es_remove_extent()
1418 *reserved = get_rsvd(inode, end, es, &rc); in __es_remove_extent()
1695 struct extent_status *es; in es_do_reclaim_extents() local
1698 es = __es_tree_search(&tree->root, ei->i_es_shrink_lblk); in es_do_reclaim_extents()
1699 if (!es) in es_do_reclaim_extents()
1703 if (es->es_lblk > end) { in es_do_reclaim_extents()
1709 node = rb_next(&es->rb_node); in es_do_reclaim_extents()
1714 if (ext4_es_is_delayed(es)) in es_do_reclaim_extents()
1716 if (ext4_es_is_referenced(es)) { in es_do_reclaim_extents()
1717 ext4_es_clear_referenced(es); in es_do_reclaim_extents()
1721 rb_erase(&es->rb_node, &tree->root); in es_do_reclaim_extents()
1722 ext4_es_free_extent(inode, es); in es_do_reclaim_extents()
1727 es = rb_entry(node, struct extent_status, rb_node); in es_do_reclaim_extents()
1729 ei->i_es_shrink_lblk = es->es_lblk; in es_do_reclaim_extents()
1767 struct extent_status *es; in ext4_clear_inode_es() local
1776 es = rb_entry(node, struct extent_status, rb_node); in ext4_clear_inode_es()
1778 if (!ext4_es_is_delayed(es)) { in ext4_clear_inode_es()
1779 rb_erase(&es->rb_node, &tree->root); in ext4_clear_inode_es()
1780 ext4_es_free_extent(inode, es); in ext4_clear_inode_es()
2046 struct extent_status *es; in __es_delayed_clu() local
2056 es = __es_tree_search(&tree->root, start); in __es_delayed_clu()
2058 while (es && (es->es_lblk <= end)) { in __es_delayed_clu()
2059 if (ext4_es_is_delonly(es)) { in __es_delayed_clu()
2060 if (es->es_lblk <= start) in __es_delayed_clu()
2063 first_lclu = EXT4_B2C(sbi, es->es_lblk); in __es_delayed_clu()
2065 if (ext4_es_end(es) >= end) in __es_delayed_clu()
2068 last_lclu = EXT4_B2C(sbi, ext4_es_end(es)); in __es_delayed_clu()
2076 node = rb_next(&es->rb_node); in __es_delayed_clu()
2079 es = rb_entry(node, struct extent_status, rb_node); in __es_delayed_clu()