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()
297 es->es_lblk = es1->es_lblk; in __es_find_extent_range()
298 es->es_len = es1->es_len; in __es_find_extent_range()
299 es->es_pblk = es1->es_pblk; in __es_find_extent_range()
308 int (*matching_fn)(struct extent_status *es), in ext4_es_find_extent_range() argument
310 struct extent_status *es) in ext4_es_find_extent_range()
318 __es_find_extent_range(inode, matching_fn, lblk, end, es); in ext4_es_find_extent_range()
321 trace_ext4_es_find_extent_range_exit(inode, es); in ext4_es_find_extent_range()
340 int (*matching_fn)(struct extent_status *es), in __es_scan_range() argument
343 struct extent_status es; in __es_scan_range() local
345 __es_find_extent_range(inode, matching_fn, start, end, &es); in __es_scan_range()
346 if (es.es_len == 0) in __es_scan_range()
348 else if (es.es_lblk <= start && in __es_scan_range()
349 start < es.es_lblk + es.es_len) in __es_scan_range()
351 else if (start <= es.es_lblk && es.es_lblk <= end) in __es_scan_range()
360 int (*matching_fn)(struct extent_status *es), in ext4_es_scan_range() argument
390 int (*matching_fn)(struct extent_status *es), in __es_scan_clu() argument
406 int (*matching_fn)(struct extent_status *es), in ext4_es_scan_clu() argument
455 struct extent_status *es; in ext4_es_alloc_extent() local
456 es = kmem_cache_alloc(ext4_es_cachep, GFP_ATOMIC); in ext4_es_alloc_extent()
457 if (es == NULL) in ext4_es_alloc_extent()
459 es->es_lblk = lblk; in ext4_es_alloc_extent()
460 es->es_len = len; in ext4_es_alloc_extent()
461 es->es_pblk = pblk; in ext4_es_alloc_extent()
466 if (!ext4_es_is_delayed(es)) { in ext4_es_alloc_extent()
476 return es; in ext4_es_alloc_extent()
479 static void ext4_es_free_extent(struct inode *inode, struct extent_status *es) in ext4_es_free_extent() argument
485 if (!ext4_es_is_delayed(es)) { in ext4_es_free_extent()
493 kmem_cache_free(ext4_es_cachep, es); in ext4_es_free_extent()
536 ext4_es_try_to_merge_left(struct inode *inode, struct extent_status *es) in ext4_es_try_to_merge_left() argument
542 node = rb_prev(&es->rb_node); in ext4_es_try_to_merge_left()
544 return es; in ext4_es_try_to_merge_left()
547 if (ext4_es_can_be_merged(es1, es)) { in ext4_es_try_to_merge_left()
548 es1->es_len += es->es_len; in ext4_es_try_to_merge_left()
549 if (ext4_es_is_referenced(es)) in ext4_es_try_to_merge_left()
551 rb_erase(&es->rb_node, &tree->root); in ext4_es_try_to_merge_left()
552 ext4_es_free_extent(inode, es); in ext4_es_try_to_merge_left()
553 es = es1; in ext4_es_try_to_merge_left()
556 return es; in ext4_es_try_to_merge_left()
560 ext4_es_try_to_merge_right(struct inode *inode, struct extent_status *es) in ext4_es_try_to_merge_right() argument
566 node = rb_next(&es->rb_node); in ext4_es_try_to_merge_right()
568 return es; in ext4_es_try_to_merge_right()
571 if (ext4_es_can_be_merged(es, es1)) { in ext4_es_try_to_merge_right()
572 es->es_len += es1->es_len; in ext4_es_try_to_merge_right()
574 ext4_es_set_referenced(es); in ext4_es_try_to_merge_right()
579 return es; in ext4_es_try_to_merge_right()
586 struct extent_status *es) in ext4_es_insert_extent_ext_check() argument
595 path = ext4_find_extent(inode, es->es_lblk, NULL, EXT4_EX_NOCACHE); in ext4_es_insert_extent_ext_check()
609 es_status = ext4_es_is_unwritten(es) ? 1 : 0; in ext4_es_insert_extent_ext_check()
615 if (!ext4_es_is_written(es) && !ext4_es_is_unwritten(es)) { in ext4_es_insert_extent_ext_check()
616 if (in_range(es->es_lblk, ee_block, ee_len)) { in ext4_es_insert_extent_ext_check()
624 es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
625 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ext_check()
634 if (es->es_lblk < ee_block || in ext4_es_insert_extent_ext_check()
635 ext4_es_pblock(es) != ee_start + es->es_lblk - ee_block) { in ext4_es_insert_extent_ext_check()
640 ee_status ? 'u' : 'w', es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
641 ext4_es_pblock(es), es_status ? 'u' : 'w'); in ext4_es_insert_extent_ext_check()
650 ee_status ? 'u' : 'w', es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
651 ext4_es_pblock(es), es_status ? 'u' : 'w'); in ext4_es_insert_extent_ext_check()
658 if (!ext4_es_is_delayed(es) && !ext4_es_is_hole(es)) { in ext4_es_insert_extent_ext_check()
663 es->es_lblk, es->es_lblk, es->es_len, in ext4_es_insert_extent_ext_check()
664 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ext_check()
673 struct extent_status *es) in ext4_es_insert_extent_ind_check() argument
685 map.m_lblk = es->es_lblk; in ext4_es_insert_extent_ind_check()
686 map.m_len = es->es_len; in ext4_es_insert_extent_ind_check()
690 if (ext4_es_is_delayed(es) || ext4_es_is_hole(es)) { in ext4_es_insert_extent_ind_check()
698 inode->i_ino, es->es_lblk, es->es_len, in ext4_es_insert_extent_ind_check()
699 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ind_check()
701 } else if (ext4_es_is_written(es)) { in ext4_es_insert_extent_ind_check()
702 if (retval != es->es_len) { in ext4_es_insert_extent_ind_check()
705 inode->i_ino, retval, es->es_len); in ext4_es_insert_extent_ind_check()
708 if (map.m_pblk != ext4_es_pblock(es)) { in ext4_es_insert_extent_ind_check()
713 ext4_es_pblock(es)); in ext4_es_insert_extent_ind_check()
724 if (ext4_es_is_written(es)) { in ext4_es_insert_extent_ind_check()
728 inode->i_ino, es->es_lblk, es->es_len, in ext4_es_insert_extent_ind_check()
729 ext4_es_pblock(es), ext4_es_status(es)); in ext4_es_insert_extent_ind_check()
736 struct extent_status *es) in ext4_es_insert_extent_check() argument
744 ext4_es_insert_extent_ext_check(inode, es); in ext4_es_insert_extent_check()
746 ext4_es_insert_extent_ind_check(inode, es); in ext4_es_insert_extent_check()
750 struct extent_status *es) in ext4_es_insert_extent_check() argument
760 struct extent_status *es; in __es_insert_extent() local
764 es = rb_entry(parent, struct extent_status, rb_node); in __es_insert_extent()
766 if (newes->es_lblk < es->es_lblk) { in __es_insert_extent()
767 if (ext4_es_can_be_merged(newes, es)) { in __es_insert_extent()
772 es->es_lblk = newes->es_lblk; in __es_insert_extent()
773 es->es_len += newes->es_len; in __es_insert_extent()
774 if (ext4_es_is_written(es) || in __es_insert_extent()
775 ext4_es_is_unwritten(es)) in __es_insert_extent()
776 ext4_es_store_pblock(es, in __es_insert_extent()
778 es = ext4_es_try_to_merge_left(inode, es); in __es_insert_extent()
782 } else if (newes->es_lblk > ext4_es_end(es)) { in __es_insert_extent()
783 if (ext4_es_can_be_merged(es, newes)) { in __es_insert_extent()
784 es->es_len += newes->es_len; in __es_insert_extent()
785 es = ext4_es_try_to_merge_right(inode, es); in __es_insert_extent()
795 es = ext4_es_alloc_extent(inode, newes->es_lblk, newes->es_len, in __es_insert_extent()
797 if (!es) in __es_insert_extent()
799 rb_link_node(&es->rb_node, parent, p); in __es_insert_extent()
800 rb_insert_color(&es->rb_node, &tree->root); in __es_insert_extent()
803 tree->cache_es = es; in __es_insert_extent()
882 struct extent_status *es; in ext4_es_cache_extent() local
901 es = __es_tree_search(&EXT4_I(inode)->i_es_tree.root, lblk); in ext4_es_cache_extent()
902 if (!es || es->es_lblk > end) in ext4_es_cache_extent()
916 struct extent_status *es) in ext4_es_lookup_extent() argument
934 es->es_lblk = es->es_len = es->es_pblk = 0; in ext4_es_lookup_extent()
960 es->es_lblk = es1->es_lblk; in ext4_es_lookup_extent()
961 es->es_len = es1->es_len; in ext4_es_lookup_extent()
962 es->es_pblk = es1->es_pblk; in ext4_es_lookup_extent()
981 trace_ext4_es_lookup_extent_exit(inode, es, found); in ext4_es_lookup_extent()
1007 struct extent_status *es, struct rsvd_count *rc) in init_rsvd() argument
1022 if (lblk > es->es_lblk) { in init_rsvd()
1023 rc->left_es = es; in init_rsvd()
1025 node = rb_prev(&es->rb_node); in init_rsvd()
1049 struct extent_status *es, struct rsvd_count *rc) in count_rsvd() argument
1054 if (!ext4_es_is_delonly(es)) in count_rsvd()
1066 i = (lblk < es->es_lblk) ? es->es_lblk : lblk; in count_rsvd()
1068 end = (end > ext4_es_end(es)) ? ext4_es_end(es) : end; in count_rsvd()
1181 struct extent_status *es; in get_rsvd() local
1201 es = rc->left_es; in get_rsvd()
1202 while (es && ext4_es_end(es) >= in get_rsvd()
1204 if (ext4_es_is_delonly(es)) { in get_rsvd()
1209 node = rb_prev(&es->rb_node); in get_rsvd()
1212 es = rb_entry(node, struct extent_status, rb_node); in get_rsvd()
1216 es = right_es; in get_rsvd()
1219 es = node ? rb_entry(node, struct extent_status, in get_rsvd()
1222 while (es && es->es_lblk <= in get_rsvd()
1224 if (ext4_es_is_delonly(es)) { in get_rsvd()
1229 node = rb_next(&es->rb_node); in get_rsvd()
1232 es = rb_entry(node, struct extent_status, in get_rsvd()
1304 struct extent_status *es; in __es_remove_extent() local
1317 es = __es_tree_search(&tree->root, lblk); in __es_remove_extent()
1318 if (!es) in __es_remove_extent()
1320 if (es->es_lblk > end) in __es_remove_extent()
1326 init_rsvd(inode, lblk, es, &rc); in __es_remove_extent()
1328 orig_es.es_lblk = es->es_lblk; in __es_remove_extent()
1329 orig_es.es_len = es->es_len; in __es_remove_extent()
1330 orig_es.es_pblk = es->es_pblk; in __es_remove_extent()
1332 len1 = lblk > es->es_lblk ? lblk - es->es_lblk : 0; in __es_remove_extent()
1333 len2 = ext4_es_end(es) > end ? ext4_es_end(es) - end : 0; in __es_remove_extent()
1335 es->es_len = len1; in __es_remove_extent()
1351 es->es_lblk = orig_es.es_lblk; in __es_remove_extent()
1352 es->es_len = orig_es.es_len; in __es_remove_extent()
1360 es->es_lblk = end + 1; in __es_remove_extent()
1361 es->es_len = len2; in __es_remove_extent()
1362 if (ext4_es_is_written(es) || in __es_remove_extent()
1363 ext4_es_is_unwritten(es)) { in __es_remove_extent()
1365 ext4_es_store_pblock(es, block); in __es_remove_extent()
1378 node = rb_next(&es->rb_node); in __es_remove_extent()
1380 es = rb_entry(node, struct extent_status, rb_node); in __es_remove_extent()
1382 es = NULL; in __es_remove_extent()
1385 while (es && ext4_es_end(es) <= end) { in __es_remove_extent()
1387 count_rsvd(inode, es->es_lblk, es->es_len, es, &rc); in __es_remove_extent()
1388 node = rb_next(&es->rb_node); in __es_remove_extent()
1389 rb_erase(&es->rb_node, &tree->root); in __es_remove_extent()
1390 ext4_es_free_extent(inode, es); in __es_remove_extent()
1392 es = NULL; in __es_remove_extent()
1395 es = rb_entry(node, struct extent_status, rb_node); in __es_remove_extent()
1398 if (es && es->es_lblk < end + 1) { in __es_remove_extent()
1399 ext4_lblk_t orig_len = es->es_len; in __es_remove_extent()
1401 len1 = ext4_es_end(es) - end; in __es_remove_extent()
1403 count_rsvd(inode, es->es_lblk, orig_len - len1, in __es_remove_extent()
1404 es, &rc); in __es_remove_extent()
1405 es->es_lblk = end + 1; in __es_remove_extent()
1406 es->es_len = len1; in __es_remove_extent()
1407 if (ext4_es_is_written(es) || ext4_es_is_unwritten(es)) { in __es_remove_extent()
1408 block = es->es_pblk + orig_len - len1; in __es_remove_extent()
1409 ext4_es_store_pblock(es, block); in __es_remove_extent()
1415 *reserved = get_rsvd(inode, end, es, &rc); in __es_remove_extent()
1692 struct extent_status *es; in es_do_reclaim_extents() local
1695 es = __es_tree_search(&tree->root, ei->i_es_shrink_lblk); in es_do_reclaim_extents()
1696 if (!es) in es_do_reclaim_extents()
1700 if (es->es_lblk > end) { in es_do_reclaim_extents()
1706 node = rb_next(&es->rb_node); in es_do_reclaim_extents()
1711 if (ext4_es_is_delayed(es)) in es_do_reclaim_extents()
1713 if (ext4_es_is_referenced(es)) { in es_do_reclaim_extents()
1714 ext4_es_clear_referenced(es); in es_do_reclaim_extents()
1718 rb_erase(&es->rb_node, &tree->root); in es_do_reclaim_extents()
1719 ext4_es_free_extent(inode, es); in es_do_reclaim_extents()
1724 es = rb_entry(node, struct extent_status, rb_node); in es_do_reclaim_extents()
1726 ei->i_es_shrink_lblk = es->es_lblk; in es_do_reclaim_extents()
1764 struct extent_status *es; in ext4_clear_inode_es() local
1773 es = rb_entry(node, struct extent_status, rb_node); in ext4_clear_inode_es()
1775 if (!ext4_es_is_delayed(es)) { in ext4_clear_inode_es()
1776 rb_erase(&es->rb_node, &tree->root); in ext4_clear_inode_es()
1777 ext4_es_free_extent(inode, es); in ext4_clear_inode_es()
2043 struct extent_status *es; in __es_delayed_clu() local
2053 es = __es_tree_search(&tree->root, start); in __es_delayed_clu()
2055 while (es && (es->es_lblk <= end)) { in __es_delayed_clu()
2056 if (ext4_es_is_delonly(es)) { in __es_delayed_clu()
2057 if (es->es_lblk <= start) in __es_delayed_clu()
2060 first_lclu = EXT4_B2C(sbi, es->es_lblk); in __es_delayed_clu()
2062 if (ext4_es_end(es) >= end) in __es_delayed_clu()
2065 last_lclu = EXT4_B2C(sbi, ext4_es_end(es)); in __es_delayed_clu()
2073 node = rb_next(&es->rb_node); in __es_delayed_clu()
2076 es = rb_entry(node, struct extent_status, rb_node); in __es_delayed_clu()