Lines Matching refs:et

26 	struct extent_tree *et = fi->extent_tree[EX_READ];
29 if (!et)
32 ei = &et->largest;
39 et->largest_updated = true;
114 static void __try_update_largest_extent(struct extent_tree *et,
117 if (et->type != EX_READ)
119 if (en->ei.len <= et->largest.len)
122 et->largest = en->ei;
123 et->largest_updated = true;
268 struct extent_tree *et, struct extent_info *ei,
272 struct extent_tree_info *eti = &sbi->extent_tree[et->type];
281 en->et = et;
284 rb_insert_color_cached(&en->rb_node, &et->root, leftmost);
285 atomic_inc(&et->node_cnt);
291 struct extent_tree *et, struct extent_node *en)
293 struct extent_tree_info *eti = &sbi->extent_tree[et->type];
295 rb_erase_cached(&en->rb_node, &et->root);
296 atomic_dec(&et->node_cnt);
299 if (et->cached_en == en)
300 et->cached_en = NULL;
311 struct extent_tree *et, struct extent_node *en)
313 struct extent_tree_info *eti = &sbi->extent_tree[et->type];
320 __detach_extent_node(sbi, et, en);
328 struct extent_tree *et;
332 et = radix_tree_lookup(&eti->extent_tree_root, ino);
333 if (!et) {
334 et = f2fs_kmem_cache_alloc(extent_tree_slab,
336 f2fs_radix_tree_insert(&eti->extent_tree_root, ino, et);
337 memset(et, 0, sizeof(struct extent_tree));
338 et->ino = ino;
339 et->type = type;
340 et->root = RB_ROOT_CACHED;
341 et->cached_en = NULL;
342 rwlock_init(&et->lock);
343 INIT_LIST_HEAD(&et->list);
344 atomic_set(&et->node_cnt, 0);
348 list_del_init(&et->list);
353 F2FS_I(inode)->extent_tree[type] = et;
355 return et;
359 struct extent_tree *et)
363 unsigned int count = atomic_read(&et->node_cnt);
365 node = rb_first_cached(&et->root);
369 __release_extent_node(sbi, et, en);
373 return count - atomic_read(&et->node_cnt);
376 static void __drop_largest_extent(struct extent_tree *et,
379 if (fofs < et->largest.fofs + et->largest.len &&
380 fofs + len > et->largest.fofs) {
381 et->largest.len = 0;
382 et->largest_updated = true;
391 struct extent_tree *et;
405 et = __grab_extent_tree(inode, EX_READ);
412 write_lock(&et->lock);
413 if (atomic_read(&et->node_cnt))
416 en = __attach_extent_node(sbi, et, &ei, NULL,
417 &et->root.rb_root.rb_node, true);
419 et->largest = en->ei;
420 et->cached_en = en;
427 write_unlock(&et->lock);
456 struct extent_tree *et = F2FS_I(inode)->extent_tree[type];
460 if (!et)
465 read_lock(&et->lock);
468 et->largest.fofs <= pgofs &&
469 et->largest.fofs + et->largest.len > pgofs) {
470 *ei = et->largest;
476 en = __lookup_extent_node(&et->root, et->cached_en, pgofs);
480 if (en == et->cached_en)
489 et->cached_en = en;
495 read_unlock(&et->lock);
505 struct extent_tree *et, struct extent_info *ei,
509 struct extent_tree_info *eti = &sbi->extent_tree[et->type];
512 if (prev_ex && __is_back_mergeable(ei, &prev_ex->ei, et->type)) {
518 if (next_ex && __is_front_mergeable(ei, &next_ex->ei, et->type)) {
521 if (et->type == EX_READ)
524 __release_extent_node(sbi, et, prev_ex);
532 __try_update_largest_extent(et, en);
537 et->cached_en = en;
544 struct extent_tree *et, struct extent_info *ei,
549 struct extent_tree_info *eti = &sbi->extent_tree[et->type];
550 struct rb_node **p = &et->root.rb_root.rb_node;
578 en = __attach_extent_node(sbi, et, ei, parent, p, leftmost);
582 __try_update_largest_extent(et, en);
587 et->cached_en = en;
596 struct extent_tree *et = F2FS_I(inode)->extent_tree[type];
606 if (!et)
616 write_lock(&et->lock);
620 write_unlock(&et->lock);
624 prev = et->largest;
631 __drop_largest_extent(et, fofs, len);
635 en = __lookup_extent_node_ret(&et->root,
636 et->cached_en, fofs,
669 en1 = __insert_extent_tree(sbi, et, &ei,
691 __try_update_largest_extent(et, en);
693 __release_extent_node(sbi, et, en);
716 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
717 __insert_extent_tree(sbi, et, &ei,
723 et->largest.len < F2FS_MIN_EXTENT_LEN) {
724 et->largest.len = 0;
725 et->largest_updated = true;
731 __free_extent_tree(sbi, et);
733 if (et->largest_updated) {
734 et->largest_updated = false;
744 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
745 __insert_extent_tree(sbi, et, &ei,
748 write_unlock(&et->lock);
760 struct extent_tree *et = F2FS_I(inode)->extent_tree[EX_READ];
770 /* it is safe here to check FI_NO_EXTENT w/o et->lock in ro image */
774 write_lock(&et->lock);
776 en = __lookup_extent_node_ret(&et->root,
777 et->cached_en, fofs,
787 if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
788 __insert_extent_tree(sbi, et, &ei,
791 write_unlock(&et->lock);
897 struct extent_tree *et, *next;
909 list_for_each_entry_safe(et, next, &eti->zombie_list, list) {
910 if (atomic_read(&et->node_cnt)) {
911 write_lock(&et->lock);
912 node_cnt += __free_extent_tree(sbi, et);
913 write_unlock(&et->lock);
915 f2fs_bug_on(sbi, atomic_read(&et->node_cnt));
916 list_del_init(&et->list);
917 radix_tree_delete(&eti->extent_tree_root, et->ino);
918 kmem_cache_free(extent_tree_slab, et);
942 et = en->et;
943 if (!write_trylock(&et->lock)) {
952 __detach_extent_node(sbi, et, en);
954 write_unlock(&et->lock);
1058 struct extent_tree *et = F2FS_I(inode)->extent_tree[type];
1061 if (!et || !atomic_read(&et->node_cnt))
1064 write_lock(&et->lock);
1065 node_cnt = __free_extent_tree(sbi, et);
1066 write_unlock(&et->lock);
1080 struct extent_tree *et = F2FS_I(inode)->extent_tree[type];
1086 write_lock(&et->lock);
1087 __free_extent_tree(sbi, et);
1090 if (et->largest.len) {
1091 et->largest.len = 0;
1095 write_unlock(&et->lock);
1110 struct extent_tree *et = F2FS_I(inode)->extent_tree[type];
1113 if (!et)
1117 atomic_read(&et->node_cnt)) {
1119 list_add_tail(&et->list, &eti->zombie_list);
1130 f2fs_bug_on(sbi, atomic_read(&et->node_cnt));
1132 kmem_cache_free(extent_tree_slab, et);