brintos

brintos / linux-shallow public Read only

0
0
Text · 101.8 KiB · f8e1d5b Raw
3741 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2011 STRATO.  All rights reserved.4 */5 6#include <linux/mm.h>7#include <linux/rbtree.h>8#include <trace/events/btrfs.h>9#include "ctree.h"10#include "disk-io.h"11#include "backref.h"12#include "ulist.h"13#include "transaction.h"14#include "delayed-ref.h"15#include "locking.h"16#include "misc.h"17#include "tree-mod-log.h"18#include "fs.h"19#include "accessors.h"20#include "extent-tree.h"21#include "relocation.h"22#include "tree-checker.h"23 24/* Just arbitrary numbers so we can be sure one of these happened. */25#define BACKREF_FOUND_SHARED     626#define BACKREF_FOUND_NOT_SHARED 727 28struct extent_inode_elem {29	u64 inum;30	u64 offset;31	u64 num_bytes;32	struct extent_inode_elem *next;33};34 35static int check_extent_in_eb(struct btrfs_backref_walk_ctx *ctx,36			      const struct btrfs_key *key,37			      const struct extent_buffer *eb,38			      const struct btrfs_file_extent_item *fi,39			      struct extent_inode_elem **eie)40{41	const u64 data_len = btrfs_file_extent_num_bytes(eb, fi);42	u64 offset = key->offset;43	struct extent_inode_elem *e;44	const u64 *root_ids;45	int root_count;46	bool cached;47 48	if (!ctx->ignore_extent_item_pos &&49	    !btrfs_file_extent_compression(eb, fi) &&50	    !btrfs_file_extent_encryption(eb, fi) &&51	    !btrfs_file_extent_other_encoding(eb, fi)) {52		u64 data_offset;53 54		data_offset = btrfs_file_extent_offset(eb, fi);55 56		if (ctx->extent_item_pos < data_offset ||57		    ctx->extent_item_pos >= data_offset + data_len)58			return 1;59		offset += ctx->extent_item_pos - data_offset;60	}61 62	if (!ctx->indirect_ref_iterator || !ctx->cache_lookup)63		goto add_inode_elem;64 65	cached = ctx->cache_lookup(eb->start, ctx->user_ctx, &root_ids,66				   &root_count);67	if (!cached)68		goto add_inode_elem;69 70	for (int i = 0; i < root_count; i++) {71		int ret;72 73		ret = ctx->indirect_ref_iterator(key->objectid, offset,74						 data_len, root_ids[i],75						 ctx->user_ctx);76		if (ret)77			return ret;78	}79 80add_inode_elem:81	e = kmalloc(sizeof(*e), GFP_NOFS);82	if (!e)83		return -ENOMEM;84 85	e->next = *eie;86	e->inum = key->objectid;87	e->offset = offset;88	e->num_bytes = data_len;89	*eie = e;90 91	return 0;92}93 94static void free_inode_elem_list(struct extent_inode_elem *eie)95{96	struct extent_inode_elem *eie_next;97 98	for (; eie; eie = eie_next) {99		eie_next = eie->next;100		kfree(eie);101	}102}103 104static int find_extent_in_eb(struct btrfs_backref_walk_ctx *ctx,105			     const struct extent_buffer *eb,106			     struct extent_inode_elem **eie)107{108	u64 disk_byte;109	struct btrfs_key key;110	struct btrfs_file_extent_item *fi;111	int slot;112	int nritems;113	int extent_type;114	int ret;115 116	/*117	 * from the shared data ref, we only have the leaf but we need118	 * the key. thus, we must look into all items and see that we119	 * find one (some) with a reference to our extent item.120	 */121	nritems = btrfs_header_nritems(eb);122	for (slot = 0; slot < nritems; ++slot) {123		btrfs_item_key_to_cpu(eb, &key, slot);124		if (key.type != BTRFS_EXTENT_DATA_KEY)125			continue;126		fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item);127		extent_type = btrfs_file_extent_type(eb, fi);128		if (extent_type == BTRFS_FILE_EXTENT_INLINE)129			continue;130		/* don't skip BTRFS_FILE_EXTENT_PREALLOC, we can handle that */131		disk_byte = btrfs_file_extent_disk_bytenr(eb, fi);132		if (disk_byte != ctx->bytenr)133			continue;134 135		ret = check_extent_in_eb(ctx, &key, eb, fi, eie);136		if (ret == BTRFS_ITERATE_EXTENT_INODES_STOP || ret < 0)137			return ret;138	}139 140	return 0;141}142 143struct preftree {144	struct rb_root_cached root;145	unsigned int count;146};147 148#define PREFTREE_INIT	{ .root = RB_ROOT_CACHED, .count = 0 }149 150struct preftrees {151	struct preftree direct;    /* BTRFS_SHARED_[DATA|BLOCK]_REF_KEY */152	struct preftree indirect;  /* BTRFS_[TREE_BLOCK|EXTENT_DATA]_REF_KEY */153	struct preftree indirect_missing_keys;154};155 156/*157 * Checks for a shared extent during backref search.158 *159 * The share_count tracks prelim_refs (direct and indirect) having a160 * ref->count >0:161 *  - incremented when a ref->count transitions to >0162 *  - decremented when a ref->count transitions to <1163 */164struct share_check {165	struct btrfs_backref_share_check_ctx *ctx;166	struct btrfs_root *root;167	u64 inum;168	u64 data_bytenr;169	u64 data_extent_gen;170	/*171	 * Counts number of inodes that refer to an extent (different inodes in172	 * the same root or different roots) that we could find. The sharedness173	 * check typically stops once this counter gets greater than 1, so it174	 * may not reflect the total number of inodes.175	 */176	int share_count;177	/*178	 * The number of times we found our inode refers to the data extent we179	 * are determining the sharedness. In other words, how many file extent180	 * items we could find for our inode that point to our target data181	 * extent. The value we get here after finishing the extent sharedness182	 * check may be smaller than reality, but if it ends up being greater183	 * than 1, then we know for sure the inode has multiple file extent184	 * items that point to our inode, and we can safely assume it's useful185	 * to cache the sharedness check result.186	 */187	int self_ref_count;188	bool have_delayed_delete_refs;189};190 191static inline int extent_is_shared(struct share_check *sc)192{193	return (sc && sc->share_count > 1) ? BACKREF_FOUND_SHARED : 0;194}195 196static struct kmem_cache *btrfs_prelim_ref_cache;197 198int __init btrfs_prelim_ref_init(void)199{200	btrfs_prelim_ref_cache = kmem_cache_create("btrfs_prelim_ref",201					sizeof(struct prelim_ref), 0, 0, NULL);202	if (!btrfs_prelim_ref_cache)203		return -ENOMEM;204	return 0;205}206 207void __cold btrfs_prelim_ref_exit(void)208{209	kmem_cache_destroy(btrfs_prelim_ref_cache);210}211 212static void free_pref(struct prelim_ref *ref)213{214	kmem_cache_free(btrfs_prelim_ref_cache, ref);215}216 217/*218 * Return 0 when both refs are for the same block (and can be merged).219 * A -1 return indicates ref1 is a 'lower' block than ref2, while 1220 * indicates a 'higher' block.221 */222static int prelim_ref_compare(const struct prelim_ref *ref1,223			      const struct prelim_ref *ref2)224{225	if (ref1->level < ref2->level)226		return -1;227	if (ref1->level > ref2->level)228		return 1;229	if (ref1->root_id < ref2->root_id)230		return -1;231	if (ref1->root_id > ref2->root_id)232		return 1;233	if (ref1->key_for_search.type < ref2->key_for_search.type)234		return -1;235	if (ref1->key_for_search.type > ref2->key_for_search.type)236		return 1;237	if (ref1->key_for_search.objectid < ref2->key_for_search.objectid)238		return -1;239	if (ref1->key_for_search.objectid > ref2->key_for_search.objectid)240		return 1;241	if (ref1->key_for_search.offset < ref2->key_for_search.offset)242		return -1;243	if (ref1->key_for_search.offset > ref2->key_for_search.offset)244		return 1;245	if (ref1->parent < ref2->parent)246		return -1;247	if (ref1->parent > ref2->parent)248		return 1;249 250	return 0;251}252 253static void update_share_count(struct share_check *sc, int oldcount,254			       int newcount, const struct prelim_ref *newref)255{256	if ((!sc) || (oldcount == 0 && newcount < 1))257		return;258 259	if (oldcount > 0 && newcount < 1)260		sc->share_count--;261	else if (oldcount < 1 && newcount > 0)262		sc->share_count++;263 264	if (newref->root_id == btrfs_root_id(sc->root) &&265	    newref->wanted_disk_byte == sc->data_bytenr &&266	    newref->key_for_search.objectid == sc->inum)267		sc->self_ref_count += newref->count;268}269 270/*271 * Add @newref to the @root rbtree, merging identical refs.272 *273 * Callers should assume that newref has been freed after calling.274 */275static void prelim_ref_insert(const struct btrfs_fs_info *fs_info,276			      struct preftree *preftree,277			      struct prelim_ref *newref,278			      struct share_check *sc)279{280	struct rb_root_cached *root;281	struct rb_node **p;282	struct rb_node *parent = NULL;283	struct prelim_ref *ref;284	int result;285	bool leftmost = true;286 287	root = &preftree->root;288	p = &root->rb_root.rb_node;289 290	while (*p) {291		parent = *p;292		ref = rb_entry(parent, struct prelim_ref, rbnode);293		result = prelim_ref_compare(ref, newref);294		if (result < 0) {295			p = &(*p)->rb_left;296		} else if (result > 0) {297			p = &(*p)->rb_right;298			leftmost = false;299		} else {300			/* Identical refs, merge them and free @newref */301			struct extent_inode_elem *eie = ref->inode_list;302 303			while (eie && eie->next)304				eie = eie->next;305 306			if (!eie)307				ref->inode_list = newref->inode_list;308			else309				eie->next = newref->inode_list;310			trace_btrfs_prelim_ref_merge(fs_info, ref, newref,311						     preftree->count);312			/*313			 * A delayed ref can have newref->count < 0.314			 * The ref->count is updated to follow any315			 * BTRFS_[ADD|DROP]_DELAYED_REF actions.316			 */317			update_share_count(sc, ref->count,318					   ref->count + newref->count, newref);319			ref->count += newref->count;320			free_pref(newref);321			return;322		}323	}324 325	update_share_count(sc, 0, newref->count, newref);326	preftree->count++;327	trace_btrfs_prelim_ref_insert(fs_info, newref, NULL, preftree->count);328	rb_link_node(&newref->rbnode, parent, p);329	rb_insert_color_cached(&newref->rbnode, root, leftmost);330}331 332/*333 * Release the entire tree.  We don't care about internal consistency so334 * just free everything and then reset the tree root.335 */336static void prelim_release(struct preftree *preftree)337{338	struct prelim_ref *ref, *next_ref;339 340	rbtree_postorder_for_each_entry_safe(ref, next_ref,341					     &preftree->root.rb_root, rbnode) {342		free_inode_elem_list(ref->inode_list);343		free_pref(ref);344	}345 346	preftree->root = RB_ROOT_CACHED;347	preftree->count = 0;348}349 350/*351 * the rules for all callers of this function are:352 * - obtaining the parent is the goal353 * - if you add a key, you must know that it is a correct key354 * - if you cannot add the parent or a correct key, then we will look into the355 *   block later to set a correct key356 *357 * delayed refs358 * ============359 *        backref type | shared | indirect | shared | indirect360 * information         |   tree |     tree |   data |     data361 * --------------------+--------+----------+--------+----------362 *      parent logical |    y   |     -    |    -   |     -363 *      key to resolve |    -   |     y    |    y   |     y364 *  tree block logical |    -   |     -    |    -   |     -365 *  root for resolving |    y   |     y    |    y   |     y366 *367 * - column 1:       we've the parent -> done368 * - column 2, 3, 4: we use the key to find the parent369 *370 * on disk refs (inline or keyed)371 * ==============================372 *        backref type | shared | indirect | shared | indirect373 * information         |   tree |     tree |   data |     data374 * --------------------+--------+----------+--------+----------375 *      parent logical |    y   |     -    |    y   |     -376 *      key to resolve |    -   |     -    |    -   |     y377 *  tree block logical |    y   |     y    |    y   |     y378 *  root for resolving |    -   |     y    |    y   |     y379 *380 * - column 1, 3: we've the parent -> done381 * - column 2:    we take the first key from the block to find the parent382 *                (see add_missing_keys)383 * - column 4:    we use the key to find the parent384 *385 * additional information that's available but not required to find the parent386 * block might help in merging entries to gain some speed.387 */388static int add_prelim_ref(const struct btrfs_fs_info *fs_info,389			  struct preftree *preftree, u64 root_id,390			  const struct btrfs_key *key, int level, u64 parent,391			  u64 wanted_disk_byte, int count,392			  struct share_check *sc, gfp_t gfp_mask)393{394	struct prelim_ref *ref;395 396	if (root_id == BTRFS_DATA_RELOC_TREE_OBJECTID)397		return 0;398 399	ref = kmem_cache_alloc(btrfs_prelim_ref_cache, gfp_mask);400	if (!ref)401		return -ENOMEM;402 403	ref->root_id = root_id;404	if (key)405		ref->key_for_search = *key;406	else407		memset(&ref->key_for_search, 0, sizeof(ref->key_for_search));408 409	ref->inode_list = NULL;410	ref->level = level;411	ref->count = count;412	ref->parent = parent;413	ref->wanted_disk_byte = wanted_disk_byte;414	prelim_ref_insert(fs_info, preftree, ref, sc);415	return extent_is_shared(sc);416}417 418/* direct refs use root == 0, key == NULL */419static int add_direct_ref(const struct btrfs_fs_info *fs_info,420			  struct preftrees *preftrees, int level, u64 parent,421			  u64 wanted_disk_byte, int count,422			  struct share_check *sc, gfp_t gfp_mask)423{424	return add_prelim_ref(fs_info, &preftrees->direct, 0, NULL, level,425			      parent, wanted_disk_byte, count, sc, gfp_mask);426}427 428/* indirect refs use parent == 0 */429static int add_indirect_ref(const struct btrfs_fs_info *fs_info,430			    struct preftrees *preftrees, u64 root_id,431			    const struct btrfs_key *key, int level,432			    u64 wanted_disk_byte, int count,433			    struct share_check *sc, gfp_t gfp_mask)434{435	struct preftree *tree = &preftrees->indirect;436 437	if (!key)438		tree = &preftrees->indirect_missing_keys;439	return add_prelim_ref(fs_info, tree, root_id, key, level, 0,440			      wanted_disk_byte, count, sc, gfp_mask);441}442 443static int is_shared_data_backref(struct preftrees *preftrees, u64 bytenr)444{445	struct rb_node **p = &preftrees->direct.root.rb_root.rb_node;446	struct rb_node *parent = NULL;447	struct prelim_ref *ref = NULL;448	struct prelim_ref target = {};449	int result;450 451	target.parent = bytenr;452 453	while (*p) {454		parent = *p;455		ref = rb_entry(parent, struct prelim_ref, rbnode);456		result = prelim_ref_compare(ref, &target);457 458		if (result < 0)459			p = &(*p)->rb_left;460		else if (result > 0)461			p = &(*p)->rb_right;462		else463			return 1;464	}465	return 0;466}467 468static int add_all_parents(struct btrfs_backref_walk_ctx *ctx,469			   struct btrfs_root *root, struct btrfs_path *path,470			   struct ulist *parents,471			   struct preftrees *preftrees, struct prelim_ref *ref,472			   int level)473{474	int ret = 0;475	int slot;476	struct extent_buffer *eb;477	struct btrfs_key key;478	struct btrfs_key *key_for_search = &ref->key_for_search;479	struct btrfs_file_extent_item *fi;480	struct extent_inode_elem *eie = NULL, *old = NULL;481	u64 disk_byte;482	u64 wanted_disk_byte = ref->wanted_disk_byte;483	u64 count = 0;484	u64 data_offset;485	u8 type;486 487	if (level != 0) {488		eb = path->nodes[level];489		ret = ulist_add(parents, eb->start, 0, GFP_NOFS);490		if (ret < 0)491			return ret;492		return 0;493	}494 495	/*496	 * 1. We normally enter this function with the path already pointing to497	 *    the first item to check. But sometimes, we may enter it with498	 *    slot == nritems.499	 * 2. We are searching for normal backref but bytenr of this leaf500	 *    matches shared data backref501	 * 3. The leaf owner is not equal to the root we are searching502	 *503	 * For these cases, go to the next leaf before we continue.504	 */505	eb = path->nodes[0];506	if (path->slots[0] >= btrfs_header_nritems(eb) ||507	    is_shared_data_backref(preftrees, eb->start) ||508	    ref->root_id != btrfs_header_owner(eb)) {509		if (ctx->time_seq == BTRFS_SEQ_LAST)510			ret = btrfs_next_leaf(root, path);511		else512			ret = btrfs_next_old_leaf(root, path, ctx->time_seq);513	}514 515	while (!ret && count < ref->count) {516		eb = path->nodes[0];517		slot = path->slots[0];518 519		btrfs_item_key_to_cpu(eb, &key, slot);520 521		if (key.objectid != key_for_search->objectid ||522		    key.type != BTRFS_EXTENT_DATA_KEY)523			break;524 525		/*526		 * We are searching for normal backref but bytenr of this leaf527		 * matches shared data backref, OR528		 * the leaf owner is not equal to the root we are searching for529		 */530		if (slot == 0 &&531		    (is_shared_data_backref(preftrees, eb->start) ||532		     ref->root_id != btrfs_header_owner(eb))) {533			if (ctx->time_seq == BTRFS_SEQ_LAST)534				ret = btrfs_next_leaf(root, path);535			else536				ret = btrfs_next_old_leaf(root, path, ctx->time_seq);537			continue;538		}539		fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item);540		type = btrfs_file_extent_type(eb, fi);541		if (type == BTRFS_FILE_EXTENT_INLINE)542			goto next;543		disk_byte = btrfs_file_extent_disk_bytenr(eb, fi);544		data_offset = btrfs_file_extent_offset(eb, fi);545 546		if (disk_byte == wanted_disk_byte) {547			eie = NULL;548			old = NULL;549			if (ref->key_for_search.offset == key.offset - data_offset)550				count++;551			else552				goto next;553			if (!ctx->skip_inode_ref_list) {554				ret = check_extent_in_eb(ctx, &key, eb, fi, &eie);555				if (ret == BTRFS_ITERATE_EXTENT_INODES_STOP ||556				    ret < 0)557					break;558			}559			if (ret > 0)560				goto next;561			ret = ulist_add_merge_ptr(parents, eb->start,562						  eie, (void **)&old, GFP_NOFS);563			if (ret < 0)564				break;565			if (!ret && !ctx->skip_inode_ref_list) {566				while (old->next)567					old = old->next;568				old->next = eie;569			}570			eie = NULL;571		}572next:573		if (ctx->time_seq == BTRFS_SEQ_LAST)574			ret = btrfs_next_item(root, path);575		else576			ret = btrfs_next_old_item(root, path, ctx->time_seq);577	}578 579	if (ret == BTRFS_ITERATE_EXTENT_INODES_STOP || ret < 0)580		free_inode_elem_list(eie);581	else if (ret > 0)582		ret = 0;583 584	return ret;585}586 587/*588 * resolve an indirect backref in the form (root_id, key, level)589 * to a logical address590 */591static int resolve_indirect_ref(struct btrfs_backref_walk_ctx *ctx,592				struct btrfs_path *path,593				struct preftrees *preftrees,594				struct prelim_ref *ref, struct ulist *parents)595{596	struct btrfs_root *root;597	struct extent_buffer *eb;598	int ret = 0;599	int root_level;600	int level = ref->level;601	struct btrfs_key search_key = ref->key_for_search;602 603	/*604	 * If we're search_commit_root we could possibly be holding locks on605	 * other tree nodes.  This happens when qgroups does backref walks when606	 * adding new delayed refs.  To deal with this we need to look in cache607	 * for the root, and if we don't find it then we need to search the608	 * tree_root's commit root, thus the btrfs_get_fs_root_commit_root usage609	 * here.610	 */611	if (path->search_commit_root)612		root = btrfs_get_fs_root_commit_root(ctx->fs_info, path, ref->root_id);613	else614		root = btrfs_get_fs_root(ctx->fs_info, ref->root_id, false);615	if (IS_ERR(root)) {616		ret = PTR_ERR(root);617		goto out_free;618	}619 620	if (!path->search_commit_root &&621	    test_bit(BTRFS_ROOT_DELETING, &root->state)) {622		ret = -ENOENT;623		goto out;624	}625 626	if (btrfs_is_testing(ctx->fs_info)) {627		ret = -ENOENT;628		goto out;629	}630 631	if (path->search_commit_root)632		root_level = btrfs_header_level(root->commit_root);633	else if (ctx->time_seq == BTRFS_SEQ_LAST)634		root_level = btrfs_header_level(root->node);635	else636		root_level = btrfs_old_root_level(root, ctx->time_seq);637 638	if (root_level + 1 == level)639		goto out;640 641	/*642	 * We can often find data backrefs with an offset that is too large643	 * (>= LLONG_MAX, maximum allowed file offset) due to underflows when644	 * subtracting a file's offset with the data offset of its645	 * corresponding extent data item. This can happen for example in the646	 * clone ioctl.647	 *648	 * So if we detect such case we set the search key's offset to zero to649	 * make sure we will find the matching file extent item at650	 * add_all_parents(), otherwise we will miss it because the offset651	 * taken form the backref is much larger then the offset of the file652	 * extent item. This can make us scan a very large number of file653	 * extent items, but at least it will not make us miss any.654	 *655	 * This is an ugly workaround for a behaviour that should have never656	 * existed, but it does and a fix for the clone ioctl would touch a lot657	 * of places, cause backwards incompatibility and would not fix the658	 * problem for extents cloned with older kernels.659	 */660	if (search_key.type == BTRFS_EXTENT_DATA_KEY &&661	    search_key.offset >= LLONG_MAX)662		search_key.offset = 0;663	path->lowest_level = level;664	if (ctx->time_seq == BTRFS_SEQ_LAST)665		ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);666	else667		ret = btrfs_search_old_slot(root, &search_key, path, ctx->time_seq);668 669	btrfs_debug(ctx->fs_info,670		"search slot in root %llu (level %d, ref count %d) returned %d for key (%llu %u %llu)",671		 ref->root_id, level, ref->count, ret,672		 ref->key_for_search.objectid, ref->key_for_search.type,673		 ref->key_for_search.offset);674	if (ret < 0)675		goto out;676 677	eb = path->nodes[level];678	while (!eb) {679		if (WARN_ON(!level)) {680			ret = 1;681			goto out;682		}683		level--;684		eb = path->nodes[level];685	}686 687	ret = add_all_parents(ctx, root, path, parents, preftrees, ref, level);688out:689	btrfs_put_root(root);690out_free:691	path->lowest_level = 0;692	btrfs_release_path(path);693	return ret;694}695 696static struct extent_inode_elem *697unode_aux_to_inode_list(struct ulist_node *node)698{699	if (!node)700		return NULL;701	return (struct extent_inode_elem *)(uintptr_t)node->aux;702}703 704static void free_leaf_list(struct ulist *ulist)705{706	struct ulist_node *node;707	struct ulist_iterator uiter;708 709	ULIST_ITER_INIT(&uiter);710	while ((node = ulist_next(ulist, &uiter)))711		free_inode_elem_list(unode_aux_to_inode_list(node));712 713	ulist_free(ulist);714}715 716/*717 * We maintain three separate rbtrees: one for direct refs, one for718 * indirect refs which have a key, and one for indirect refs which do not719 * have a key. Each tree does merge on insertion.720 *721 * Once all of the references are located, we iterate over the tree of722 * indirect refs with missing keys. An appropriate key is located and723 * the ref is moved onto the tree for indirect refs. After all missing724 * keys are thus located, we iterate over the indirect ref tree, resolve725 * each reference, and then insert the resolved reference onto the726 * direct tree (merging there too).727 *728 * New backrefs (i.e., for parent nodes) are added to the appropriate729 * rbtree as they are encountered. The new backrefs are subsequently730 * resolved as above.731 */732static int resolve_indirect_refs(struct btrfs_backref_walk_ctx *ctx,733				 struct btrfs_path *path,734				 struct preftrees *preftrees,735				 struct share_check *sc)736{737	int err;738	int ret = 0;739	struct ulist *parents;740	struct ulist_node *node;741	struct ulist_iterator uiter;742	struct rb_node *rnode;743 744	parents = ulist_alloc(GFP_NOFS);745	if (!parents)746		return -ENOMEM;747 748	/*749	 * We could trade memory usage for performance here by iterating750	 * the tree, allocating new refs for each insertion, and then751	 * freeing the entire indirect tree when we're done.  In some test752	 * cases, the tree can grow quite large (~200k objects).753	 */754	while ((rnode = rb_first_cached(&preftrees->indirect.root))) {755		struct prelim_ref *ref;756 757		ref = rb_entry(rnode, struct prelim_ref, rbnode);758		if (WARN(ref->parent,759			 "BUG: direct ref found in indirect tree")) {760			ret = -EINVAL;761			goto out;762		}763 764		rb_erase_cached(&ref->rbnode, &preftrees->indirect.root);765		preftrees->indirect.count--;766 767		if (ref->count == 0) {768			free_pref(ref);769			continue;770		}771 772		if (sc && ref->root_id != btrfs_root_id(sc->root)) {773			free_pref(ref);774			ret = BACKREF_FOUND_SHARED;775			goto out;776		}777		err = resolve_indirect_ref(ctx, path, preftrees, ref, parents);778		/*779		 * we can only tolerate ENOENT,otherwise,we should catch error780		 * and return directly.781		 */782		if (err == -ENOENT) {783			prelim_ref_insert(ctx->fs_info, &preftrees->direct, ref,784					  NULL);785			continue;786		} else if (err) {787			free_pref(ref);788			ret = err;789			goto out;790		}791 792		/* we put the first parent into the ref at hand */793		ULIST_ITER_INIT(&uiter);794		node = ulist_next(parents, &uiter);795		ref->parent = node ? node->val : 0;796		ref->inode_list = unode_aux_to_inode_list(node);797 798		/* Add a prelim_ref(s) for any other parent(s). */799		while ((node = ulist_next(parents, &uiter))) {800			struct prelim_ref *new_ref;801 802			new_ref = kmem_cache_alloc(btrfs_prelim_ref_cache,803						   GFP_NOFS);804			if (!new_ref) {805				free_pref(ref);806				ret = -ENOMEM;807				goto out;808			}809			memcpy(new_ref, ref, sizeof(*ref));810			new_ref->parent = node->val;811			new_ref->inode_list = unode_aux_to_inode_list(node);812			prelim_ref_insert(ctx->fs_info, &preftrees->direct,813					  new_ref, NULL);814		}815 816		/*817		 * Now it's a direct ref, put it in the direct tree. We must818		 * do this last because the ref could be merged/freed here.819		 */820		prelim_ref_insert(ctx->fs_info, &preftrees->direct, ref, NULL);821 822		ulist_reinit(parents);823		cond_resched();824	}825out:826	/*827	 * We may have inode lists attached to refs in the parents ulist, so we828	 * must free them before freeing the ulist and its refs.829	 */830	free_leaf_list(parents);831	return ret;832}833 834/*835 * read tree blocks and add keys where required.836 */837static int add_missing_keys(struct btrfs_fs_info *fs_info,838			    struct preftrees *preftrees, bool lock)839{840	struct prelim_ref *ref;841	struct extent_buffer *eb;842	struct preftree *tree = &preftrees->indirect_missing_keys;843	struct rb_node *node;844 845	while ((node = rb_first_cached(&tree->root))) {846		struct btrfs_tree_parent_check check = { 0 };847 848		ref = rb_entry(node, struct prelim_ref, rbnode);849		rb_erase_cached(node, &tree->root);850 851		BUG_ON(ref->parent);	/* should not be a direct ref */852		BUG_ON(ref->key_for_search.type);853		BUG_ON(!ref->wanted_disk_byte);854 855		check.level = ref->level - 1;856		check.owner_root = ref->root_id;857 858		eb = read_tree_block(fs_info, ref->wanted_disk_byte, &check);859		if (IS_ERR(eb)) {860			free_pref(ref);861			return PTR_ERR(eb);862		}863		if (!extent_buffer_uptodate(eb)) {864			free_pref(ref);865			free_extent_buffer(eb);866			return -EIO;867		}868 869		if (lock)870			btrfs_tree_read_lock(eb);871		if (btrfs_header_level(eb) == 0)872			btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0);873		else874			btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0);875		if (lock)876			btrfs_tree_read_unlock(eb);877		free_extent_buffer(eb);878		prelim_ref_insert(fs_info, &preftrees->indirect, ref, NULL);879		cond_resched();880	}881	return 0;882}883 884/*885 * add all currently queued delayed refs from this head whose seq nr is886 * smaller or equal that seq to the list887 */888static int add_delayed_refs(const struct btrfs_fs_info *fs_info,889			    struct btrfs_delayed_ref_head *head, u64 seq,890			    struct preftrees *preftrees, struct share_check *sc)891{892	struct btrfs_delayed_ref_node *node;893	struct btrfs_key key;894	struct rb_node *n;895	int count;896	int ret = 0;897 898	spin_lock(&head->lock);899	for (n = rb_first_cached(&head->ref_tree); n; n = rb_next(n)) {900		node = rb_entry(n, struct btrfs_delayed_ref_node,901				ref_node);902		if (node->seq > seq)903			continue;904 905		switch (node->action) {906		case BTRFS_ADD_DELAYED_EXTENT:907		case BTRFS_UPDATE_DELAYED_HEAD:908			WARN_ON(1);909			continue;910		case BTRFS_ADD_DELAYED_REF:911			count = node->ref_mod;912			break;913		case BTRFS_DROP_DELAYED_REF:914			count = node->ref_mod * -1;915			break;916		default:917			BUG();918		}919		switch (node->type) {920		case BTRFS_TREE_BLOCK_REF_KEY: {921			/* NORMAL INDIRECT METADATA backref */922			struct btrfs_key *key_ptr = NULL;923			/* The owner of a tree block ref is the level. */924			int level = btrfs_delayed_ref_owner(node);925 926			if (head->extent_op && head->extent_op->update_key) {927				btrfs_disk_key_to_cpu(&key, &head->extent_op->key);928				key_ptr = &key;929			}930 931			ret = add_indirect_ref(fs_info, preftrees, node->ref_root,932					       key_ptr, level + 1, node->bytenr,933					       count, sc, GFP_ATOMIC);934			break;935		}936		case BTRFS_SHARED_BLOCK_REF_KEY: {937			/*938			 * SHARED DIRECT METADATA backref939			 *940			 * The owner of a tree block ref is the level.941			 */942			int level = btrfs_delayed_ref_owner(node);943 944			ret = add_direct_ref(fs_info, preftrees, level + 1,945					     node->parent, node->bytenr, count,946					     sc, GFP_ATOMIC);947			break;948		}949		case BTRFS_EXTENT_DATA_REF_KEY: {950			/* NORMAL INDIRECT DATA backref */951			key.objectid = btrfs_delayed_ref_owner(node);952			key.type = BTRFS_EXTENT_DATA_KEY;953			key.offset = btrfs_delayed_ref_offset(node);954 955			/*956			 * If we have a share check context and a reference for957			 * another inode, we can't exit immediately. This is958			 * because even if this is a BTRFS_ADD_DELAYED_REF959			 * reference we may find next a BTRFS_DROP_DELAYED_REF960			 * which cancels out this ADD reference.961			 *962			 * If this is a DROP reference and there was no previous963			 * ADD reference, then we need to signal that when we964			 * process references from the extent tree (through965			 * add_inline_refs() and add_keyed_refs()), we should966			 * not exit early if we find a reference for another967			 * inode, because one of the delayed DROP references968			 * may cancel that reference in the extent tree.969			 */970			if (sc && count < 0)971				sc->have_delayed_delete_refs = true;972 973			ret = add_indirect_ref(fs_info, preftrees, node->ref_root,974					       &key, 0, node->bytenr, count, sc,975					       GFP_ATOMIC);976			break;977		}978		case BTRFS_SHARED_DATA_REF_KEY: {979			/* SHARED DIRECT FULL backref */980			ret = add_direct_ref(fs_info, preftrees, 0, node->parent,981					     node->bytenr, count, sc,982					     GFP_ATOMIC);983			break;984		}985		default:986			WARN_ON(1);987		}988		/*989		 * We must ignore BACKREF_FOUND_SHARED until all delayed990		 * refs have been checked.991		 */992		if (ret && (ret != BACKREF_FOUND_SHARED))993			break;994	}995	if (!ret)996		ret = extent_is_shared(sc);997 998	spin_unlock(&head->lock);999	return ret;1000}1001 1002/*1003 * add all inline backrefs for bytenr to the list1004 *1005 * Returns 0 on success, <0 on error, or BACKREF_FOUND_SHARED.1006 */1007static int add_inline_refs(struct btrfs_backref_walk_ctx *ctx,1008			   struct btrfs_path *path,1009			   int *info_level, struct preftrees *preftrees,1010			   struct share_check *sc)1011{1012	int ret = 0;1013	int slot;1014	struct extent_buffer *leaf;1015	struct btrfs_key key;1016	struct btrfs_key found_key;1017	unsigned long ptr;1018	unsigned long end;1019	struct btrfs_extent_item *ei;1020	u64 flags;1021	u64 item_size;1022 1023	/*1024	 * enumerate all inline refs1025	 */1026	leaf = path->nodes[0];1027	slot = path->slots[0];1028 1029	item_size = btrfs_item_size(leaf, slot);1030	ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item);1031 1032	if (ctx->check_extent_item) {1033		ret = ctx->check_extent_item(ctx->bytenr, ei, leaf, ctx->user_ctx);1034		if (ret)1035			return ret;1036	}1037 1038	flags = btrfs_extent_flags(leaf, ei);1039	btrfs_item_key_to_cpu(leaf, &found_key, slot);1040 1041	ptr = (unsigned long)(ei + 1);1042	end = (unsigned long)ei + item_size;1043 1044	if (found_key.type == BTRFS_EXTENT_ITEM_KEY &&1045	    flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {1046		struct btrfs_tree_block_info *info;1047 1048		info = (struct btrfs_tree_block_info *)ptr;1049		*info_level = btrfs_tree_block_level(leaf, info);1050		ptr += sizeof(struct btrfs_tree_block_info);1051		BUG_ON(ptr > end);1052	} else if (found_key.type == BTRFS_METADATA_ITEM_KEY) {1053		*info_level = found_key.offset;1054	} else {1055		BUG_ON(!(flags & BTRFS_EXTENT_FLAG_DATA));1056	}1057 1058	while (ptr < end) {1059		struct btrfs_extent_inline_ref *iref;1060		u64 offset;1061		int type;1062 1063		iref = (struct btrfs_extent_inline_ref *)ptr;1064		type = btrfs_get_extent_inline_ref_type(leaf, iref,1065							BTRFS_REF_TYPE_ANY);1066		if (type == BTRFS_REF_TYPE_INVALID)1067			return -EUCLEAN;1068 1069		offset = btrfs_extent_inline_ref_offset(leaf, iref);1070 1071		switch (type) {1072		case BTRFS_SHARED_BLOCK_REF_KEY:1073			ret = add_direct_ref(ctx->fs_info, preftrees,1074					     *info_level + 1, offset,1075					     ctx->bytenr, 1, NULL, GFP_NOFS);1076			break;1077		case BTRFS_SHARED_DATA_REF_KEY: {1078			struct btrfs_shared_data_ref *sdref;1079			int count;1080 1081			sdref = (struct btrfs_shared_data_ref *)(iref + 1);1082			count = btrfs_shared_data_ref_count(leaf, sdref);1083 1084			ret = add_direct_ref(ctx->fs_info, preftrees, 0, offset,1085					     ctx->bytenr, count, sc, GFP_NOFS);1086			break;1087		}1088		case BTRFS_TREE_BLOCK_REF_KEY:1089			ret = add_indirect_ref(ctx->fs_info, preftrees, offset,1090					       NULL, *info_level + 1,1091					       ctx->bytenr, 1, NULL, GFP_NOFS);1092			break;1093		case BTRFS_EXTENT_DATA_REF_KEY: {1094			struct btrfs_extent_data_ref *dref;1095			int count;1096			u64 root;1097 1098			dref = (struct btrfs_extent_data_ref *)(&iref->offset);1099			count = btrfs_extent_data_ref_count(leaf, dref);1100			key.objectid = btrfs_extent_data_ref_objectid(leaf,1101								      dref);1102			key.type = BTRFS_EXTENT_DATA_KEY;1103			key.offset = btrfs_extent_data_ref_offset(leaf, dref);1104 1105			if (sc && key.objectid != sc->inum &&1106			    !sc->have_delayed_delete_refs) {1107				ret = BACKREF_FOUND_SHARED;1108				break;1109			}1110 1111			root = btrfs_extent_data_ref_root(leaf, dref);1112 1113			if (!ctx->skip_data_ref ||1114			    !ctx->skip_data_ref(root, key.objectid, key.offset,1115						ctx->user_ctx))1116				ret = add_indirect_ref(ctx->fs_info, preftrees,1117						       root, &key, 0, ctx->bytenr,1118						       count, sc, GFP_NOFS);1119			break;1120		}1121		case BTRFS_EXTENT_OWNER_REF_KEY:1122			ASSERT(btrfs_fs_incompat(ctx->fs_info, SIMPLE_QUOTA));1123			break;1124		default:1125			WARN_ON(1);1126		}1127		if (ret)1128			return ret;1129		ptr += btrfs_extent_inline_ref_size(type);1130	}1131 1132	return 0;1133}1134 1135/*1136 * add all non-inline backrefs for bytenr to the list1137 *1138 * Returns 0 on success, <0 on error, or BACKREF_FOUND_SHARED.1139 */1140static int add_keyed_refs(struct btrfs_backref_walk_ctx *ctx,1141			  struct btrfs_root *extent_root,1142			  struct btrfs_path *path,1143			  int info_level, struct preftrees *preftrees,1144			  struct share_check *sc)1145{1146	struct btrfs_fs_info *fs_info = extent_root->fs_info;1147	int ret;1148	int slot;1149	struct extent_buffer *leaf;1150	struct btrfs_key key;1151 1152	while (1) {1153		ret = btrfs_next_item(extent_root, path);1154		if (ret < 0)1155			break;1156		if (ret) {1157			ret = 0;1158			break;1159		}1160 1161		slot = path->slots[0];1162		leaf = path->nodes[0];1163		btrfs_item_key_to_cpu(leaf, &key, slot);1164 1165		if (key.objectid != ctx->bytenr)1166			break;1167		if (key.type < BTRFS_TREE_BLOCK_REF_KEY)1168			continue;1169		if (key.type > BTRFS_SHARED_DATA_REF_KEY)1170			break;1171 1172		switch (key.type) {1173		case BTRFS_SHARED_BLOCK_REF_KEY:1174			/* SHARED DIRECT METADATA backref */1175			ret = add_direct_ref(fs_info, preftrees,1176					     info_level + 1, key.offset,1177					     ctx->bytenr, 1, NULL, GFP_NOFS);1178			break;1179		case BTRFS_SHARED_DATA_REF_KEY: {1180			/* SHARED DIRECT FULL backref */1181			struct btrfs_shared_data_ref *sdref;1182			int count;1183 1184			sdref = btrfs_item_ptr(leaf, slot,1185					      struct btrfs_shared_data_ref);1186			count = btrfs_shared_data_ref_count(leaf, sdref);1187			ret = add_direct_ref(fs_info, preftrees, 0,1188					     key.offset, ctx->bytenr, count,1189					     sc, GFP_NOFS);1190			break;1191		}1192		case BTRFS_TREE_BLOCK_REF_KEY:1193			/* NORMAL INDIRECT METADATA backref */1194			ret = add_indirect_ref(fs_info, preftrees, key.offset,1195					       NULL, info_level + 1, ctx->bytenr,1196					       1, NULL, GFP_NOFS);1197			break;1198		case BTRFS_EXTENT_DATA_REF_KEY: {1199			/* NORMAL INDIRECT DATA backref */1200			struct btrfs_extent_data_ref *dref;1201			int count;1202			u64 root;1203 1204			dref = btrfs_item_ptr(leaf, slot,1205					      struct btrfs_extent_data_ref);1206			count = btrfs_extent_data_ref_count(leaf, dref);1207			key.objectid = btrfs_extent_data_ref_objectid(leaf,1208								      dref);1209			key.type = BTRFS_EXTENT_DATA_KEY;1210			key.offset = btrfs_extent_data_ref_offset(leaf, dref);1211 1212			if (sc && key.objectid != sc->inum &&1213			    !sc->have_delayed_delete_refs) {1214				ret = BACKREF_FOUND_SHARED;1215				break;1216			}1217 1218			root = btrfs_extent_data_ref_root(leaf, dref);1219 1220			if (!ctx->skip_data_ref ||1221			    !ctx->skip_data_ref(root, key.objectid, key.offset,1222						ctx->user_ctx))1223				ret = add_indirect_ref(fs_info, preftrees, root,1224						       &key, 0, ctx->bytenr,1225						       count, sc, GFP_NOFS);1226			break;1227		}1228		default:1229			WARN_ON(1);1230		}1231		if (ret)1232			return ret;1233 1234	}1235 1236	return ret;1237}1238 1239/*1240 * The caller has joined a transaction or is holding a read lock on the1241 * fs_info->commit_root_sem semaphore, so no need to worry about the root's last1242 * snapshot field changing while updating or checking the cache.1243 */1244static bool lookup_backref_shared_cache(struct btrfs_backref_share_check_ctx *ctx,1245					struct btrfs_root *root,1246					u64 bytenr, int level, bool *is_shared)1247{1248	const struct btrfs_fs_info *fs_info = root->fs_info;1249	struct btrfs_backref_shared_cache_entry *entry;1250 1251	if (!current->journal_info)1252		lockdep_assert_held(&fs_info->commit_root_sem);1253 1254	if (!ctx->use_path_cache)1255		return false;1256 1257	if (WARN_ON_ONCE(level >= BTRFS_MAX_LEVEL))1258		return false;1259 1260	/*1261	 * Level -1 is used for the data extent, which is not reliable to cache1262	 * because its reference count can increase or decrease without us1263	 * realizing. We cache results only for extent buffers that lead from1264	 * the root node down to the leaf with the file extent item.1265	 */1266	ASSERT(level >= 0);1267 1268	entry = &ctx->path_cache_entries[level];1269 1270	/* Unused cache entry or being used for some other extent buffer. */1271	if (entry->bytenr != bytenr)1272		return false;1273 1274	/*1275	 * We cached a false result, but the last snapshot generation of the1276	 * root changed, so we now have a snapshot. Don't trust the result.1277	 */1278	if (!entry->is_shared &&1279	    entry->gen != btrfs_root_last_snapshot(&root->root_item))1280		return false;1281 1282	/*1283	 * If we cached a true result and the last generation used for dropping1284	 * a root changed, we can not trust the result, because the dropped root1285	 * could be a snapshot sharing this extent buffer.1286	 */1287	if (entry->is_shared &&1288	    entry->gen != btrfs_get_last_root_drop_gen(fs_info))1289		return false;1290 1291	*is_shared = entry->is_shared;1292	/*1293	 * If the node at this level is shared, than all nodes below are also1294	 * shared. Currently some of the nodes below may be marked as not shared1295	 * because we have just switched from one leaf to another, and switched1296	 * also other nodes above the leaf and below the current level, so mark1297	 * them as shared.1298	 */1299	if (*is_shared) {1300		for (int i = 0; i < level; i++) {1301			ctx->path_cache_entries[i].is_shared = true;1302			ctx->path_cache_entries[i].gen = entry->gen;1303		}1304	}1305 1306	return true;1307}1308 1309/*1310 * The caller has joined a transaction or is holding a read lock on the1311 * fs_info->commit_root_sem semaphore, so no need to worry about the root's last1312 * snapshot field changing while updating or checking the cache.1313 */1314static void store_backref_shared_cache(struct btrfs_backref_share_check_ctx *ctx,1315				       struct btrfs_root *root,1316				       u64 bytenr, int level, bool is_shared)1317{1318	const struct btrfs_fs_info *fs_info = root->fs_info;1319	struct btrfs_backref_shared_cache_entry *entry;1320	u64 gen;1321 1322	if (!current->journal_info)1323		lockdep_assert_held(&fs_info->commit_root_sem);1324 1325	if (!ctx->use_path_cache)1326		return;1327 1328	if (WARN_ON_ONCE(level >= BTRFS_MAX_LEVEL))1329		return;1330 1331	/*1332	 * Level -1 is used for the data extent, which is not reliable to cache1333	 * because its reference count can increase or decrease without us1334	 * realizing. We cache results only for extent buffers that lead from1335	 * the root node down to the leaf with the file extent item.1336	 */1337	ASSERT(level >= 0);1338 1339	if (is_shared)1340		gen = btrfs_get_last_root_drop_gen(fs_info);1341	else1342		gen = btrfs_root_last_snapshot(&root->root_item);1343 1344	entry = &ctx->path_cache_entries[level];1345	entry->bytenr = bytenr;1346	entry->is_shared = is_shared;1347	entry->gen = gen;1348 1349	/*1350	 * If we found an extent buffer is shared, set the cache result for all1351	 * extent buffers below it to true. As nodes in the path are COWed,1352	 * their sharedness is moved to their children, and if a leaf is COWed,1353	 * then the sharedness of a data extent becomes direct, the refcount of1354	 * data extent is increased in the extent item at the extent tree.1355	 */1356	if (is_shared) {1357		for (int i = 0; i < level; i++) {1358			entry = &ctx->path_cache_entries[i];1359			entry->is_shared = is_shared;1360			entry->gen = gen;1361		}1362	}1363}1364 1365/*1366 * this adds all existing backrefs (inline backrefs, backrefs and delayed1367 * refs) for the given bytenr to the refs list, merges duplicates and resolves1368 * indirect refs to their parent bytenr.1369 * When roots are found, they're added to the roots list1370 *1371 * @ctx:     Backref walking context object, must be not NULL.1372 * @sc:      If !NULL, then immediately return BACKREF_FOUND_SHARED when a1373 *           shared extent is detected.1374 *1375 * Otherwise this returns 0 for success and <0 for an error.1376 *1377 * FIXME some caching might speed things up1378 */1379static int find_parent_nodes(struct btrfs_backref_walk_ctx *ctx,1380			     struct share_check *sc)1381{1382	struct btrfs_root *root = btrfs_extent_root(ctx->fs_info, ctx->bytenr);1383	struct btrfs_key key;1384	struct btrfs_path *path;1385	struct btrfs_delayed_ref_root *delayed_refs = NULL;1386	struct btrfs_delayed_ref_head *head;1387	int info_level = 0;1388	int ret;1389	struct prelim_ref *ref;1390	struct rb_node *node;1391	struct extent_inode_elem *eie = NULL;1392	struct preftrees preftrees = {1393		.direct = PREFTREE_INIT,1394		.indirect = PREFTREE_INIT,1395		.indirect_missing_keys = PREFTREE_INIT1396	};1397 1398	/* Roots ulist is not needed when using a sharedness check context. */1399	if (sc)1400		ASSERT(ctx->roots == NULL);1401 1402	key.objectid = ctx->bytenr;1403	key.offset = (u64)-1;1404	if (btrfs_fs_incompat(ctx->fs_info, SKINNY_METADATA))1405		key.type = BTRFS_METADATA_ITEM_KEY;1406	else1407		key.type = BTRFS_EXTENT_ITEM_KEY;1408 1409	path = btrfs_alloc_path();1410	if (!path)1411		return -ENOMEM;1412	if (!ctx->trans) {1413		path->search_commit_root = 1;1414		path->skip_locking = 1;1415	}1416 1417	if (ctx->time_seq == BTRFS_SEQ_LAST)1418		path->skip_locking = 1;1419 1420again:1421	head = NULL;1422 1423	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);1424	if (ret < 0)1425		goto out;1426	if (ret == 0) {1427		/*1428		 * Key with offset -1 found, there would have to exist an extent1429		 * item with such offset, but this is out of the valid range.1430		 */1431		ret = -EUCLEAN;1432		goto out;1433	}1434 1435	if (ctx->trans && likely(ctx->trans->type != __TRANS_DUMMY) &&1436	    ctx->time_seq != BTRFS_SEQ_LAST) {1437		/*1438		 * We have a specific time_seq we care about and trans which1439		 * means we have the path lock, we need to grab the ref head and1440		 * lock it so we have a consistent view of the refs at the given1441		 * time.1442		 */1443		delayed_refs = &ctx->trans->transaction->delayed_refs;1444		spin_lock(&delayed_refs->lock);1445		head = btrfs_find_delayed_ref_head(delayed_refs, ctx->bytenr);1446		if (head) {1447			if (!mutex_trylock(&head->mutex)) {1448				refcount_inc(&head->refs);1449				spin_unlock(&delayed_refs->lock);1450 1451				btrfs_release_path(path);1452 1453				/*1454				 * Mutex was contended, block until it's1455				 * released and try again1456				 */1457				mutex_lock(&head->mutex);1458				mutex_unlock(&head->mutex);1459				btrfs_put_delayed_ref_head(head);1460				goto again;1461			}1462			spin_unlock(&delayed_refs->lock);1463			ret = add_delayed_refs(ctx->fs_info, head, ctx->time_seq,1464					       &preftrees, sc);1465			mutex_unlock(&head->mutex);1466			if (ret)1467				goto out;1468		} else {1469			spin_unlock(&delayed_refs->lock);1470		}1471	}1472 1473	if (path->slots[0]) {1474		struct extent_buffer *leaf;1475		int slot;1476 1477		path->slots[0]--;1478		leaf = path->nodes[0];1479		slot = path->slots[0];1480		btrfs_item_key_to_cpu(leaf, &key, slot);1481		if (key.objectid == ctx->bytenr &&1482		    (key.type == BTRFS_EXTENT_ITEM_KEY ||1483		     key.type == BTRFS_METADATA_ITEM_KEY)) {1484			ret = add_inline_refs(ctx, path, &info_level,1485					      &preftrees, sc);1486			if (ret)1487				goto out;1488			ret = add_keyed_refs(ctx, root, path, info_level,1489					     &preftrees, sc);1490			if (ret)1491				goto out;1492		}1493	}1494 1495	/*1496	 * If we have a share context and we reached here, it means the extent1497	 * is not directly shared (no multiple reference items for it),1498	 * otherwise we would have exited earlier with a return value of1499	 * BACKREF_FOUND_SHARED after processing delayed references or while1500	 * processing inline or keyed references from the extent tree.1501	 * The extent may however be indirectly shared through shared subtrees1502	 * as a result from creating snapshots, so we determine below what is1503	 * its parent node, in case we are dealing with a metadata extent, or1504	 * what's the leaf (or leaves), from a fs tree, that has a file extent1505	 * item pointing to it in case we are dealing with a data extent.1506	 */1507	ASSERT(extent_is_shared(sc) == 0);1508 1509	/*1510	 * If we are here for a data extent and we have a share_check structure1511	 * it means the data extent is not directly shared (does not have1512	 * multiple reference items), so we have to check if a path in the fs1513	 * tree (going from the root node down to the leaf that has the file1514	 * extent item pointing to the data extent) is shared, that is, if any1515	 * of the extent buffers in the path is referenced by other trees.1516	 */1517	if (sc && ctx->bytenr == sc->data_bytenr) {1518		/*1519		 * If our data extent is from a generation more recent than the1520		 * last generation used to snapshot the root, then we know that1521		 * it can not be shared through subtrees, so we can skip1522		 * resolving indirect references, there's no point in1523		 * determining the extent buffers for the path from the fs tree1524		 * root node down to the leaf that has the file extent item that1525		 * points to the data extent.1526		 */1527		if (sc->data_extent_gen >1528		    btrfs_root_last_snapshot(&sc->root->root_item)) {1529			ret = BACKREF_FOUND_NOT_SHARED;1530			goto out;1531		}1532 1533		/*1534		 * If we are only determining if a data extent is shared or not1535		 * and the corresponding file extent item is located in the same1536		 * leaf as the previous file extent item, we can skip resolving1537		 * indirect references for a data extent, since the fs tree path1538		 * is the same (same leaf, so same path). We skip as long as the1539		 * cached result for the leaf is valid and only if there's only1540		 * one file extent item pointing to the data extent, because in1541		 * the case of multiple file extent items, they may be located1542		 * in different leaves and therefore we have multiple paths.1543		 */1544		if (sc->ctx->curr_leaf_bytenr == sc->ctx->prev_leaf_bytenr &&1545		    sc->self_ref_count == 1) {1546			bool cached;1547			bool is_shared;1548 1549			cached = lookup_backref_shared_cache(sc->ctx, sc->root,1550						     sc->ctx->curr_leaf_bytenr,1551						     0, &is_shared);1552			if (cached) {1553				if (is_shared)1554					ret = BACKREF_FOUND_SHARED;1555				else1556					ret = BACKREF_FOUND_NOT_SHARED;1557				goto out;1558			}1559		}1560	}1561 1562	btrfs_release_path(path);1563 1564	ret = add_missing_keys(ctx->fs_info, &preftrees, path->skip_locking == 0);1565	if (ret)1566		goto out;1567 1568	WARN_ON(!RB_EMPTY_ROOT(&preftrees.indirect_missing_keys.root.rb_root));1569 1570	ret = resolve_indirect_refs(ctx, path, &preftrees, sc);1571	if (ret)1572		goto out;1573 1574	WARN_ON(!RB_EMPTY_ROOT(&preftrees.indirect.root.rb_root));1575 1576	/*1577	 * This walks the tree of merged and resolved refs. Tree blocks are1578	 * read in as needed. Unique entries are added to the ulist, and1579	 * the list of found roots is updated.1580	 *1581	 * We release the entire tree in one go before returning.1582	 */1583	node = rb_first_cached(&preftrees.direct.root);1584	while (node) {1585		ref = rb_entry(node, struct prelim_ref, rbnode);1586		node = rb_next(&ref->rbnode);1587		/*1588		 * ref->count < 0 can happen here if there are delayed1589		 * refs with a node->action of BTRFS_DROP_DELAYED_REF.1590		 * prelim_ref_insert() relies on this when merging1591		 * identical refs to keep the overall count correct.1592		 * prelim_ref_insert() will merge only those refs1593		 * which compare identically.  Any refs having1594		 * e.g. different offsets would not be merged,1595		 * and would retain their original ref->count < 0.1596		 */1597		if (ctx->roots && ref->count && ref->root_id && ref->parent == 0) {1598			/* no parent == root of tree */1599			ret = ulist_add(ctx->roots, ref->root_id, 0, GFP_NOFS);1600			if (ret < 0)1601				goto out;1602		}1603		if (ref->count && ref->parent) {1604			if (!ctx->skip_inode_ref_list && !ref->inode_list &&1605			    ref->level == 0) {1606				struct btrfs_tree_parent_check check = { 0 };1607				struct extent_buffer *eb;1608 1609				check.level = ref->level;1610 1611				eb = read_tree_block(ctx->fs_info, ref->parent,1612						     &check);1613				if (IS_ERR(eb)) {1614					ret = PTR_ERR(eb);1615					goto out;1616				}1617				if (!extent_buffer_uptodate(eb)) {1618					free_extent_buffer(eb);1619					ret = -EIO;1620					goto out;1621				}1622 1623				if (!path->skip_locking)1624					btrfs_tree_read_lock(eb);1625				ret = find_extent_in_eb(ctx, eb, &eie);1626				if (!path->skip_locking)1627					btrfs_tree_read_unlock(eb);1628				free_extent_buffer(eb);1629				if (ret == BTRFS_ITERATE_EXTENT_INODES_STOP ||1630				    ret < 0)1631					goto out;1632				ref->inode_list = eie;1633				/*1634				 * We transferred the list ownership to the ref,1635				 * so set to NULL to avoid a double free in case1636				 * an error happens after this.1637				 */1638				eie = NULL;1639			}1640			ret = ulist_add_merge_ptr(ctx->refs, ref->parent,1641						  ref->inode_list,1642						  (void **)&eie, GFP_NOFS);1643			if (ret < 0)1644				goto out;1645			if (!ret && !ctx->skip_inode_ref_list) {1646				/*1647				 * We've recorded that parent, so we must extend1648				 * its inode list here.1649				 *1650				 * However if there was corruption we may not1651				 * have found an eie, return an error in this1652				 * case.1653				 */1654				ASSERT(eie);1655				if (!eie) {1656					ret = -EUCLEAN;1657					goto out;1658				}1659				while (eie->next)1660					eie = eie->next;1661				eie->next = ref->inode_list;1662			}1663			eie = NULL;1664			/*1665			 * We have transferred the inode list ownership from1666			 * this ref to the ref we added to the 'refs' ulist.1667			 * So set this ref's inode list to NULL to avoid1668			 * use-after-free when our caller uses it or double1669			 * frees in case an error happens before we return.1670			 */1671			ref->inode_list = NULL;1672		}1673		cond_resched();1674	}1675 1676out:1677	btrfs_free_path(path);1678 1679	prelim_release(&preftrees.direct);1680	prelim_release(&preftrees.indirect);1681	prelim_release(&preftrees.indirect_missing_keys);1682 1683	if (ret == BTRFS_ITERATE_EXTENT_INODES_STOP || ret < 0)1684		free_inode_elem_list(eie);1685	return ret;1686}1687 1688/*1689 * Finds all leaves with a reference to the specified combination of1690 * @ctx->bytenr and @ctx->extent_item_pos. The bytenr of the found leaves are1691 * added to the ulist at @ctx->refs, and that ulist is allocated by this1692 * function. The caller should free the ulist with free_leaf_list() if1693 * @ctx->ignore_extent_item_pos is false, otherwise a fimple ulist_free() is1694 * enough.1695 *1696 * Returns 0 on success and < 0 on error. On error @ctx->refs is not allocated.1697 */1698int btrfs_find_all_leafs(struct btrfs_backref_walk_ctx *ctx)1699{1700	int ret;1701 1702	ASSERT(ctx->refs == NULL);1703 1704	ctx->refs = ulist_alloc(GFP_NOFS);1705	if (!ctx->refs)1706		return -ENOMEM;1707 1708	ret = find_parent_nodes(ctx, NULL);1709	if (ret == BTRFS_ITERATE_EXTENT_INODES_STOP ||1710	    (ret < 0 && ret != -ENOENT)) {1711		free_leaf_list(ctx->refs);1712		ctx->refs = NULL;1713		return ret;1714	}1715 1716	return 0;1717}1718 1719/*1720 * Walk all backrefs for a given extent to find all roots that reference this1721 * extent. Walking a backref means finding all extents that reference this1722 * extent and in turn walk the backrefs of those, too. Naturally this is a1723 * recursive process, but here it is implemented in an iterative fashion: We1724 * find all referencing extents for the extent in question and put them on a1725 * list. In turn, we find all referencing extents for those, further appending1726 * to the list. The way we iterate the list allows adding more elements after1727 * the current while iterating. The process stops when we reach the end of the1728 * list.1729 *1730 * Found roots are added to @ctx->roots, which is allocated by this function if1731 * it points to NULL, in which case the caller is responsible for freeing it1732 * after it's not needed anymore.1733 * This function requires @ctx->refs to be NULL, as it uses it for allocating a1734 * ulist to do temporary work, and frees it before returning.1735 *1736 * Returns 0 on success, < 0 on error.1737 */1738static int btrfs_find_all_roots_safe(struct btrfs_backref_walk_ctx *ctx)1739{1740	const u64 orig_bytenr = ctx->bytenr;1741	const bool orig_skip_inode_ref_list = ctx->skip_inode_ref_list;1742	bool roots_ulist_allocated = false;1743	struct ulist_iterator uiter;1744	int ret = 0;1745 1746	ASSERT(ctx->refs == NULL);1747 1748	ctx->refs = ulist_alloc(GFP_NOFS);1749	if (!ctx->refs)1750		return -ENOMEM;1751 1752	if (!ctx->roots) {1753		ctx->roots = ulist_alloc(GFP_NOFS);1754		if (!ctx->roots) {1755			ulist_free(ctx->refs);1756			ctx->refs = NULL;1757			return -ENOMEM;1758		}1759		roots_ulist_allocated = true;1760	}1761 1762	ctx->skip_inode_ref_list = true;1763 1764	ULIST_ITER_INIT(&uiter);1765	while (1) {1766		struct ulist_node *node;1767 1768		ret = find_parent_nodes(ctx, NULL);1769		if (ret < 0 && ret != -ENOENT) {1770			if (roots_ulist_allocated) {1771				ulist_free(ctx->roots);1772				ctx->roots = NULL;1773			}1774			break;1775		}1776		ret = 0;1777		node = ulist_next(ctx->refs, &uiter);1778		if (!node)1779			break;1780		ctx->bytenr = node->val;1781		cond_resched();1782	}1783 1784	ulist_free(ctx->refs);1785	ctx->refs = NULL;1786	ctx->bytenr = orig_bytenr;1787	ctx->skip_inode_ref_list = orig_skip_inode_ref_list;1788 1789	return ret;1790}1791 1792int btrfs_find_all_roots(struct btrfs_backref_walk_ctx *ctx,1793			 bool skip_commit_root_sem)1794{1795	int ret;1796 1797	if (!ctx->trans && !skip_commit_root_sem)1798		down_read(&ctx->fs_info->commit_root_sem);1799	ret = btrfs_find_all_roots_safe(ctx);1800	if (!ctx->trans && !skip_commit_root_sem)1801		up_read(&ctx->fs_info->commit_root_sem);1802	return ret;1803}1804 1805struct btrfs_backref_share_check_ctx *btrfs_alloc_backref_share_check_ctx(void)1806{1807	struct btrfs_backref_share_check_ctx *ctx;1808 1809	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);1810	if (!ctx)1811		return NULL;1812 1813	ulist_init(&ctx->refs);1814 1815	return ctx;1816}1817 1818void btrfs_free_backref_share_ctx(struct btrfs_backref_share_check_ctx *ctx)1819{1820	if (!ctx)1821		return;1822 1823	ulist_release(&ctx->refs);1824	kfree(ctx);1825}1826 1827/*1828 * Check if a data extent is shared or not.1829 *1830 * @inode:       The inode whose extent we are checking.1831 * @bytenr:      Logical bytenr of the extent we are checking.1832 * @extent_gen:  Generation of the extent (file extent item) or 0 if it is1833 *               not known.1834 * @ctx:         A backref sharedness check context.1835 *1836 * btrfs_is_data_extent_shared uses the backref walking code but will short1837 * circuit as soon as it finds a root or inode that doesn't match the1838 * one passed in. This provides a significant performance benefit for1839 * callers (such as fiemap) which want to know whether the extent is1840 * shared but do not need a ref count.1841 *1842 * This attempts to attach to the running transaction in order to account for1843 * delayed refs, but continues on even when no running transaction exists.1844 *1845 * Return: 0 if extent is not shared, 1 if it is shared, < 0 on error.1846 */1847int btrfs_is_data_extent_shared(struct btrfs_inode *inode, u64 bytenr,1848				u64 extent_gen,1849				struct btrfs_backref_share_check_ctx *ctx)1850{1851	struct btrfs_backref_walk_ctx walk_ctx = { 0 };1852	struct btrfs_root *root = inode->root;1853	struct btrfs_fs_info *fs_info = root->fs_info;1854	struct btrfs_trans_handle *trans;1855	struct ulist_iterator uiter;1856	struct ulist_node *node;1857	struct btrfs_seq_list elem = BTRFS_SEQ_LIST_INIT(elem);1858	int ret = 0;1859	struct share_check shared = {1860		.ctx = ctx,1861		.root = root,1862		.inum = btrfs_ino(inode),1863		.data_bytenr = bytenr,1864		.data_extent_gen = extent_gen,1865		.share_count = 0,1866		.self_ref_count = 0,1867		.have_delayed_delete_refs = false,1868	};1869	int level;1870	bool leaf_cached;1871	bool leaf_is_shared;1872 1873	for (int i = 0; i < BTRFS_BACKREF_CTX_PREV_EXTENTS_SIZE; i++) {1874		if (ctx->prev_extents_cache[i].bytenr == bytenr)1875			return ctx->prev_extents_cache[i].is_shared;1876	}1877 1878	ulist_init(&ctx->refs);1879 1880	trans = btrfs_join_transaction_nostart(root);1881	if (IS_ERR(trans)) {1882		if (PTR_ERR(trans) != -ENOENT && PTR_ERR(trans) != -EROFS) {1883			ret = PTR_ERR(trans);1884			goto out;1885		}1886		trans = NULL;1887		down_read(&fs_info->commit_root_sem);1888	} else {1889		btrfs_get_tree_mod_seq(fs_info, &elem);1890		walk_ctx.time_seq = elem.seq;1891	}1892 1893	ctx->use_path_cache = true;1894 1895	/*1896	 * We may have previously determined that the current leaf is shared.1897	 * If it is, then we have a data extent that is shared due to a shared1898	 * subtree (caused by snapshotting) and we don't need to check for data1899	 * backrefs. If the leaf is not shared, then we must do backref walking1900	 * to determine if the data extent is shared through reflinks.1901	 */1902	leaf_cached = lookup_backref_shared_cache(ctx, root,1903						  ctx->curr_leaf_bytenr, 0,1904						  &leaf_is_shared);1905	if (leaf_cached && leaf_is_shared) {1906		ret = 1;1907		goto out_trans;1908	}1909 1910	walk_ctx.skip_inode_ref_list = true;1911	walk_ctx.trans = trans;1912	walk_ctx.fs_info = fs_info;1913	walk_ctx.refs = &ctx->refs;1914 1915	/* -1 means we are in the bytenr of the data extent. */1916	level = -1;1917	ULIST_ITER_INIT(&uiter);1918	while (1) {1919		const unsigned long prev_ref_count = ctx->refs.nnodes;1920 1921		walk_ctx.bytenr = bytenr;1922		ret = find_parent_nodes(&walk_ctx, &shared);1923		if (ret == BACKREF_FOUND_SHARED ||1924		    ret == BACKREF_FOUND_NOT_SHARED) {1925			/* If shared must return 1, otherwise return 0. */1926			ret = (ret == BACKREF_FOUND_SHARED) ? 1 : 0;1927			if (level >= 0)1928				store_backref_shared_cache(ctx, root, bytenr,1929							   level, ret == 1);1930			break;1931		}1932		if (ret < 0 && ret != -ENOENT)1933			break;1934		ret = 0;1935 1936		/*1937		 * More than one extent buffer (bytenr) may have been added to1938		 * the ctx->refs ulist, in which case we have to check multiple1939		 * tree paths in case the first one is not shared, so we can not1940		 * use the path cache which is made for a single path. Multiple1941		 * extent buffers at the current level happen when:1942		 *1943		 * 1) level -1, the data extent: If our data extent was not1944		 *    directly shared (without multiple reference items), then1945		 *    it might have a single reference item with a count > 1 for1946		 *    the same offset, which means there are 2 (or more) file1947		 *    extent items that point to the data extent - this happens1948		 *    when a file extent item needs to be split and then one1949		 *    item gets moved to another leaf due to a b+tree leaf split1950		 *    when inserting some item. In this case the file extent1951		 *    items may be located in different leaves and therefore1952		 *    some of the leaves may be referenced through shared1953		 *    subtrees while others are not. Since our extent buffer1954		 *    cache only works for a single path (by far the most common1955		 *    case and simpler to deal with), we can not use it if we1956		 *    have multiple leaves (which implies multiple paths).1957		 *1958		 * 2) level >= 0, a tree node/leaf: We can have a mix of direct1959		 *    and indirect references on a b+tree node/leaf, so we have1960		 *    to check multiple paths, and the extent buffer (the1961		 *    current bytenr) may be shared or not. One example is1962		 *    during relocation as we may get a shared tree block ref1963		 *    (direct ref) and a non-shared tree block ref (indirect1964		 *    ref) for the same node/leaf.1965		 */1966		if ((ctx->refs.nnodes - prev_ref_count) > 1)1967			ctx->use_path_cache = false;1968 1969		if (level >= 0)1970			store_backref_shared_cache(ctx, root, bytenr,1971						   level, false);1972		node = ulist_next(&ctx->refs, &uiter);1973		if (!node)1974			break;1975		bytenr = node->val;1976		if (ctx->use_path_cache) {1977			bool is_shared;1978			bool cached;1979 1980			level++;1981			cached = lookup_backref_shared_cache(ctx, root, bytenr,1982							     level, &is_shared);1983			if (cached) {1984				ret = (is_shared ? 1 : 0);1985				break;1986			}1987		}1988		shared.share_count = 0;1989		shared.have_delayed_delete_refs = false;1990		cond_resched();1991	}1992 1993	/*1994	 * If the path cache is disabled, then it means at some tree level we1995	 * got multiple parents due to a mix of direct and indirect backrefs or1996	 * multiple leaves with file extent items pointing to the same data1997	 * extent. We have to invalidate the cache and cache only the sharedness1998	 * result for the levels where we got only one node/reference.1999	 */2000	if (!ctx->use_path_cache) {2001		int i = 0;2002 2003		level--;2004		if (ret >= 0 && level >= 0) {2005			bytenr = ctx->path_cache_entries[level].bytenr;2006			ctx->use_path_cache = true;2007			store_backref_shared_cache(ctx, root, bytenr, level, ret);2008			i = level + 1;2009		}2010 2011		for ( ; i < BTRFS_MAX_LEVEL; i++)2012			ctx->path_cache_entries[i].bytenr = 0;2013	}2014 2015	/*2016	 * Cache the sharedness result for the data extent if we know our inode2017	 * has more than 1 file extent item that refers to the data extent.2018	 */2019	if (ret >= 0 && shared.self_ref_count > 1) {2020		int slot = ctx->prev_extents_cache_slot;2021 2022		ctx->prev_extents_cache[slot].bytenr = shared.data_bytenr;2023		ctx->prev_extents_cache[slot].is_shared = (ret == 1);2024 2025		slot = (slot + 1) % BTRFS_BACKREF_CTX_PREV_EXTENTS_SIZE;2026		ctx->prev_extents_cache_slot = slot;2027	}2028 2029out_trans:2030	if (trans) {2031		btrfs_put_tree_mod_seq(fs_info, &elem);2032		btrfs_end_transaction(trans);2033	} else {2034		up_read(&fs_info->commit_root_sem);2035	}2036out:2037	ulist_release(&ctx->refs);2038	ctx->prev_leaf_bytenr = ctx->curr_leaf_bytenr;2039 2040	return ret;2041}2042 2043int btrfs_find_one_extref(struct btrfs_root *root, u64 inode_objectid,2044			  u64 start_off, struct btrfs_path *path,2045			  struct btrfs_inode_extref **ret_extref,2046			  u64 *found_off)2047{2048	int ret, slot;2049	struct btrfs_key key;2050	struct btrfs_key found_key;2051	struct btrfs_inode_extref *extref;2052	const struct extent_buffer *leaf;2053	unsigned long ptr;2054 2055	key.objectid = inode_objectid;2056	key.type = BTRFS_INODE_EXTREF_KEY;2057	key.offset = start_off;2058 2059	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);2060	if (ret < 0)2061		return ret;2062 2063	while (1) {2064		leaf = path->nodes[0];2065		slot = path->slots[0];2066		if (slot >= btrfs_header_nritems(leaf)) {2067			/*2068			 * If the item at offset is not found,2069			 * btrfs_search_slot will point us to the slot2070			 * where it should be inserted. In our case2071			 * that will be the slot directly before the2072			 * next INODE_REF_KEY_V2 item. In the case2073			 * that we're pointing to the last slot in a2074			 * leaf, we must move one leaf over.2075			 */2076			ret = btrfs_next_leaf(root, path);2077			if (ret) {2078				if (ret >= 1)2079					ret = -ENOENT;2080				break;2081			}2082			continue;2083		}2084 2085		btrfs_item_key_to_cpu(leaf, &found_key, slot);2086 2087		/*2088		 * Check that we're still looking at an extended ref key for2089		 * this particular objectid. If we have different2090		 * objectid or type then there are no more to be found2091		 * in the tree and we can exit.2092		 */2093		ret = -ENOENT;2094		if (found_key.objectid != inode_objectid)2095			break;2096		if (found_key.type != BTRFS_INODE_EXTREF_KEY)2097			break;2098 2099		ret = 0;2100		ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);2101		extref = (struct btrfs_inode_extref *)ptr;2102		*ret_extref = extref;2103		if (found_off)2104			*found_off = found_key.offset;2105		break;2106	}2107 2108	return ret;2109}2110 2111/*2112 * this iterates to turn a name (from iref/extref) into a full filesystem path.2113 * Elements of the path are separated by '/' and the path is guaranteed to be2114 * 0-terminated. the path is only given within the current file system.2115 * Therefore, it never starts with a '/'. the caller is responsible to provide2116 * "size" bytes in "dest". the dest buffer will be filled backwards. finally,2117 * the start point of the resulting string is returned. this pointer is within2118 * dest, normally.2119 * in case the path buffer would overflow, the pointer is decremented further2120 * as if output was written to the buffer, though no more output is actually2121 * generated. that way, the caller can determine how much space would be2122 * required for the path to fit into the buffer. in that case, the returned2123 * value will be smaller than dest. callers must check this!2124 */2125char *btrfs_ref_to_path(struct btrfs_root *fs_root, struct btrfs_path *path,2126			u32 name_len, unsigned long name_off,2127			struct extent_buffer *eb_in, u64 parent,2128			char *dest, u32 size)2129{2130	int slot;2131	u64 next_inum;2132	int ret;2133	s64 bytes_left = ((s64)size) - 1;2134	struct extent_buffer *eb = eb_in;2135	struct btrfs_key found_key;2136	struct btrfs_inode_ref *iref;2137 2138	if (bytes_left >= 0)2139		dest[bytes_left] = '\0';2140 2141	while (1) {2142		bytes_left -= name_len;2143		if (bytes_left >= 0)2144			read_extent_buffer(eb, dest + bytes_left,2145					   name_off, name_len);2146		if (eb != eb_in) {2147			if (!path->skip_locking)2148				btrfs_tree_read_unlock(eb);2149			free_extent_buffer(eb);2150		}2151		ret = btrfs_find_item(fs_root, path, parent, 0,2152				BTRFS_INODE_REF_KEY, &found_key);2153		if (ret > 0)2154			ret = -ENOENT;2155		if (ret)2156			break;2157 2158		next_inum = found_key.offset;2159 2160		/* regular exit ahead */2161		if (parent == next_inum)2162			break;2163 2164		slot = path->slots[0];2165		eb = path->nodes[0];2166		/* make sure we can use eb after releasing the path */2167		if (eb != eb_in) {2168			path->nodes[0] = NULL;2169			path->locks[0] = 0;2170		}2171		btrfs_release_path(path);2172		iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref);2173 2174		name_len = btrfs_inode_ref_name_len(eb, iref);2175		name_off = (unsigned long)(iref + 1);2176 2177		parent = next_inum;2178		--bytes_left;2179		if (bytes_left >= 0)2180			dest[bytes_left] = '/';2181	}2182 2183	btrfs_release_path(path);2184 2185	if (ret)2186		return ERR_PTR(ret);2187 2188	return dest + bytes_left;2189}2190 2191/*2192 * this makes the path point to (logical EXTENT_ITEM *)2193 * returns BTRFS_EXTENT_FLAG_DATA for data, BTRFS_EXTENT_FLAG_TREE_BLOCK for2194 * tree blocks and <0 on error.2195 */2196int extent_from_logical(struct btrfs_fs_info *fs_info, u64 logical,2197			struct btrfs_path *path, struct btrfs_key *found_key,2198			u64 *flags_ret)2199{2200	struct btrfs_root *extent_root = btrfs_extent_root(fs_info, logical);2201	int ret;2202	u64 flags;2203	u64 size = 0;2204	u32 item_size;2205	const struct extent_buffer *eb;2206	struct btrfs_extent_item *ei;2207	struct btrfs_key key;2208 2209	if (btrfs_fs_incompat(fs_info, SKINNY_METADATA))2210		key.type = BTRFS_METADATA_ITEM_KEY;2211	else2212		key.type = BTRFS_EXTENT_ITEM_KEY;2213	key.objectid = logical;2214	key.offset = (u64)-1;2215 2216	ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);2217	if (ret < 0)2218		return ret;2219	if (ret == 0) {2220		/*2221		 * Key with offset -1 found, there would have to exist an extent2222		 * item with such offset, but this is out of the valid range.2223		 */2224		return -EUCLEAN;2225	}2226 2227	ret = btrfs_previous_extent_item(extent_root, path, 0);2228	if (ret) {2229		if (ret > 0)2230			ret = -ENOENT;2231		return ret;2232	}2233	btrfs_item_key_to_cpu(path->nodes[0], found_key, path->slots[0]);2234	if (found_key->type == BTRFS_METADATA_ITEM_KEY)2235		size = fs_info->nodesize;2236	else if (found_key->type == BTRFS_EXTENT_ITEM_KEY)2237		size = found_key->offset;2238 2239	if (found_key->objectid > logical ||2240	    found_key->objectid + size <= logical) {2241		btrfs_debug(fs_info,2242			"logical %llu is not within any extent", logical);2243		return -ENOENT;2244	}2245 2246	eb = path->nodes[0];2247	item_size = btrfs_item_size(eb, path->slots[0]);2248 2249	ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item);2250	flags = btrfs_extent_flags(eb, ei);2251 2252	btrfs_debug(fs_info,2253		"logical %llu is at position %llu within the extent (%llu EXTENT_ITEM %llu) flags %#llx size %u",2254		 logical, logical - found_key->objectid, found_key->objectid,2255		 found_key->offset, flags, item_size);2256 2257	WARN_ON(!flags_ret);2258	if (flags_ret) {2259		if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK)2260			*flags_ret = BTRFS_EXTENT_FLAG_TREE_BLOCK;2261		else if (flags & BTRFS_EXTENT_FLAG_DATA)2262			*flags_ret = BTRFS_EXTENT_FLAG_DATA;2263		else2264			BUG();2265		return 0;2266	}2267 2268	return -EIO;2269}2270 2271/*2272 * helper function to iterate extent inline refs. ptr must point to a 0 value2273 * for the first call and may be modified. it is used to track state.2274 * if more refs exist, 0 is returned and the next call to2275 * get_extent_inline_ref must pass the modified ptr parameter to get the2276 * next ref. after the last ref was processed, 1 is returned.2277 * returns <0 on error2278 */2279static int get_extent_inline_ref(unsigned long *ptr,2280				 const struct extent_buffer *eb,2281				 const struct btrfs_key *key,2282				 const struct btrfs_extent_item *ei,2283				 u32 item_size,2284				 struct btrfs_extent_inline_ref **out_eiref,2285				 int *out_type)2286{2287	unsigned long end;2288	u64 flags;2289	struct btrfs_tree_block_info *info;2290 2291	if (!*ptr) {2292		/* first call */2293		flags = btrfs_extent_flags(eb, ei);2294		if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {2295			if (key->type == BTRFS_METADATA_ITEM_KEY) {2296				/* a skinny metadata extent */2297				*out_eiref =2298				     (struct btrfs_extent_inline_ref *)(ei + 1);2299			} else {2300				WARN_ON(key->type != BTRFS_EXTENT_ITEM_KEY);2301				info = (struct btrfs_tree_block_info *)(ei + 1);2302				*out_eiref =2303				   (struct btrfs_extent_inline_ref *)(info + 1);2304			}2305		} else {2306			*out_eiref = (struct btrfs_extent_inline_ref *)(ei + 1);2307		}2308		*ptr = (unsigned long)*out_eiref;2309		if ((unsigned long)(*ptr) >= (unsigned long)ei + item_size)2310			return -ENOENT;2311	}2312 2313	end = (unsigned long)ei + item_size;2314	*out_eiref = (struct btrfs_extent_inline_ref *)(*ptr);2315	*out_type = btrfs_get_extent_inline_ref_type(eb, *out_eiref,2316						     BTRFS_REF_TYPE_ANY);2317	if (*out_type == BTRFS_REF_TYPE_INVALID)2318		return -EUCLEAN;2319 2320	*ptr += btrfs_extent_inline_ref_size(*out_type);2321	WARN_ON(*ptr > end);2322	if (*ptr == end)2323		return 1; /* last */2324 2325	return 0;2326}2327 2328/*2329 * reads the tree block backref for an extent. tree level and root are returned2330 * through out_level and out_root. ptr must point to a 0 value for the first2331 * call and may be modified (see get_extent_inline_ref comment).2332 * returns 0 if data was provided, 1 if there was no more data to provide or2333 * <0 on error.2334 */2335int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb,2336			    struct btrfs_key *key, struct btrfs_extent_item *ei,2337			    u32 item_size, u64 *out_root, u8 *out_level)2338{2339	int ret;2340	int type;2341	struct btrfs_extent_inline_ref *eiref;2342 2343	if (*ptr == (unsigned long)-1)2344		return 1;2345 2346	while (1) {2347		ret = get_extent_inline_ref(ptr, eb, key, ei, item_size,2348					      &eiref, &type);2349		if (ret < 0)2350			return ret;2351 2352		if (type == BTRFS_TREE_BLOCK_REF_KEY ||2353		    type == BTRFS_SHARED_BLOCK_REF_KEY)2354			break;2355 2356		if (ret == 1)2357			return 1;2358	}2359 2360	/* we can treat both ref types equally here */2361	*out_root = btrfs_extent_inline_ref_offset(eb, eiref);2362 2363	if (key->type == BTRFS_EXTENT_ITEM_KEY) {2364		struct btrfs_tree_block_info *info;2365 2366		info = (struct btrfs_tree_block_info *)(ei + 1);2367		*out_level = btrfs_tree_block_level(eb, info);2368	} else {2369		ASSERT(key->type == BTRFS_METADATA_ITEM_KEY);2370		*out_level = (u8)key->offset;2371	}2372 2373	if (ret == 1)2374		*ptr = (unsigned long)-1;2375 2376	return 0;2377}2378 2379static int iterate_leaf_refs(struct btrfs_fs_info *fs_info,2380			     struct extent_inode_elem *inode_list,2381			     u64 root, u64 extent_item_objectid,2382			     iterate_extent_inodes_t *iterate, void *ctx)2383{2384	struct extent_inode_elem *eie;2385	int ret = 0;2386 2387	for (eie = inode_list; eie; eie = eie->next) {2388		btrfs_debug(fs_info,2389			    "ref for %llu resolved, key (%llu EXTEND_DATA %llu), root %llu",2390			    extent_item_objectid, eie->inum,2391			    eie->offset, root);2392		ret = iterate(eie->inum, eie->offset, eie->num_bytes, root, ctx);2393		if (ret) {2394			btrfs_debug(fs_info,2395				    "stopping iteration for %llu due to ret=%d",2396				    extent_item_objectid, ret);2397			break;2398		}2399	}2400 2401	return ret;2402}2403 2404/*2405 * calls iterate() for every inode that references the extent identified by2406 * the given parameters.2407 * when the iterator function returns a non-zero value, iteration stops.2408 */2409int iterate_extent_inodes(struct btrfs_backref_walk_ctx *ctx,2410			  bool search_commit_root,2411			  iterate_extent_inodes_t *iterate, void *user_ctx)2412{2413	int ret;2414	struct ulist *refs;2415	struct ulist_node *ref_node;2416	struct btrfs_seq_list seq_elem = BTRFS_SEQ_LIST_INIT(seq_elem);2417	struct ulist_iterator ref_uiter;2418 2419	btrfs_debug(ctx->fs_info, "resolving all inodes for extent %llu",2420		    ctx->bytenr);2421 2422	ASSERT(ctx->trans == NULL);2423	ASSERT(ctx->roots == NULL);2424 2425	if (!search_commit_root) {2426		struct btrfs_trans_handle *trans;2427 2428		trans = btrfs_attach_transaction(ctx->fs_info->tree_root);2429		if (IS_ERR(trans)) {2430			if (PTR_ERR(trans) != -ENOENT &&2431			    PTR_ERR(trans) != -EROFS)2432				return PTR_ERR(trans);2433			trans = NULL;2434		}2435		ctx->trans = trans;2436	}2437 2438	if (ctx->trans) {2439		btrfs_get_tree_mod_seq(ctx->fs_info, &seq_elem);2440		ctx->time_seq = seq_elem.seq;2441	} else {2442		down_read(&ctx->fs_info->commit_root_sem);2443	}2444 2445	ret = btrfs_find_all_leafs(ctx);2446	if (ret)2447		goto out;2448	refs = ctx->refs;2449	ctx->refs = NULL;2450 2451	ULIST_ITER_INIT(&ref_uiter);2452	while (!ret && (ref_node = ulist_next(refs, &ref_uiter))) {2453		const u64 leaf_bytenr = ref_node->val;2454		struct ulist_node *root_node;2455		struct ulist_iterator root_uiter;2456		struct extent_inode_elem *inode_list;2457 2458		inode_list = (struct extent_inode_elem *)(uintptr_t)ref_node->aux;2459 2460		if (ctx->cache_lookup) {2461			const u64 *root_ids;2462			int root_count;2463			bool cached;2464 2465			cached = ctx->cache_lookup(leaf_bytenr, ctx->user_ctx,2466						   &root_ids, &root_count);2467			if (cached) {2468				for (int i = 0; i < root_count; i++) {2469					ret = iterate_leaf_refs(ctx->fs_info,2470								inode_list,2471								root_ids[i],2472								leaf_bytenr,2473								iterate,2474								user_ctx);2475					if (ret)2476						break;2477				}2478				continue;2479			}2480		}2481 2482		if (!ctx->roots) {2483			ctx->roots = ulist_alloc(GFP_NOFS);2484			if (!ctx->roots) {2485				ret = -ENOMEM;2486				break;2487			}2488		}2489 2490		ctx->bytenr = leaf_bytenr;2491		ret = btrfs_find_all_roots_safe(ctx);2492		if (ret)2493			break;2494 2495		if (ctx->cache_store)2496			ctx->cache_store(leaf_bytenr, ctx->roots, ctx->user_ctx);2497 2498		ULIST_ITER_INIT(&root_uiter);2499		while (!ret && (root_node = ulist_next(ctx->roots, &root_uiter))) {2500			btrfs_debug(ctx->fs_info,2501				    "root %llu references leaf %llu, data list %#llx",2502				    root_node->val, ref_node->val,2503				    ref_node->aux);2504			ret = iterate_leaf_refs(ctx->fs_info, inode_list,2505						root_node->val, ctx->bytenr,2506						iterate, user_ctx);2507		}2508		ulist_reinit(ctx->roots);2509	}2510 2511	free_leaf_list(refs);2512out:2513	if (ctx->trans) {2514		btrfs_put_tree_mod_seq(ctx->fs_info, &seq_elem);2515		btrfs_end_transaction(ctx->trans);2516		ctx->trans = NULL;2517	} else {2518		up_read(&ctx->fs_info->commit_root_sem);2519	}2520 2521	ulist_free(ctx->roots);2522	ctx->roots = NULL;2523 2524	if (ret == BTRFS_ITERATE_EXTENT_INODES_STOP)2525		ret = 0;2526 2527	return ret;2528}2529 2530static int build_ino_list(u64 inum, u64 offset, u64 num_bytes, u64 root, void *ctx)2531{2532	struct btrfs_data_container *inodes = ctx;2533	const size_t c = 3 * sizeof(u64);2534 2535	if (inodes->bytes_left >= c) {2536		inodes->bytes_left -= c;2537		inodes->val[inodes->elem_cnt] = inum;2538		inodes->val[inodes->elem_cnt + 1] = offset;2539		inodes->val[inodes->elem_cnt + 2] = root;2540		inodes->elem_cnt += 3;2541	} else {2542		inodes->bytes_missing += c - inodes->bytes_left;2543		inodes->bytes_left = 0;2544		inodes->elem_missed += 3;2545	}2546 2547	return 0;2548}2549 2550int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info,2551				struct btrfs_path *path,2552				void *ctx, bool ignore_offset)2553{2554	struct btrfs_backref_walk_ctx walk_ctx = { 0 };2555	int ret;2556	u64 flags = 0;2557	struct btrfs_key found_key;2558	int search_commit_root = path->search_commit_root;2559 2560	ret = extent_from_logical(fs_info, logical, path, &found_key, &flags);2561	btrfs_release_path(path);2562	if (ret < 0)2563		return ret;2564	if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK)2565		return -EINVAL;2566 2567	walk_ctx.bytenr = found_key.objectid;2568	if (ignore_offset)2569		walk_ctx.ignore_extent_item_pos = true;2570	else2571		walk_ctx.extent_item_pos = logical - found_key.objectid;2572	walk_ctx.fs_info = fs_info;2573 2574	return iterate_extent_inodes(&walk_ctx, search_commit_root,2575				     build_ino_list, ctx);2576}2577 2578static int inode_to_path(u64 inum, u32 name_len, unsigned long name_off,2579			 struct extent_buffer *eb, struct inode_fs_paths *ipath);2580 2581static int iterate_inode_refs(u64 inum, struct inode_fs_paths *ipath)2582{2583	int ret = 0;2584	int slot;2585	u32 cur;2586	u32 len;2587	u32 name_len;2588	u64 parent = 0;2589	int found = 0;2590	struct btrfs_root *fs_root = ipath->fs_root;2591	struct btrfs_path *path = ipath->btrfs_path;2592	struct extent_buffer *eb;2593	struct btrfs_inode_ref *iref;2594	struct btrfs_key found_key;2595 2596	while (!ret) {2597		ret = btrfs_find_item(fs_root, path, inum,2598				parent ? parent + 1 : 0, BTRFS_INODE_REF_KEY,2599				&found_key);2600 2601		if (ret < 0)2602			break;2603		if (ret) {2604			ret = found ? 0 : -ENOENT;2605			break;2606		}2607		++found;2608 2609		parent = found_key.offset;2610		slot = path->slots[0];2611		eb = btrfs_clone_extent_buffer(path->nodes[0]);2612		if (!eb) {2613			ret = -ENOMEM;2614			break;2615		}2616		btrfs_release_path(path);2617 2618		iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref);2619 2620		for (cur = 0; cur < btrfs_item_size(eb, slot); cur += len) {2621			name_len = btrfs_inode_ref_name_len(eb, iref);2622			/* path must be released before calling iterate()! */2623			btrfs_debug(fs_root->fs_info,2624				"following ref at offset %u for inode %llu in tree %llu",2625				cur, found_key.objectid,2626				btrfs_root_id(fs_root));2627			ret = inode_to_path(parent, name_len,2628				      (unsigned long)(iref + 1), eb, ipath);2629			if (ret)2630				break;2631			len = sizeof(*iref) + name_len;2632			iref = (struct btrfs_inode_ref *)((char *)iref + len);2633		}2634		free_extent_buffer(eb);2635	}2636 2637	btrfs_release_path(path);2638 2639	return ret;2640}2641 2642static int iterate_inode_extrefs(u64 inum, struct inode_fs_paths *ipath)2643{2644	int ret;2645	int slot;2646	u64 offset = 0;2647	u64 parent;2648	int found = 0;2649	struct btrfs_root *fs_root = ipath->fs_root;2650	struct btrfs_path *path = ipath->btrfs_path;2651	struct extent_buffer *eb;2652	struct btrfs_inode_extref *extref;2653	u32 item_size;2654	u32 cur_offset;2655	unsigned long ptr;2656 2657	while (1) {2658		ret = btrfs_find_one_extref(fs_root, inum, offset, path, &extref,2659					    &offset);2660		if (ret < 0)2661			break;2662		if (ret) {2663			ret = found ? 0 : -ENOENT;2664			break;2665		}2666		++found;2667 2668		slot = path->slots[0];2669		eb = btrfs_clone_extent_buffer(path->nodes[0]);2670		if (!eb) {2671			ret = -ENOMEM;2672			break;2673		}2674		btrfs_release_path(path);2675 2676		item_size = btrfs_item_size(eb, slot);2677		ptr = btrfs_item_ptr_offset(eb, slot);2678		cur_offset = 0;2679 2680		while (cur_offset < item_size) {2681			u32 name_len;2682 2683			extref = (struct btrfs_inode_extref *)(ptr + cur_offset);2684			parent = btrfs_inode_extref_parent(eb, extref);2685			name_len = btrfs_inode_extref_name_len(eb, extref);2686			ret = inode_to_path(parent, name_len,2687				      (unsigned long)&extref->name, eb, ipath);2688			if (ret)2689				break;2690 2691			cur_offset += btrfs_inode_extref_name_len(eb, extref);2692			cur_offset += sizeof(*extref);2693		}2694		free_extent_buffer(eb);2695 2696		offset++;2697	}2698 2699	btrfs_release_path(path);2700 2701	return ret;2702}2703 2704/*2705 * returns 0 if the path could be dumped (probably truncated)2706 * returns <0 in case of an error2707 */2708static int inode_to_path(u64 inum, u32 name_len, unsigned long name_off,2709			 struct extent_buffer *eb, struct inode_fs_paths *ipath)2710{2711	char *fspath;2712	char *fspath_min;2713	int i = ipath->fspath->elem_cnt;2714	const int s_ptr = sizeof(char *);2715	u32 bytes_left;2716 2717	bytes_left = ipath->fspath->bytes_left > s_ptr ?2718					ipath->fspath->bytes_left - s_ptr : 0;2719 2720	fspath_min = (char *)ipath->fspath->val + (i + 1) * s_ptr;2721	fspath = btrfs_ref_to_path(ipath->fs_root, ipath->btrfs_path, name_len,2722				   name_off, eb, inum, fspath_min, bytes_left);2723	if (IS_ERR(fspath))2724		return PTR_ERR(fspath);2725 2726	if (fspath > fspath_min) {2727		ipath->fspath->val[i] = (u64)(unsigned long)fspath;2728		++ipath->fspath->elem_cnt;2729		ipath->fspath->bytes_left = fspath - fspath_min;2730	} else {2731		++ipath->fspath->elem_missed;2732		ipath->fspath->bytes_missing += fspath_min - fspath;2733		ipath->fspath->bytes_left = 0;2734	}2735 2736	return 0;2737}2738 2739/*2740 * this dumps all file system paths to the inode into the ipath struct, provided2741 * is has been created large enough. each path is zero-terminated and accessed2742 * from ipath->fspath->val[i].2743 * when it returns, there are ipath->fspath->elem_cnt number of paths available2744 * in ipath->fspath->val[]. when the allocated space wasn't sufficient, the2745 * number of missed paths is recorded in ipath->fspath->elem_missed, otherwise,2746 * it's zero. ipath->fspath->bytes_missing holds the number of bytes that would2747 * have been needed to return all paths.2748 */2749int paths_from_inode(u64 inum, struct inode_fs_paths *ipath)2750{2751	int ret;2752	int found_refs = 0;2753 2754	ret = iterate_inode_refs(inum, ipath);2755	if (!ret)2756		++found_refs;2757	else if (ret != -ENOENT)2758		return ret;2759 2760	ret = iterate_inode_extrefs(inum, ipath);2761	if (ret == -ENOENT && found_refs)2762		return 0;2763 2764	return ret;2765}2766 2767struct btrfs_data_container *init_data_container(u32 total_bytes)2768{2769	struct btrfs_data_container *data;2770	size_t alloc_bytes;2771 2772	alloc_bytes = max_t(size_t, total_bytes, sizeof(*data));2773	data = kvzalloc(alloc_bytes, GFP_KERNEL);2774	if (!data)2775		return ERR_PTR(-ENOMEM);2776 2777	if (total_bytes >= sizeof(*data))2778		data->bytes_left = total_bytes - sizeof(*data);2779	else2780		data->bytes_missing = sizeof(*data) - total_bytes;2781 2782	return data;2783}2784 2785/*2786 * allocates space to return multiple file system paths for an inode.2787 * total_bytes to allocate are passed, note that space usable for actual path2788 * information will be total_bytes - sizeof(struct inode_fs_paths).2789 * the returned pointer must be freed with free_ipath() in the end.2790 */2791struct inode_fs_paths *init_ipath(s32 total_bytes, struct btrfs_root *fs_root,2792					struct btrfs_path *path)2793{2794	struct inode_fs_paths *ifp;2795	struct btrfs_data_container *fspath;2796 2797	fspath = init_data_container(total_bytes);2798	if (IS_ERR(fspath))2799		return ERR_CAST(fspath);2800 2801	ifp = kmalloc(sizeof(*ifp), GFP_KERNEL);2802	if (!ifp) {2803		kvfree(fspath);2804		return ERR_PTR(-ENOMEM);2805	}2806 2807	ifp->btrfs_path = path;2808	ifp->fspath = fspath;2809	ifp->fs_root = fs_root;2810 2811	return ifp;2812}2813 2814void free_ipath(struct inode_fs_paths *ipath)2815{2816	if (!ipath)2817		return;2818	kvfree(ipath->fspath);2819	kfree(ipath);2820}2821 2822struct btrfs_backref_iter *btrfs_backref_iter_alloc(struct btrfs_fs_info *fs_info)2823{2824	struct btrfs_backref_iter *ret;2825 2826	ret = kzalloc(sizeof(*ret), GFP_NOFS);2827	if (!ret)2828		return NULL;2829 2830	ret->path = btrfs_alloc_path();2831	if (!ret->path) {2832		kfree(ret);2833		return NULL;2834	}2835 2836	/* Current backref iterator only supports iteration in commit root */2837	ret->path->search_commit_root = 1;2838	ret->path->skip_locking = 1;2839	ret->fs_info = fs_info;2840 2841	return ret;2842}2843 2844static void btrfs_backref_iter_release(struct btrfs_backref_iter *iter)2845{2846	iter->bytenr = 0;2847	iter->item_ptr = 0;2848	iter->cur_ptr = 0;2849	iter->end_ptr = 0;2850	btrfs_release_path(iter->path);2851	memset(&iter->cur_key, 0, sizeof(iter->cur_key));2852}2853 2854int btrfs_backref_iter_start(struct btrfs_backref_iter *iter, u64 bytenr)2855{2856	struct btrfs_fs_info *fs_info = iter->fs_info;2857	struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bytenr);2858	struct btrfs_path *path = iter->path;2859	struct btrfs_extent_item *ei;2860	struct btrfs_key key;2861	int ret;2862 2863	key.objectid = bytenr;2864	key.type = BTRFS_METADATA_ITEM_KEY;2865	key.offset = (u64)-1;2866	iter->bytenr = bytenr;2867 2868	ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);2869	if (ret < 0)2870		return ret;2871	if (ret == 0) {2872		/*2873		 * Key with offset -1 found, there would have to exist an extent2874		 * item with such offset, but this is out of the valid range.2875		 */2876		ret = -EUCLEAN;2877		goto release;2878	}2879	if (path->slots[0] == 0) {2880		WARN_ON(IS_ENABLED(CONFIG_BTRFS_DEBUG));2881		ret = -EUCLEAN;2882		goto release;2883	}2884	path->slots[0]--;2885 2886	btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);2887	if ((key.type != BTRFS_EXTENT_ITEM_KEY &&2888	     key.type != BTRFS_METADATA_ITEM_KEY) || key.objectid != bytenr) {2889		ret = -ENOENT;2890		goto release;2891	}2892	memcpy(&iter->cur_key, &key, sizeof(key));2893	iter->item_ptr = (u32)btrfs_item_ptr_offset(path->nodes[0],2894						    path->slots[0]);2895	iter->end_ptr = (u32)(iter->item_ptr +2896			btrfs_item_size(path->nodes[0], path->slots[0]));2897	ei = btrfs_item_ptr(path->nodes[0], path->slots[0],2898			    struct btrfs_extent_item);2899 2900	/*2901	 * Only support iteration on tree backref yet.2902	 *2903	 * This is an extra precaution for non skinny-metadata, where2904	 * EXTENT_ITEM is also used for tree blocks, that we can only use2905	 * extent flags to determine if it's a tree block.2906	 */2907	if (btrfs_extent_flags(path->nodes[0], ei) & BTRFS_EXTENT_FLAG_DATA) {2908		ret = -ENOTSUPP;2909		goto release;2910	}2911	iter->cur_ptr = (u32)(iter->item_ptr + sizeof(*ei));2912 2913	/* If there is no inline backref, go search for keyed backref */2914	if (iter->cur_ptr >= iter->end_ptr) {2915		ret = btrfs_next_item(extent_root, path);2916 2917		/* No inline nor keyed ref */2918		if (ret > 0) {2919			ret = -ENOENT;2920			goto release;2921		}2922		if (ret < 0)2923			goto release;2924 2925		btrfs_item_key_to_cpu(path->nodes[0], &iter->cur_key,2926				path->slots[0]);2927		if (iter->cur_key.objectid != bytenr ||2928		    (iter->cur_key.type != BTRFS_SHARED_BLOCK_REF_KEY &&2929		     iter->cur_key.type != BTRFS_TREE_BLOCK_REF_KEY)) {2930			ret = -ENOENT;2931			goto release;2932		}2933		iter->cur_ptr = (u32)btrfs_item_ptr_offset(path->nodes[0],2934							   path->slots[0]);2935		iter->item_ptr = iter->cur_ptr;2936		iter->end_ptr = (u32)(iter->item_ptr + btrfs_item_size(2937				      path->nodes[0], path->slots[0]));2938	}2939 2940	return 0;2941release:2942	btrfs_backref_iter_release(iter);2943	return ret;2944}2945 2946static bool btrfs_backref_iter_is_inline_ref(struct btrfs_backref_iter *iter)2947{2948	if (iter->cur_key.type == BTRFS_EXTENT_ITEM_KEY ||2949	    iter->cur_key.type == BTRFS_METADATA_ITEM_KEY)2950		return true;2951	return false;2952}2953 2954/*2955 * Go to the next backref item of current bytenr, can be either inlined or2956 * keyed.2957 *2958 * Caller needs to check whether it's inline ref or not by iter->cur_key.2959 *2960 * Return 0 if we get next backref without problem.2961 * Return >0 if there is no extra backref for this bytenr.2962 * Return <0 if there is something wrong happened.2963 */2964int btrfs_backref_iter_next(struct btrfs_backref_iter *iter)2965{2966	struct extent_buffer *eb = iter->path->nodes[0];2967	struct btrfs_root *extent_root;2968	struct btrfs_path *path = iter->path;2969	struct btrfs_extent_inline_ref *iref;2970	int ret;2971	u32 size;2972 2973	if (btrfs_backref_iter_is_inline_ref(iter)) {2974		/* We're still inside the inline refs */2975		ASSERT(iter->cur_ptr < iter->end_ptr);2976 2977		if (btrfs_backref_has_tree_block_info(iter)) {2978			/* First tree block info */2979			size = sizeof(struct btrfs_tree_block_info);2980		} else {2981			/* Use inline ref type to determine the size */2982			int type;2983 2984			iref = (struct btrfs_extent_inline_ref *)2985				((unsigned long)iter->cur_ptr);2986			type = btrfs_extent_inline_ref_type(eb, iref);2987 2988			size = btrfs_extent_inline_ref_size(type);2989		}2990		iter->cur_ptr += size;2991		if (iter->cur_ptr < iter->end_ptr)2992			return 0;2993 2994		/* All inline items iterated, fall through */2995	}2996 2997	/* We're at keyed items, there is no inline item, go to the next one */2998	extent_root = btrfs_extent_root(iter->fs_info, iter->bytenr);2999	ret = btrfs_next_item(extent_root, iter->path);3000	if (ret)3001		return ret;3002 3003	btrfs_item_key_to_cpu(path->nodes[0], &iter->cur_key, path->slots[0]);3004	if (iter->cur_key.objectid != iter->bytenr ||3005	    (iter->cur_key.type != BTRFS_TREE_BLOCK_REF_KEY &&3006	     iter->cur_key.type != BTRFS_SHARED_BLOCK_REF_KEY))3007		return 1;3008	iter->item_ptr = (u32)btrfs_item_ptr_offset(path->nodes[0],3009					path->slots[0]);3010	iter->cur_ptr = iter->item_ptr;3011	iter->end_ptr = iter->item_ptr + (u32)btrfs_item_size(path->nodes[0],3012						path->slots[0]);3013	return 0;3014}3015 3016void btrfs_backref_init_cache(struct btrfs_fs_info *fs_info,3017			      struct btrfs_backref_cache *cache, bool is_reloc)3018{3019	int i;3020 3021	cache->rb_root = RB_ROOT;3022	for (i = 0; i < BTRFS_MAX_LEVEL; i++)3023		INIT_LIST_HEAD(&cache->pending[i]);3024	INIT_LIST_HEAD(&cache->changed);3025	INIT_LIST_HEAD(&cache->detached);3026	INIT_LIST_HEAD(&cache->leaves);3027	INIT_LIST_HEAD(&cache->pending_edge);3028	INIT_LIST_HEAD(&cache->useless_node);3029	cache->fs_info = fs_info;3030	cache->is_reloc = is_reloc;3031}3032 3033struct btrfs_backref_node *btrfs_backref_alloc_node(3034		struct btrfs_backref_cache *cache, u64 bytenr, int level)3035{3036	struct btrfs_backref_node *node;3037 3038	ASSERT(level >= 0 && level < BTRFS_MAX_LEVEL);3039	node = kzalloc(sizeof(*node), GFP_NOFS);3040	if (!node)3041		return node;3042 3043	INIT_LIST_HEAD(&node->list);3044	INIT_LIST_HEAD(&node->upper);3045	INIT_LIST_HEAD(&node->lower);3046	RB_CLEAR_NODE(&node->rb_node);3047	cache->nr_nodes++;3048	node->level = level;3049	node->bytenr = bytenr;3050 3051	return node;3052}3053 3054void btrfs_backref_free_node(struct btrfs_backref_cache *cache,3055			     struct btrfs_backref_node *node)3056{3057	if (node) {3058		ASSERT(list_empty(&node->list));3059		ASSERT(list_empty(&node->lower));3060		ASSERT(node->eb == NULL);3061		cache->nr_nodes--;3062		btrfs_put_root(node->root);3063		kfree(node);3064	}3065}3066 3067struct btrfs_backref_edge *btrfs_backref_alloc_edge(3068		struct btrfs_backref_cache *cache)3069{3070	struct btrfs_backref_edge *edge;3071 3072	edge = kzalloc(sizeof(*edge), GFP_NOFS);3073	if (edge)3074		cache->nr_edges++;3075	return edge;3076}3077 3078void btrfs_backref_free_edge(struct btrfs_backref_cache *cache,3079			     struct btrfs_backref_edge *edge)3080{3081	if (edge) {3082		cache->nr_edges--;3083		kfree(edge);3084	}3085}3086 3087void btrfs_backref_unlock_node_buffer(struct btrfs_backref_node *node)3088{3089	if (node->locked) {3090		btrfs_tree_unlock(node->eb);3091		node->locked = 0;3092	}3093}3094 3095void btrfs_backref_drop_node_buffer(struct btrfs_backref_node *node)3096{3097	if (node->eb) {3098		btrfs_backref_unlock_node_buffer(node);3099		free_extent_buffer(node->eb);3100		node->eb = NULL;3101	}3102}3103 3104/*3105 * Drop the backref node from cache without cleaning up its children3106 * edges.3107 *3108 * This can only be called on node without parent edges.3109 * The children edges are still kept as is.3110 */3111void btrfs_backref_drop_node(struct btrfs_backref_cache *tree,3112			     struct btrfs_backref_node *node)3113{3114	ASSERT(list_empty(&node->upper));3115 3116	btrfs_backref_drop_node_buffer(node);3117	list_del_init(&node->list);3118	list_del_init(&node->lower);3119	if (!RB_EMPTY_NODE(&node->rb_node))3120		rb_erase(&node->rb_node, &tree->rb_root);3121	btrfs_backref_free_node(tree, node);3122}3123 3124/*3125 * Drop the backref node from cache, also cleaning up all its3126 * upper edges and any uncached nodes in the path.3127 *3128 * This cleanup happens bottom up, thus the node should either3129 * be the lowest node in the cache or a detached node.3130 */3131void btrfs_backref_cleanup_node(struct btrfs_backref_cache *cache,3132				struct btrfs_backref_node *node)3133{3134	struct btrfs_backref_node *upper;3135	struct btrfs_backref_edge *edge;3136 3137	if (!node)3138		return;3139 3140	BUG_ON(!node->lowest && !node->detached);3141	while (!list_empty(&node->upper)) {3142		edge = list_entry(node->upper.next, struct btrfs_backref_edge,3143				  list[LOWER]);3144		upper = edge->node[UPPER];3145		list_del(&edge->list[LOWER]);3146		list_del(&edge->list[UPPER]);3147		btrfs_backref_free_edge(cache, edge);3148 3149		/*3150		 * Add the node to leaf node list if no other child block3151		 * cached.3152		 */3153		if (list_empty(&upper->lower)) {3154			list_add_tail(&upper->lower, &cache->leaves);3155			upper->lowest = 1;3156		}3157	}3158 3159	btrfs_backref_drop_node(cache, node);3160}3161 3162/*3163 * Release all nodes/edges from current cache3164 */3165void btrfs_backref_release_cache(struct btrfs_backref_cache *cache)3166{3167	struct btrfs_backref_node *node;3168	int i;3169 3170	while (!list_empty(&cache->detached)) {3171		node = list_entry(cache->detached.next,3172				  struct btrfs_backref_node, list);3173		btrfs_backref_cleanup_node(cache, node);3174	}3175 3176	while (!list_empty(&cache->leaves)) {3177		node = list_entry(cache->leaves.next,3178				  struct btrfs_backref_node, lower);3179		btrfs_backref_cleanup_node(cache, node);3180	}3181 3182	for (i = 0; i < BTRFS_MAX_LEVEL; i++) {3183		while (!list_empty(&cache->pending[i])) {3184			node = list_first_entry(&cache->pending[i],3185						struct btrfs_backref_node,3186						list);3187			btrfs_backref_cleanup_node(cache, node);3188		}3189	}3190	ASSERT(list_empty(&cache->pending_edge));3191	ASSERT(list_empty(&cache->useless_node));3192	ASSERT(list_empty(&cache->changed));3193	ASSERT(list_empty(&cache->detached));3194	ASSERT(RB_EMPTY_ROOT(&cache->rb_root));3195	ASSERT(!cache->nr_nodes);3196	ASSERT(!cache->nr_edges);3197}3198 3199void btrfs_backref_link_edge(struct btrfs_backref_edge *edge,3200			     struct btrfs_backref_node *lower,3201			     struct btrfs_backref_node *upper,3202			     int link_which)3203{3204	ASSERT(upper && lower && upper->level == lower->level + 1);3205	edge->node[LOWER] = lower;3206	edge->node[UPPER] = upper;3207	if (link_which & LINK_LOWER)3208		list_add_tail(&edge->list[LOWER], &lower->upper);3209	if (link_which & LINK_UPPER)3210		list_add_tail(&edge->list[UPPER], &upper->lower);3211}3212/*3213 * Handle direct tree backref3214 *3215 * Direct tree backref means, the backref item shows its parent bytenr3216 * directly. This is for SHARED_BLOCK_REF backref (keyed or inlined).3217 *3218 * @ref_key:	The converted backref key.3219 *		For keyed backref, it's the item key.3220 *		For inlined backref, objectid is the bytenr,3221 *		type is btrfs_inline_ref_type, offset is3222 *		btrfs_inline_ref_offset.3223 */3224static int handle_direct_tree_backref(struct btrfs_backref_cache *cache,3225				      struct btrfs_key *ref_key,3226				      struct btrfs_backref_node *cur)3227{3228	struct btrfs_backref_edge *edge;3229	struct btrfs_backref_node *upper;3230	struct rb_node *rb_node;3231 3232	ASSERT(ref_key->type == BTRFS_SHARED_BLOCK_REF_KEY);3233 3234	/* Only reloc root uses backref pointing to itself */3235	if (ref_key->objectid == ref_key->offset) {3236		struct btrfs_root *root;3237 3238		cur->is_reloc_root = 1;3239		/* Only reloc backref cache cares about a specific root */3240		if (cache->is_reloc) {3241			root = find_reloc_root(cache->fs_info, cur->bytenr);3242			if (!root)3243				return -ENOENT;3244			cur->root = root;3245		} else {3246			/*3247			 * For generic purpose backref cache, reloc root node3248			 * is useless.3249			 */3250			list_add(&cur->list, &cache->useless_node);3251		}3252		return 0;3253	}3254 3255	edge = btrfs_backref_alloc_edge(cache);3256	if (!edge)3257		return -ENOMEM;3258 3259	rb_node = rb_simple_search(&cache->rb_root, ref_key->offset);3260	if (!rb_node) {3261		/* Parent node not yet cached */3262		upper = btrfs_backref_alloc_node(cache, ref_key->offset,3263					   cur->level + 1);3264		if (!upper) {3265			btrfs_backref_free_edge(cache, edge);3266			return -ENOMEM;3267		}3268 3269		/*3270		 *  Backrefs for the upper level block isn't cached, add the3271		 *  block to pending list3272		 */3273		list_add_tail(&edge->list[UPPER], &cache->pending_edge);3274	} else {3275		/* Parent node already cached */3276		upper = rb_entry(rb_node, struct btrfs_backref_node, rb_node);3277		ASSERT(upper->checked);3278		INIT_LIST_HEAD(&edge->list[UPPER]);3279	}3280	btrfs_backref_link_edge(edge, cur, upper, LINK_LOWER);3281	return 0;3282}3283 3284/*3285 * Handle indirect tree backref3286 *3287 * Indirect tree backref means, we only know which tree the node belongs to.3288 * We still need to do a tree search to find out the parents. This is for3289 * TREE_BLOCK_REF backref (keyed or inlined).3290 *3291 * @trans:	Transaction handle.3292 * @ref_key:	The same as @ref_key in  handle_direct_tree_backref()3293 * @tree_key:	The first key of this tree block.3294 * @path:	A clean (released) path, to avoid allocating path every time3295 *		the function get called.3296 */3297static int handle_indirect_tree_backref(struct btrfs_trans_handle *trans,3298					struct btrfs_backref_cache *cache,3299					struct btrfs_path *path,3300					struct btrfs_key *ref_key,3301					struct btrfs_key *tree_key,3302					struct btrfs_backref_node *cur)3303{3304	struct btrfs_fs_info *fs_info = cache->fs_info;3305	struct btrfs_backref_node *upper;3306	struct btrfs_backref_node *lower;3307	struct btrfs_backref_edge *edge;3308	struct extent_buffer *eb;3309	struct btrfs_root *root;3310	struct rb_node *rb_node;3311	int level;3312	bool need_check = true;3313	int ret;3314 3315	root = btrfs_get_fs_root(fs_info, ref_key->offset, false);3316	if (IS_ERR(root))3317		return PTR_ERR(root);3318	if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state))3319		cur->cowonly = 1;3320 3321	if (btrfs_root_level(&root->root_item) == cur->level) {3322		/* Tree root */3323		ASSERT(btrfs_root_bytenr(&root->root_item) == cur->bytenr);3324		/*3325		 * For reloc backref cache, we may ignore reloc root.  But for3326		 * general purpose backref cache, we can't rely on3327		 * btrfs_should_ignore_reloc_root() as it may conflict with3328		 * current running relocation and lead to missing root.3329		 *3330		 * For general purpose backref cache, reloc root detection is3331		 * completely relying on direct backref (key->offset is parent3332		 * bytenr), thus only do such check for reloc cache.3333		 */3334		if (btrfs_should_ignore_reloc_root(root) && cache->is_reloc) {3335			btrfs_put_root(root);3336			list_add(&cur->list, &cache->useless_node);3337		} else {3338			cur->root = root;3339		}3340		return 0;3341	}3342 3343	level = cur->level + 1;3344 3345	/* Search the tree to find parent blocks referring to the block */3346	path->search_commit_root = 1;3347	path->skip_locking = 1;3348	path->lowest_level = level;3349	ret = btrfs_search_slot(NULL, root, tree_key, path, 0, 0);3350	path->lowest_level = 0;3351	if (ret < 0) {3352		btrfs_put_root(root);3353		return ret;3354	}3355	if (ret > 0 && path->slots[level] > 0)3356		path->slots[level]--;3357 3358	eb = path->nodes[level];3359	if (btrfs_node_blockptr(eb, path->slots[level]) != cur->bytenr) {3360		btrfs_err(fs_info,3361"couldn't find block (%llu) (level %d) in tree (%llu) with key (%llu %u %llu)",3362			  cur->bytenr, level - 1, btrfs_root_id(root),3363			  tree_key->objectid, tree_key->type, tree_key->offset);3364		btrfs_put_root(root);3365		ret = -ENOENT;3366		goto out;3367	}3368	lower = cur;3369 3370	/* Add all nodes and edges in the path */3371	for (; level < BTRFS_MAX_LEVEL; level++) {3372		if (!path->nodes[level]) {3373			ASSERT(btrfs_root_bytenr(&root->root_item) ==3374			       lower->bytenr);3375			/* Same as previous should_ignore_reloc_root() call */3376			if (btrfs_should_ignore_reloc_root(root) &&3377			    cache->is_reloc) {3378				btrfs_put_root(root);3379				list_add(&lower->list, &cache->useless_node);3380			} else {3381				lower->root = root;3382			}3383			break;3384		}3385 3386		edge = btrfs_backref_alloc_edge(cache);3387		if (!edge) {3388			btrfs_put_root(root);3389			ret = -ENOMEM;3390			goto out;3391		}3392 3393		eb = path->nodes[level];3394		rb_node = rb_simple_search(&cache->rb_root, eb->start);3395		if (!rb_node) {3396			upper = btrfs_backref_alloc_node(cache, eb->start,3397							 lower->level + 1);3398			if (!upper) {3399				btrfs_put_root(root);3400				btrfs_backref_free_edge(cache, edge);3401				ret = -ENOMEM;3402				goto out;3403			}3404			upper->owner = btrfs_header_owner(eb);3405			if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state))3406				upper->cowonly = 1;3407 3408			/*3409			 * If we know the block isn't shared we can avoid3410			 * checking its backrefs.3411			 */3412			if (btrfs_block_can_be_shared(trans, root, eb))3413				upper->checked = 0;3414			else3415				upper->checked = 1;3416 3417			/*3418			 * Add the block to pending list if we need to check its3419			 * backrefs, we only do this once while walking up a3420			 * tree as we will catch anything else later on.3421			 */3422			if (!upper->checked && need_check) {3423				need_check = false;3424				list_add_tail(&edge->list[UPPER],3425					      &cache->pending_edge);3426			} else {3427				if (upper->checked)3428					need_check = true;3429				INIT_LIST_HEAD(&edge->list[UPPER]);3430			}3431		} else {3432			upper = rb_entry(rb_node, struct btrfs_backref_node,3433					 rb_node);3434			ASSERT(upper->checked);3435			INIT_LIST_HEAD(&edge->list[UPPER]);3436			if (!upper->owner)3437				upper->owner = btrfs_header_owner(eb);3438		}3439		btrfs_backref_link_edge(edge, lower, upper, LINK_LOWER);3440 3441		if (rb_node) {3442			btrfs_put_root(root);3443			break;3444		}3445		lower = upper;3446		upper = NULL;3447	}3448out:3449	btrfs_release_path(path);3450	return ret;3451}3452 3453/*3454 * Add backref node @cur into @cache.3455 *3456 * NOTE: Even if the function returned 0, @cur is not yet cached as its upper3457 *	 links aren't yet bi-directional. Needs to finish such links.3458 *	 Use btrfs_backref_finish_upper_links() to finish such linkage.3459 *3460 * @trans:	Transaction handle.3461 * @path:	Released path for indirect tree backref lookup3462 * @iter:	Released backref iter for extent tree search3463 * @node_key:	The first key of the tree block3464 */3465int btrfs_backref_add_tree_node(struct btrfs_trans_handle *trans,3466				struct btrfs_backref_cache *cache,3467				struct btrfs_path *path,3468				struct btrfs_backref_iter *iter,3469				struct btrfs_key *node_key,3470				struct btrfs_backref_node *cur)3471{3472	struct btrfs_backref_edge *edge;3473	struct btrfs_backref_node *exist;3474	int ret;3475 3476	ret = btrfs_backref_iter_start(iter, cur->bytenr);3477	if (ret < 0)3478		return ret;3479	/*3480	 * We skip the first btrfs_tree_block_info, as we don't use the key3481	 * stored in it, but fetch it from the tree block3482	 */3483	if (btrfs_backref_has_tree_block_info(iter)) {3484		ret = btrfs_backref_iter_next(iter);3485		if (ret < 0)3486			goto out;3487		/* No extra backref? This means the tree block is corrupted */3488		if (ret > 0) {3489			ret = -EUCLEAN;3490			goto out;3491		}3492	}3493	WARN_ON(cur->checked);3494	if (!list_empty(&cur->upper)) {3495		/*3496		 * The backref was added previously when processing backref of3497		 * type BTRFS_TREE_BLOCK_REF_KEY3498		 */3499		ASSERT(list_is_singular(&cur->upper));3500		edge = list_entry(cur->upper.next, struct btrfs_backref_edge,3501				  list[LOWER]);3502		ASSERT(list_empty(&edge->list[UPPER]));3503		exist = edge->node[UPPER];3504		/*3505		 * Add the upper level block to pending list if we need check3506		 * its backrefs3507		 */3508		if (!exist->checked)3509			list_add_tail(&edge->list[UPPER], &cache->pending_edge);3510	} else {3511		exist = NULL;3512	}3513 3514	for (; ret == 0; ret = btrfs_backref_iter_next(iter)) {3515		struct extent_buffer *eb;3516		struct btrfs_key key;3517		int type;3518 3519		cond_resched();3520		eb = iter->path->nodes[0];3521 3522		key.objectid = iter->bytenr;3523		if (btrfs_backref_iter_is_inline_ref(iter)) {3524			struct btrfs_extent_inline_ref *iref;3525 3526			/* Update key for inline backref */3527			iref = (struct btrfs_extent_inline_ref *)3528				((unsigned long)iter->cur_ptr);3529			type = btrfs_get_extent_inline_ref_type(eb, iref,3530							BTRFS_REF_TYPE_BLOCK);3531			if (type == BTRFS_REF_TYPE_INVALID) {3532				ret = -EUCLEAN;3533				goto out;3534			}3535			key.type = type;3536			key.offset = btrfs_extent_inline_ref_offset(eb, iref);3537		} else {3538			key.type = iter->cur_key.type;3539			key.offset = iter->cur_key.offset;3540		}3541 3542		/*3543		 * Parent node found and matches current inline ref, no need to3544		 * rebuild this node for this inline ref3545		 */3546		if (exist &&3547		    ((key.type == BTRFS_TREE_BLOCK_REF_KEY &&3548		      exist->owner == key.offset) ||3549		     (key.type == BTRFS_SHARED_BLOCK_REF_KEY &&3550		      exist->bytenr == key.offset))) {3551			exist = NULL;3552			continue;3553		}3554 3555		/* SHARED_BLOCK_REF means key.offset is the parent bytenr */3556		if (key.type == BTRFS_SHARED_BLOCK_REF_KEY) {3557			ret = handle_direct_tree_backref(cache, &key, cur);3558			if (ret < 0)3559				goto out;3560		} else if (key.type == BTRFS_TREE_BLOCK_REF_KEY) {3561			/*3562			 * key.type == BTRFS_TREE_BLOCK_REF_KEY, inline ref3563			 * offset means the root objectid. We need to search3564			 * the tree to get its parent bytenr.3565			 */3566			ret = handle_indirect_tree_backref(trans, cache, path,3567							   &key, node_key, cur);3568			if (ret < 0)3569				goto out;3570		}3571		/*3572		 * Unrecognized tree backref items (if it can pass tree-checker)3573		 * would be ignored.3574		 */3575	}3576	ret = 0;3577	cur->checked = 1;3578	WARN_ON(exist);3579out:3580	btrfs_backref_iter_release(iter);3581	return ret;3582}3583 3584/*3585 * Finish the upwards linkage created by btrfs_backref_add_tree_node()3586 */3587int btrfs_backref_finish_upper_links(struct btrfs_backref_cache *cache,3588				     struct btrfs_backref_node *start)3589{3590	struct list_head *useless_node = &cache->useless_node;3591	struct btrfs_backref_edge *edge;3592	struct rb_node *rb_node;3593	LIST_HEAD(pending_edge);3594 3595	ASSERT(start->checked);3596 3597	/* Insert this node to cache if it's not COW-only */3598	if (!start->cowonly) {3599		rb_node = rb_simple_insert(&cache->rb_root, start->bytenr,3600					   &start->rb_node);3601		if (rb_node)3602			btrfs_backref_panic(cache->fs_info, start->bytenr,3603					    -EEXIST);3604		list_add_tail(&start->lower, &cache->leaves);3605	}3606 3607	/*3608	 * Use breadth first search to iterate all related edges.3609	 *3610	 * The starting points are all the edges of this node3611	 */3612	list_for_each_entry(edge, &start->upper, list[LOWER])3613		list_add_tail(&edge->list[UPPER], &pending_edge);3614 3615	while (!list_empty(&pending_edge)) {3616		struct btrfs_backref_node *upper;3617		struct btrfs_backref_node *lower;3618 3619		edge = list_first_entry(&pending_edge,3620				struct btrfs_backref_edge, list[UPPER]);3621		list_del_init(&edge->list[UPPER]);3622		upper = edge->node[UPPER];3623		lower = edge->node[LOWER];3624 3625		/* Parent is detached, no need to keep any edges */3626		if (upper->detached) {3627			list_del(&edge->list[LOWER]);3628			btrfs_backref_free_edge(cache, edge);3629 3630			/* Lower node is orphan, queue for cleanup */3631			if (list_empty(&lower->upper))3632				list_add(&lower->list, useless_node);3633			continue;3634		}3635 3636		/*3637		 * All new nodes added in current build_backref_tree() haven't3638		 * been linked to the cache rb tree.3639		 * So if we have upper->rb_node populated, this means a cache3640		 * hit. We only need to link the edge, as @upper and all its3641		 * parents have already been linked.3642		 */3643		if (!RB_EMPTY_NODE(&upper->rb_node)) {3644			if (upper->lowest) {3645				list_del_init(&upper->lower);3646				upper->lowest = 0;3647			}3648 3649			list_add_tail(&edge->list[UPPER], &upper->lower);3650			continue;3651		}3652 3653		/* Sanity check, we shouldn't have any unchecked nodes */3654		if (!upper->checked) {3655			ASSERT(0);3656			return -EUCLEAN;3657		}3658 3659		/* Sanity check, COW-only node has non-COW-only parent */3660		if (start->cowonly != upper->cowonly) {3661			ASSERT(0);3662			return -EUCLEAN;3663		}3664 3665		/* Only cache non-COW-only (subvolume trees) tree blocks */3666		if (!upper->cowonly) {3667			rb_node = rb_simple_insert(&cache->rb_root, upper->bytenr,3668						   &upper->rb_node);3669			if (rb_node) {3670				btrfs_backref_panic(cache->fs_info,3671						upper->bytenr, -EEXIST);3672				return -EUCLEAN;3673			}3674		}3675 3676		list_add_tail(&edge->list[UPPER], &upper->lower);3677 3678		/*3679		 * Also queue all the parent edges of this uncached node3680		 * to finish the upper linkage3681		 */3682		list_for_each_entry(edge, &upper->upper, list[LOWER])3683			list_add_tail(&edge->list[UPPER], &pending_edge);3684	}3685	return 0;3686}3687 3688void btrfs_backref_error_cleanup(struct btrfs_backref_cache *cache,3689				 struct btrfs_backref_node *node)3690{3691	struct btrfs_backref_node *lower;3692	struct btrfs_backref_node *upper;3693	struct btrfs_backref_edge *edge;3694 3695	while (!list_empty(&cache->useless_node)) {3696		lower = list_first_entry(&cache->useless_node,3697				   struct btrfs_backref_node, list);3698		list_del_init(&lower->list);3699	}3700	while (!list_empty(&cache->pending_edge)) {3701		edge = list_first_entry(&cache->pending_edge,3702				struct btrfs_backref_edge, list[UPPER]);3703		list_del(&edge->list[UPPER]);3704		list_del(&edge->list[LOWER]);3705		lower = edge->node[LOWER];3706		upper = edge->node[UPPER];3707		btrfs_backref_free_edge(cache, edge);3708 3709		/*3710		 * Lower is no longer linked to any upper backref nodes and3711		 * isn't in the cache, we can free it ourselves.3712		 */3713		if (list_empty(&lower->upper) &&3714		    RB_EMPTY_NODE(&lower->rb_node))3715			list_add(&lower->list, &cache->useless_node);3716 3717		if (!RB_EMPTY_NODE(&upper->rb_node))3718			continue;3719 3720		/* Add this guy's upper edges to the list to process */3721		list_for_each_entry(edge, &upper->upper, list[LOWER])3722			list_add_tail(&edge->list[UPPER],3723				      &cache->pending_edge);3724		if (list_empty(&upper->upper))3725			list_add(&upper->list, &cache->useless_node);3726	}3727 3728	while (!list_empty(&cache->useless_node)) {3729		lower = list_first_entry(&cache->useless_node,3730				   struct btrfs_backref_node, list);3731		list_del_init(&lower->list);3732		if (lower == node)3733			node = NULL;3734		btrfs_backref_drop_node(cache, lower);3735	}3736 3737	btrfs_backref_cleanup_node(cache, node);3738	ASSERT(list_empty(&cache->useless_node) &&3739	       list_empty(&cache->pending_edge));3740}3741