/* mark a block and all blocks directly/indirectly reference the block as processed.  */
static void update_processed_blocks(struct reloc_control *rc, struct backref_node *node)
/* mark a block and all blocks directly/indirectly reference the block as processed.  */
static void update_processed_blocks(struct reloc_control *rc, struct backref_node *node)
{
	struct backref_node *next = node;
	struct backref_edge *edge;
	struct backref_edge *edges[BTRFS_MAX_LEVEL - 1];
	int index = 0;
	while (next) {
		cond_resched();
		while (1) {
			if (next->processed)
				break;
			mark_block_processed(rc, next);
			if (list_empty(&next->upper))
				break;
			edge = list_entry(next->upper.next,
					  struct backref_edge, list[LOWER]);
			edges[index++] = edge;
			next = edge->node[UPPER];
		}
		next = walk_down_backref(edges, &index);
	}
}