Lines Matching refs:upper
56 struct list_head upper; member
253 INIT_LIST_HEAD(&node->upper); in alloc_backref_node()
353 while (!list_empty(&node->upper)) { in walk_up_backref()
354 edge = list_entry(node->upper.next, in walk_up_backref()
377 if (list_is_last(&edge->list[LOWER], &lower->upper)) { in walk_down_backref()
411 BUG_ON(!list_empty(&node->upper)); in drop_backref_node()
427 struct backref_node *upper; in remove_backref_node() local
434 while (!list_empty(&node->upper)) { in remove_backref_node()
435 edge = list_entry(node->upper.next, struct backref_edge, in remove_backref_node()
437 upper = edge->node[UPPER]; in remove_backref_node()
442 if (RB_EMPTY_NODE(&upper->rb_node)) { in remove_backref_node()
443 BUG_ON(!list_empty(&node->upper)); in remove_backref_node()
445 node = upper; in remove_backref_node()
453 if (list_empty(&upper->lower)) { in remove_backref_node()
454 list_add_tail(&upper->lower, &cache->leaves); in remove_backref_node()
455 upper->lowest = 1; in remove_backref_node()
689 struct backref_node *upper; local
745 if (!list_empty(&cur->upper)) {
750 ASSERT(list_is_singular(&cur->upper));
751 edge = list_entry(cur->upper.next, struct backref_edge,
856 upper = alloc_backref_node(cache);
857 if (!upper) {
862 upper->bytenr = key.offset;
863 upper->level = cur->level + 1;
870 upper = rb_entry(rb_node, struct backref_node,
872 ASSERT(upper->checked);
875 list_add_tail(&edge->list[LOWER], &cur->upper);
877 edge->node[UPPER] = upper;
949 upper = alloc_backref_node(cache);
950 if (!upper) {
955 upper->bytenr = eb->start;
956 upper->owner = btrfs_header_owner(eb);
957 upper->level = lower->level + 1;
960 upper->cowonly = 1;
967 upper->checked = 0;
969 upper->checked = 1;
977 if (!upper->checked && need_check) {
982 if (upper->checked)
987 upper = rb_entry(rb_node, struct backref_node,
989 ASSERT(upper->checked);
991 if (!upper->owner)
992 upper->owner = btrfs_header_owner(eb);
994 list_add_tail(&edge->list[LOWER], &lower->upper);
996 edge->node[UPPER] = upper;
1000 lower = upper;
1001 upper = NULL;
1043 list_for_each_entry(edge, &node->upper, list[LOWER])
1049 upper = edge->node[UPPER];
1050 if (upper->detached) {
1054 if (list_empty(&lower->upper))
1059 if (!RB_EMPTY_NODE(&upper->rb_node)) {
1060 if (upper->lowest) {
1061 list_del_init(&upper->lower);
1062 upper->lowest = 0;
1065 list_add_tail(&edge->list[UPPER], &upper->lower);
1069 if (!upper->checked) {
1078 if (cowonly != upper->cowonly) {
1085 rb_node = tree_insert(&cache->rb_root, upper->bytenr,
1086 &upper->rb_node);
1089 upper->bytenr);
1092 list_add_tail(&edge->list[UPPER], &upper->lower);
1094 list_for_each_entry(edge, &upper->upper, list[LOWER])
1104 upper = list_entry(useless.next, struct backref_node, list);
1105 list_del_init(&upper->list);
1106 ASSERT(list_empty(&upper->upper));
1107 if (upper == node)
1109 if (upper->lowest) {
1110 list_del_init(&upper->lower);
1111 upper->lowest = 0;
1113 while (!list_empty(&upper->lower)) {
1114 edge = list_entry(upper->lower.next,
1121 if (list_empty(&lower->upper))
1124 __mark_block_processed(rc, upper);
1125 if (upper->level > 0) {
1126 list_add(&upper->list, &cache->detached);
1127 upper->detached = 1;
1129 rb_erase(&upper->rb_node, &cache->rb_root);
1130 free_backref_node(cache, upper);
1148 upper = edge->node[UPPER];
1155 if (list_empty(&lower->upper) &&
1159 if (!RB_EMPTY_NODE(&upper->rb_node))
1163 list_for_each_entry(edge, &upper->upper, list[LOWER])
1165 if (list_empty(&upper->upper))
1166 list_add(&upper->list, &useless);
1257 &new_edge->node[LOWER]->upper);
2578 if (list_empty(&next->upper))
2581 edge = list_entry(next->upper.next,
2641 struct backref_node *upper; local
2657 list_for_each_entry(edge, &node->upper, list[LOWER]) {
2660 upper = edge->node[UPPER];
2661 root = select_reloc_root(trans, rc, upper, edges);
2664 if (upper->eb && !upper->locked) {
2666 ret = btrfs_bin_search(upper->eb, key,
2667 upper->level, &slot);
2669 bytenr = btrfs_node_blockptr(upper->eb, slot);
2673 drop_node_buffer(upper);
2676 if (!upper->eb) {
2684 if (!upper->eb) {
2685 upper->eb = path->nodes[upper->level];
2686 path->nodes[upper->level] = NULL;
2688 BUG_ON(upper->eb != path->nodes[upper->level]);
2691 upper->locked = 1;
2692 path->locks[upper->level] = 0;
2694 slot = path->slots[upper->level];
2697 ret = btrfs_bin_search(upper->eb, key, upper->level,
2702 bytenr = btrfs_node_blockptr(upper->eb, slot);
2711 generation = btrfs_node_ptr_generation(upper->eb, slot);
2722 ret = btrfs_cow_block(trans, root, eb, upper->eb,
2732 btrfs_set_node_blockptr(upper->eb, slot,
2734 btrfs_set_node_ptr_generation(upper->eb, slot,
2736 btrfs_mark_buffer_dirty(upper->eb);
2740 upper->eb->start,
2741 btrfs_header_owner(upper->eb),
2745 ret = btrfs_drop_subtree(trans, root, eb, upper->eb);
2749 if (!upper->pending)
2750 drop_node_buffer(upper);
2752 unlock_node_buffer(upper);
2846 if (list_empty(&next->upper))
2849 edge = list_entry(next->upper.next,