brintos

brintos / linux-shallow public Read only

0
0
Text · 213.4 KiB · 9637c7c Raw
7646 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2008 Oracle.  All rights reserved.4 */5 6#include <linux/sched.h>7#include <linux/slab.h>8#include <linux/blkdev.h>9#include <linux/list_sort.h>10#include <linux/iversion.h>11#include "misc.h"12#include "ctree.h"13#include "tree-log.h"14#include "disk-io.h"15#include "locking.h"16#include "backref.h"17#include "compression.h"18#include "qgroup.h"19#include "block-group.h"20#include "space-info.h"21#include "inode-item.h"22#include "fs.h"23#include "accessors.h"24#include "extent-tree.h"25#include "root-tree.h"26#include "dir-item.h"27#include "file-item.h"28#include "file.h"29#include "orphan.h"30#include "tree-checker.h"31 32#define MAX_CONFLICT_INODES 1033 34/* magic values for the inode_only field in btrfs_log_inode:35 *36 * LOG_INODE_ALL means to log everything37 * LOG_INODE_EXISTS means to log just enough to recreate the inode38 * during log replay39 */40enum {41	LOG_INODE_ALL,42	LOG_INODE_EXISTS,43};44 45/*46 * directory trouble cases47 *48 * 1) on rename or unlink, if the inode being unlinked isn't in the fsync49 * log, we must force a full commit before doing an fsync of the directory50 * where the unlink was done.51 * ---> record transid of last unlink/rename per directory52 *53 * mkdir foo/some_dir54 * normal commit55 * rename foo/some_dir foo2/some_dir56 * mkdir foo/some_dir57 * fsync foo/some_dir/some_file58 *59 * The fsync above will unlink the original some_dir without recording60 * it in its new location (foo2).  After a crash, some_dir will be gone61 * unless the fsync of some_file forces a full commit62 *63 * 2) we must log any new names for any file or dir that is in the fsync64 * log. ---> check inode while renaming/linking.65 *66 * 2a) we must log any new names for any file or dir during rename67 * when the directory they are being removed from was logged.68 * ---> check inode and old parent dir during rename69 *70 *  2a is actually the more important variant.  With the extra logging71 *  a crash might unlink the old name without recreating the new one72 *73 * 3) after a crash, we must go through any directories with a link count74 * of zero and redo the rm -rf75 *76 * mkdir f1/foo77 * normal commit78 * rm -rf f1/foo79 * fsync(f1)80 *81 * The directory f1 was fully removed from the FS, but fsync was never82 * called on f1, only its parent dir.  After a crash the rm -rf must83 * be replayed.  This must be able to recurse down the entire84 * directory tree.  The inode link count fixup code takes care of the85 * ugly details.86 */87 88/*89 * stages for the tree walking.  The first90 * stage (0) is to only pin down the blocks we find91 * the second stage (1) is to make sure that all the inodes92 * we find in the log are created in the subvolume.93 *94 * The last stage is to deal with directories and links and extents95 * and all the other fun semantics96 */97enum {98	LOG_WALK_PIN_ONLY,99	LOG_WALK_REPLAY_INODES,100	LOG_WALK_REPLAY_DIR_INDEX,101	LOG_WALK_REPLAY_ALL,102};103 104static int btrfs_log_inode(struct btrfs_trans_handle *trans,105			   struct btrfs_inode *inode,106			   int inode_only,107			   struct btrfs_log_ctx *ctx);108static int link_to_fixup_dir(struct btrfs_trans_handle *trans,109			     struct btrfs_root *root,110			     struct btrfs_path *path, u64 objectid);111static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans,112				       struct btrfs_root *root,113				       struct btrfs_root *log,114				       struct btrfs_path *path,115				       u64 dirid, int del_all);116static void wait_log_commit(struct btrfs_root *root, int transid);117 118/*119 * tree logging is a special write ahead log used to make sure that120 * fsyncs and O_SYNCs can happen without doing full tree commits.121 *122 * Full tree commits are expensive because they require commonly123 * modified blocks to be recowed, creating many dirty pages in the124 * extent tree an 4x-6x higher write load than ext3.125 *126 * Instead of doing a tree commit on every fsync, we use the127 * key ranges and transaction ids to find items for a given file or directory128 * that have changed in this transaction.  Those items are copied into129 * a special tree (one per subvolume root), that tree is written to disk130 * and then the fsync is considered complete.131 *132 * After a crash, items are copied out of the log-tree back into the133 * subvolume tree.  Any file data extents found are recorded in the extent134 * allocation tree, and the log-tree freed.135 *136 * The log tree is read three times, once to pin down all the extents it is137 * using in ram and once, once to create all the inodes logged in the tree138 * and once to do all the other items.139 */140 141static struct inode *btrfs_iget_logging(u64 objectid, struct btrfs_root *root)142{143	unsigned int nofs_flag;144	struct inode *inode;145 146	/*147	 * We're holding a transaction handle whether we are logging or148	 * replaying a log tree, so we must make sure NOFS semantics apply149	 * because btrfs_alloc_inode() may be triggered and it uses GFP_KERNEL150	 * to allocate an inode, which can recurse back into the filesystem and151	 * attempt a transaction commit, resulting in a deadlock.152	 */153	nofs_flag = memalloc_nofs_save();154	inode = btrfs_iget(objectid, root);155	memalloc_nofs_restore(nofs_flag);156 157	return inode;158}159 160/*161 * start a sub transaction and setup the log tree162 * this increments the log tree writer count to make the people163 * syncing the tree wait for us to finish164 */165static int start_log_trans(struct btrfs_trans_handle *trans,166			   struct btrfs_root *root,167			   struct btrfs_log_ctx *ctx)168{169	struct btrfs_fs_info *fs_info = root->fs_info;170	struct btrfs_root *tree_root = fs_info->tree_root;171	const bool zoned = btrfs_is_zoned(fs_info);172	int ret = 0;173	bool created = false;174 175	/*176	 * First check if the log root tree was already created. If not, create177	 * it before locking the root's log_mutex, just to keep lockdep happy.178	 */179	if (!test_bit(BTRFS_ROOT_HAS_LOG_TREE, &tree_root->state)) {180		mutex_lock(&tree_root->log_mutex);181		if (!fs_info->log_root_tree) {182			ret = btrfs_init_log_root_tree(trans, fs_info);183			if (!ret) {184				set_bit(BTRFS_ROOT_HAS_LOG_TREE, &tree_root->state);185				created = true;186			}187		}188		mutex_unlock(&tree_root->log_mutex);189		if (ret)190			return ret;191	}192 193	mutex_lock(&root->log_mutex);194 195again:196	if (root->log_root) {197		int index = (root->log_transid + 1) % 2;198 199		if (btrfs_need_log_full_commit(trans)) {200			ret = BTRFS_LOG_FORCE_COMMIT;201			goto out;202		}203 204		if (zoned && atomic_read(&root->log_commit[index])) {205			wait_log_commit(root, root->log_transid - 1);206			goto again;207		}208 209		if (!root->log_start_pid) {210			clear_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state);211			root->log_start_pid = current->pid;212		} else if (root->log_start_pid != current->pid) {213			set_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state);214		}215	} else {216		/*217		 * This means fs_info->log_root_tree was already created218		 * for some other FS trees. Do the full commit not to mix219		 * nodes from multiple log transactions to do sequential220		 * writing.221		 */222		if (zoned && !created) {223			ret = BTRFS_LOG_FORCE_COMMIT;224			goto out;225		}226 227		ret = btrfs_add_log_tree(trans, root);228		if (ret)229			goto out;230 231		set_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state);232		clear_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state);233		root->log_start_pid = current->pid;234	}235 236	atomic_inc(&root->log_writers);237	if (!ctx->logging_new_name) {238		int index = root->log_transid % 2;239		list_add_tail(&ctx->list, &root->log_ctxs[index]);240		ctx->log_transid = root->log_transid;241	}242 243out:244	mutex_unlock(&root->log_mutex);245	return ret;246}247 248/*249 * returns 0 if there was a log transaction running and we were able250 * to join, or returns -ENOENT if there were not transactions251 * in progress252 */253static int join_running_log_trans(struct btrfs_root *root)254{255	const bool zoned = btrfs_is_zoned(root->fs_info);256	int ret = -ENOENT;257 258	if (!test_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state))259		return ret;260 261	mutex_lock(&root->log_mutex);262again:263	if (root->log_root) {264		int index = (root->log_transid + 1) % 2;265 266		ret = 0;267		if (zoned && atomic_read(&root->log_commit[index])) {268			wait_log_commit(root, root->log_transid - 1);269			goto again;270		}271		atomic_inc(&root->log_writers);272	}273	mutex_unlock(&root->log_mutex);274	return ret;275}276 277/*278 * This either makes the current running log transaction wait279 * until you call btrfs_end_log_trans() or it makes any future280 * log transactions wait until you call btrfs_end_log_trans()281 */282void btrfs_pin_log_trans(struct btrfs_root *root)283{284	atomic_inc(&root->log_writers);285}286 287/*288 * indicate we're done making changes to the log tree289 * and wake up anyone waiting to do a sync290 */291void btrfs_end_log_trans(struct btrfs_root *root)292{293	if (atomic_dec_and_test(&root->log_writers)) {294		/* atomic_dec_and_test implies a barrier */295		cond_wake_up_nomb(&root->log_writer_wait);296	}297}298 299/*300 * the walk control struct is used to pass state down the chain when301 * processing the log tree.  The stage field tells us which part302 * of the log tree processing we are currently doing.  The others303 * are state fields used for that specific part304 */305struct walk_control {306	/* should we free the extent on disk when done?  This is used307	 * at transaction commit time while freeing a log tree308	 */309	int free;310 311	/* pin only walk, we record which extents on disk belong to the312	 * log trees313	 */314	int pin;315 316	/* what stage of the replay code we're currently in */317	int stage;318 319	/*320	 * Ignore any items from the inode currently being processed. Needs321	 * to be set every time we find a BTRFS_INODE_ITEM_KEY and we are in322	 * the LOG_WALK_REPLAY_INODES stage.323	 */324	bool ignore_cur_inode;325 326	/* the root we are currently replaying */327	struct btrfs_root *replay_dest;328 329	/* the trans handle for the current replay */330	struct btrfs_trans_handle *trans;331 332	/* the function that gets used to process blocks we find in the333	 * tree.  Note the extent_buffer might not be up to date when it is334	 * passed in, and it must be checked or read if you need the data335	 * inside it336	 */337	int (*process_func)(struct btrfs_root *log, struct extent_buffer *eb,338			    struct walk_control *wc, u64 gen, int level);339};340 341/*342 * process_func used to pin down extents, write them or wait on them343 */344static int process_one_buffer(struct btrfs_root *log,345			      struct extent_buffer *eb,346			      struct walk_control *wc, u64 gen, int level)347{348	struct btrfs_fs_info *fs_info = log->fs_info;349	int ret = 0;350 351	/*352	 * If this fs is mixed then we need to be able to process the leaves to353	 * pin down any logged extents, so we have to read the block.354	 */355	if (btrfs_fs_incompat(fs_info, MIXED_GROUPS)) {356		struct btrfs_tree_parent_check check = {357			.level = level,358			.transid = gen359		};360 361		ret = btrfs_read_extent_buffer(eb, &check);362		if (ret)363			return ret;364	}365 366	if (wc->pin) {367		ret = btrfs_pin_extent_for_log_replay(wc->trans, eb);368		if (ret)369			return ret;370 371		if (btrfs_buffer_uptodate(eb, gen, 0) &&372		    btrfs_header_level(eb) == 0)373			ret = btrfs_exclude_logged_extents(eb);374	}375	return ret;376}377 378/*379 * Item overwrite used by replay and tree logging.  eb, slot and key all refer380 * to the src data we are copying out.381 *382 * root is the tree we are copying into, and path is a scratch383 * path for use in this function (it should be released on entry and384 * will be released on exit).385 *386 * If the key is already in the destination tree the existing item is387 * overwritten.  If the existing item isn't big enough, it is extended.388 * If it is too large, it is truncated.389 *390 * If the key isn't in the destination yet, a new item is inserted.391 */392static int overwrite_item(struct btrfs_trans_handle *trans,393			  struct btrfs_root *root,394			  struct btrfs_path *path,395			  struct extent_buffer *eb, int slot,396			  struct btrfs_key *key)397{398	int ret;399	u32 item_size;400	u64 saved_i_size = 0;401	int save_old_i_size = 0;402	unsigned long src_ptr;403	unsigned long dst_ptr;404	bool inode_item = key->type == BTRFS_INODE_ITEM_KEY;405 406	/*407	 * This is only used during log replay, so the root is always from a408	 * fs/subvolume tree. In case we ever need to support a log root, then409	 * we'll have to clone the leaf in the path, release the path and use410	 * the leaf before writing into the log tree. See the comments at411	 * copy_items() for more details.412	 */413	ASSERT(btrfs_root_id(root) != BTRFS_TREE_LOG_OBJECTID);414 415	item_size = btrfs_item_size(eb, slot);416	src_ptr = btrfs_item_ptr_offset(eb, slot);417 418	/* Look for the key in the destination tree. */419	ret = btrfs_search_slot(NULL, root, key, path, 0, 0);420	if (ret < 0)421		return ret;422 423	if (ret == 0) {424		char *src_copy;425		char *dst_copy;426		u32 dst_size = btrfs_item_size(path->nodes[0],427						  path->slots[0]);428		if (dst_size != item_size)429			goto insert;430 431		if (item_size == 0) {432			btrfs_release_path(path);433			return 0;434		}435		dst_copy = kmalloc(item_size, GFP_NOFS);436		src_copy = kmalloc(item_size, GFP_NOFS);437		if (!dst_copy || !src_copy) {438			btrfs_release_path(path);439			kfree(dst_copy);440			kfree(src_copy);441			return -ENOMEM;442		}443 444		read_extent_buffer(eb, src_copy, src_ptr, item_size);445 446		dst_ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);447		read_extent_buffer(path->nodes[0], dst_copy, dst_ptr,448				   item_size);449		ret = memcmp(dst_copy, src_copy, item_size);450 451		kfree(dst_copy);452		kfree(src_copy);453		/*454		 * they have the same contents, just return, this saves455		 * us from cowing blocks in the destination tree and doing456		 * extra writes that may not have been done by a previous457		 * sync458		 */459		if (ret == 0) {460			btrfs_release_path(path);461			return 0;462		}463 464		/*465		 * We need to load the old nbytes into the inode so when we466		 * replay the extents we've logged we get the right nbytes.467		 */468		if (inode_item) {469			struct btrfs_inode_item *item;470			u64 nbytes;471			u32 mode;472 473			item = btrfs_item_ptr(path->nodes[0], path->slots[0],474					      struct btrfs_inode_item);475			nbytes = btrfs_inode_nbytes(path->nodes[0], item);476			item = btrfs_item_ptr(eb, slot,477					      struct btrfs_inode_item);478			btrfs_set_inode_nbytes(eb, item, nbytes);479 480			/*481			 * If this is a directory we need to reset the i_size to482			 * 0 so that we can set it up properly when replaying483			 * the rest of the items in this log.484			 */485			mode = btrfs_inode_mode(eb, item);486			if (S_ISDIR(mode))487				btrfs_set_inode_size(eb, item, 0);488		}489	} else if (inode_item) {490		struct btrfs_inode_item *item;491		u32 mode;492 493		/*494		 * New inode, set nbytes to 0 so that the nbytes comes out495		 * properly when we replay the extents.496		 */497		item = btrfs_item_ptr(eb, slot, struct btrfs_inode_item);498		btrfs_set_inode_nbytes(eb, item, 0);499 500		/*501		 * If this is a directory we need to reset the i_size to 0 so502		 * that we can set it up properly when replaying the rest of503		 * the items in this log.504		 */505		mode = btrfs_inode_mode(eb, item);506		if (S_ISDIR(mode))507			btrfs_set_inode_size(eb, item, 0);508	}509insert:510	btrfs_release_path(path);511	/* try to insert the key into the destination tree */512	path->skip_release_on_error = 1;513	ret = btrfs_insert_empty_item(trans, root, path,514				      key, item_size);515	path->skip_release_on_error = 0;516 517	/* make sure any existing item is the correct size */518	if (ret == -EEXIST || ret == -EOVERFLOW) {519		u32 found_size;520		found_size = btrfs_item_size(path->nodes[0],521						path->slots[0]);522		if (found_size > item_size)523			btrfs_truncate_item(trans, path, item_size, 1);524		else if (found_size < item_size)525			btrfs_extend_item(trans, path, item_size - found_size);526	} else if (ret) {527		return ret;528	}529	dst_ptr = btrfs_item_ptr_offset(path->nodes[0],530					path->slots[0]);531 532	/* don't overwrite an existing inode if the generation number533	 * was logged as zero.  This is done when the tree logging code534	 * is just logging an inode to make sure it exists after recovery.535	 *536	 * Also, don't overwrite i_size on directories during replay.537	 * log replay inserts and removes directory items based on the538	 * state of the tree found in the subvolume, and i_size is modified539	 * as it goes540	 */541	if (key->type == BTRFS_INODE_ITEM_KEY && ret == -EEXIST) {542		struct btrfs_inode_item *src_item;543		struct btrfs_inode_item *dst_item;544 545		src_item = (struct btrfs_inode_item *)src_ptr;546		dst_item = (struct btrfs_inode_item *)dst_ptr;547 548		if (btrfs_inode_generation(eb, src_item) == 0) {549			struct extent_buffer *dst_eb = path->nodes[0];550			const u64 ino_size = btrfs_inode_size(eb, src_item);551 552			/*553			 * For regular files an ino_size == 0 is used only when554			 * logging that an inode exists, as part of a directory555			 * fsync, and the inode wasn't fsynced before. In this556			 * case don't set the size of the inode in the fs/subvol557			 * tree, otherwise we would be throwing valid data away.558			 */559			if (S_ISREG(btrfs_inode_mode(eb, src_item)) &&560			    S_ISREG(btrfs_inode_mode(dst_eb, dst_item)) &&561			    ino_size != 0)562				btrfs_set_inode_size(dst_eb, dst_item, ino_size);563			goto no_copy;564		}565 566		if (S_ISDIR(btrfs_inode_mode(eb, src_item)) &&567		    S_ISDIR(btrfs_inode_mode(path->nodes[0], dst_item))) {568			save_old_i_size = 1;569			saved_i_size = btrfs_inode_size(path->nodes[0],570							dst_item);571		}572	}573 574	copy_extent_buffer(path->nodes[0], eb, dst_ptr,575			   src_ptr, item_size);576 577	if (save_old_i_size) {578		struct btrfs_inode_item *dst_item;579		dst_item = (struct btrfs_inode_item *)dst_ptr;580		btrfs_set_inode_size(path->nodes[0], dst_item, saved_i_size);581	}582 583	/* make sure the generation is filled in */584	if (key->type == BTRFS_INODE_ITEM_KEY) {585		struct btrfs_inode_item *dst_item;586		dst_item = (struct btrfs_inode_item *)dst_ptr;587		if (btrfs_inode_generation(path->nodes[0], dst_item) == 0) {588			btrfs_set_inode_generation(path->nodes[0], dst_item,589						   trans->transid);590		}591	}592no_copy:593	btrfs_mark_buffer_dirty(trans, path->nodes[0]);594	btrfs_release_path(path);595	return 0;596}597 598static int read_alloc_one_name(struct extent_buffer *eb, void *start, int len,599			       struct fscrypt_str *name)600{601	char *buf;602 603	buf = kmalloc(len, GFP_NOFS);604	if (!buf)605		return -ENOMEM;606 607	read_extent_buffer(eb, buf, (unsigned long)start, len);608	name->name = buf;609	name->len = len;610	return 0;611}612 613/*614 * simple helper to read an inode off the disk from a given root615 * This can only be called for subvolume roots and not for the log616 */617static noinline struct inode *read_one_inode(struct btrfs_root *root,618					     u64 objectid)619{620	struct inode *inode;621 622	inode = btrfs_iget_logging(objectid, root);623	if (IS_ERR(inode))624		inode = NULL;625	return inode;626}627 628/* replays a single extent in 'eb' at 'slot' with 'key' into the629 * subvolume 'root'.  path is released on entry and should be released630 * on exit.631 *632 * extents in the log tree have not been allocated out of the extent633 * tree yet.  So, this completes the allocation, taking a reference634 * as required if the extent already exists or creating a new extent635 * if it isn't in the extent allocation tree yet.636 *637 * The extent is inserted into the file, dropping any existing extents638 * from the file that overlap the new one.639 */640static noinline int replay_one_extent(struct btrfs_trans_handle *trans,641				      struct btrfs_root *root,642				      struct btrfs_path *path,643				      struct extent_buffer *eb, int slot,644				      struct btrfs_key *key)645{646	struct btrfs_drop_extents_args drop_args = { 0 };647	struct btrfs_fs_info *fs_info = root->fs_info;648	int found_type;649	u64 extent_end;650	u64 start = key->offset;651	u64 nbytes = 0;652	struct btrfs_file_extent_item *item;653	struct inode *inode = NULL;654	unsigned long size;655	int ret = 0;656 657	item = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item);658	found_type = btrfs_file_extent_type(eb, item);659 660	if (found_type == BTRFS_FILE_EXTENT_REG ||661	    found_type == BTRFS_FILE_EXTENT_PREALLOC) {662		nbytes = btrfs_file_extent_num_bytes(eb, item);663		extent_end = start + nbytes;664 665		/*666		 * We don't add to the inodes nbytes if we are prealloc or a667		 * hole.668		 */669		if (btrfs_file_extent_disk_bytenr(eb, item) == 0)670			nbytes = 0;671	} else if (found_type == BTRFS_FILE_EXTENT_INLINE) {672		size = btrfs_file_extent_ram_bytes(eb, item);673		nbytes = btrfs_file_extent_ram_bytes(eb, item);674		extent_end = ALIGN(start + size,675				   fs_info->sectorsize);676	} else {677		ret = 0;678		goto out;679	}680 681	inode = read_one_inode(root, key->objectid);682	if (!inode) {683		ret = -EIO;684		goto out;685	}686 687	/*688	 * first check to see if we already have this extent in the689	 * file.  This must be done before the btrfs_drop_extents run690	 * so we don't try to drop this extent.691	 */692	ret = btrfs_lookup_file_extent(trans, root, path,693			btrfs_ino(BTRFS_I(inode)), start, 0);694 695	if (ret == 0 &&696	    (found_type == BTRFS_FILE_EXTENT_REG ||697	     found_type == BTRFS_FILE_EXTENT_PREALLOC)) {698		struct btrfs_file_extent_item cmp1;699		struct btrfs_file_extent_item cmp2;700		struct btrfs_file_extent_item *existing;701		struct extent_buffer *leaf;702 703		leaf = path->nodes[0];704		existing = btrfs_item_ptr(leaf, path->slots[0],705					  struct btrfs_file_extent_item);706 707		read_extent_buffer(eb, &cmp1, (unsigned long)item,708				   sizeof(cmp1));709		read_extent_buffer(leaf, &cmp2, (unsigned long)existing,710				   sizeof(cmp2));711 712		/*713		 * we already have a pointer to this exact extent,714		 * we don't have to do anything715		 */716		if (memcmp(&cmp1, &cmp2, sizeof(cmp1)) == 0) {717			btrfs_release_path(path);718			goto out;719		}720	}721	btrfs_release_path(path);722 723	/* drop any overlapping extents */724	drop_args.start = start;725	drop_args.end = extent_end;726	drop_args.drop_cache = true;727	ret = btrfs_drop_extents(trans, root, BTRFS_I(inode), &drop_args);728	if (ret)729		goto out;730 731	if (found_type == BTRFS_FILE_EXTENT_REG ||732	    found_type == BTRFS_FILE_EXTENT_PREALLOC) {733		u64 offset;734		unsigned long dest_offset;735		struct btrfs_key ins;736 737		if (btrfs_file_extent_disk_bytenr(eb, item) == 0 &&738		    btrfs_fs_incompat(fs_info, NO_HOLES))739			goto update_inode;740 741		ret = btrfs_insert_empty_item(trans, root, path, key,742					      sizeof(*item));743		if (ret)744			goto out;745		dest_offset = btrfs_item_ptr_offset(path->nodes[0],746						    path->slots[0]);747		copy_extent_buffer(path->nodes[0], eb, dest_offset,748				(unsigned long)item,  sizeof(*item));749 750		ins.objectid = btrfs_file_extent_disk_bytenr(eb, item);751		ins.offset = btrfs_file_extent_disk_num_bytes(eb, item);752		ins.type = BTRFS_EXTENT_ITEM_KEY;753		offset = key->offset - btrfs_file_extent_offset(eb, item);754 755		/*756		 * Manually record dirty extent, as here we did a shallow757		 * file extent item copy and skip normal backref update,758		 * but modifying extent tree all by ourselves.759		 * So need to manually record dirty extent for qgroup,760		 * as the owner of the file extent changed from log tree761		 * (doesn't affect qgroup) to fs/file tree(affects qgroup)762		 */763		ret = btrfs_qgroup_trace_extent(trans,764				btrfs_file_extent_disk_bytenr(eb, item),765				btrfs_file_extent_disk_num_bytes(eb, item));766		if (ret < 0)767			goto out;768 769		if (ins.objectid > 0) {770			u64 csum_start;771			u64 csum_end;772			LIST_HEAD(ordered_sums);773 774			/*775			 * is this extent already allocated in the extent776			 * allocation tree?  If so, just add a reference777			 */778			ret = btrfs_lookup_data_extent(fs_info, ins.objectid,779						ins.offset);780			if (ret < 0) {781				goto out;782			} else if (ret == 0) {783				struct btrfs_ref ref = {784					.action = BTRFS_ADD_DELAYED_REF,785					.bytenr = ins.objectid,786					.num_bytes = ins.offset,787					.owning_root = btrfs_root_id(root),788					.ref_root = btrfs_root_id(root),789				};790				btrfs_init_data_ref(&ref, key->objectid, offset,791						    0, false);792				ret = btrfs_inc_extent_ref(trans, &ref);793				if (ret)794					goto out;795			} else {796				/*797				 * insert the extent pointer in the extent798				 * allocation tree799				 */800				ret = btrfs_alloc_logged_file_extent(trans,801						btrfs_root_id(root),802						key->objectid, offset, &ins);803				if (ret)804					goto out;805			}806			btrfs_release_path(path);807 808			if (btrfs_file_extent_compression(eb, item)) {809				csum_start = ins.objectid;810				csum_end = csum_start + ins.offset;811			} else {812				csum_start = ins.objectid +813					btrfs_file_extent_offset(eb, item);814				csum_end = csum_start +815					btrfs_file_extent_num_bytes(eb, item);816			}817 818			ret = btrfs_lookup_csums_list(root->log_root,819						csum_start, csum_end - 1,820						&ordered_sums, false);821			if (ret < 0)822				goto out;823			ret = 0;824			/*825			 * Now delete all existing cums in the csum root that826			 * cover our range. We do this because we can have an827			 * extent that is completely referenced by one file828			 * extent item and partially referenced by another829			 * file extent item (like after using the clone or830			 * extent_same ioctls). In this case if we end up doing831			 * the replay of the one that partially references the832			 * extent first, and we do not do the csum deletion833			 * below, we can get 2 csum items in the csum tree that834			 * overlap each other. For example, imagine our log has835			 * the two following file extent items:836			 *837			 * key (257 EXTENT_DATA 409600)838			 *     extent data disk byte 12845056 nr 102400839			 *     extent data offset 20480 nr 20480 ram 102400840			 *841			 * key (257 EXTENT_DATA 819200)842			 *     extent data disk byte 12845056 nr 102400843			 *     extent data offset 0 nr 102400 ram 102400844			 *845			 * Where the second one fully references the 100K extent846			 * that starts at disk byte 12845056, and the log tree847			 * has a single csum item that covers the entire range848			 * of the extent:849			 *850			 * key (EXTENT_CSUM EXTENT_CSUM 12845056) itemsize 100851			 *852			 * After the first file extent item is replayed, the853			 * csum tree gets the following csum item:854			 *855			 * key (EXTENT_CSUM EXTENT_CSUM 12865536) itemsize 20856			 *857			 * Which covers the 20K sub-range starting at offset 20K858			 * of our extent. Now when we replay the second file859			 * extent item, if we do not delete existing csum items860			 * that cover any of its blocks, we end up getting two861			 * csum items in our csum tree that overlap each other:862			 *863			 * key (EXTENT_CSUM EXTENT_CSUM 12845056) itemsize 100864			 * key (EXTENT_CSUM EXTENT_CSUM 12865536) itemsize 20865			 *866			 * Which is a problem, because after this anyone trying867			 * to lookup up for the checksum of any block of our868			 * extent starting at an offset of 40K or higher, will869			 * end up looking at the second csum item only, which870			 * does not contain the checksum for any block starting871			 * at offset 40K or higher of our extent.872			 */873			while (!list_empty(&ordered_sums)) {874				struct btrfs_ordered_sum *sums;875				struct btrfs_root *csum_root;876 877				sums = list_entry(ordered_sums.next,878						struct btrfs_ordered_sum,879						list);880				csum_root = btrfs_csum_root(fs_info,881							    sums->logical);882				if (!ret)883					ret = btrfs_del_csums(trans, csum_root,884							      sums->logical,885							      sums->len);886				if (!ret)887					ret = btrfs_csum_file_blocks(trans,888								     csum_root,889								     sums);890				list_del(&sums->list);891				kfree(sums);892			}893			if (ret)894				goto out;895		} else {896			btrfs_release_path(path);897		}898	} else if (found_type == BTRFS_FILE_EXTENT_INLINE) {899		/* inline extents are easy, we just overwrite them */900		ret = overwrite_item(trans, root, path, eb, slot, key);901		if (ret)902			goto out;903	}904 905	ret = btrfs_inode_set_file_extent_range(BTRFS_I(inode), start,906						extent_end - start);907	if (ret)908		goto out;909 910update_inode:911	btrfs_update_inode_bytes(BTRFS_I(inode), nbytes, drop_args.bytes_found);912	ret = btrfs_update_inode(trans, BTRFS_I(inode));913out:914	iput(inode);915	return ret;916}917 918static int unlink_inode_for_log_replay(struct btrfs_trans_handle *trans,919				       struct btrfs_inode *dir,920				       struct btrfs_inode *inode,921				       const struct fscrypt_str *name)922{923	int ret;924 925	ret = btrfs_unlink_inode(trans, dir, inode, name);926	if (ret)927		return ret;928	/*929	 * Whenever we need to check if a name exists or not, we check the930	 * fs/subvolume tree. So after an unlink we must run delayed items, so931	 * that future checks for a name during log replay see that the name932	 * does not exists anymore.933	 */934	return btrfs_run_delayed_items(trans);935}936 937/*938 * when cleaning up conflicts between the directory names in the939 * subvolume, directory names in the log and directory names in the940 * inode back references, we may have to unlink inodes from directories.941 *942 * This is a helper function to do the unlink of a specific directory943 * item944 */945static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,946				      struct btrfs_path *path,947				      struct btrfs_inode *dir,948				      struct btrfs_dir_item *di)949{950	struct btrfs_root *root = dir->root;951	struct inode *inode;952	struct fscrypt_str name;953	struct extent_buffer *leaf;954	struct btrfs_key location;955	int ret;956 957	leaf = path->nodes[0];958 959	btrfs_dir_item_key_to_cpu(leaf, di, &location);960	ret = read_alloc_one_name(leaf, di + 1, btrfs_dir_name_len(leaf, di), &name);961	if (ret)962		return -ENOMEM;963 964	btrfs_release_path(path);965 966	inode = read_one_inode(root, location.objectid);967	if (!inode) {968		ret = -EIO;969		goto out;970	}971 972	ret = link_to_fixup_dir(trans, root, path, location.objectid);973	if (ret)974		goto out;975 976	ret = unlink_inode_for_log_replay(trans, dir, BTRFS_I(inode), &name);977out:978	kfree(name.name);979	iput(inode);980	return ret;981}982 983/*984 * See if a given name and sequence number found in an inode back reference are985 * already in a directory and correctly point to this inode.986 *987 * Returns: < 0 on error, 0 if the directory entry does not exists and 1 if it988 * exists.989 */990static noinline int inode_in_dir(struct btrfs_root *root,991				 struct btrfs_path *path,992				 u64 dirid, u64 objectid, u64 index,993				 struct fscrypt_str *name)994{995	struct btrfs_dir_item *di;996	struct btrfs_key location;997	int ret = 0;998 999	di = btrfs_lookup_dir_index_item(NULL, root, path, dirid,1000					 index, name, 0);1001	if (IS_ERR(di)) {1002		ret = PTR_ERR(di);1003		goto out;1004	} else if (di) {1005		btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location);1006		if (location.objectid != objectid)1007			goto out;1008	} else {1009		goto out;1010	}1011 1012	btrfs_release_path(path);1013	di = btrfs_lookup_dir_item(NULL, root, path, dirid, name, 0);1014	if (IS_ERR(di)) {1015		ret = PTR_ERR(di);1016		goto out;1017	} else if (di) {1018		btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location);1019		if (location.objectid == objectid)1020			ret = 1;1021	}1022out:1023	btrfs_release_path(path);1024	return ret;1025}1026 1027/*1028 * helper function to check a log tree for a named back reference in1029 * an inode.  This is used to decide if a back reference that is1030 * found in the subvolume conflicts with what we find in the log.1031 *1032 * inode backreferences may have multiple refs in a single item,1033 * during replay we process one reference at a time, and we don't1034 * want to delete valid links to a file from the subvolume if that1035 * link is also in the log.1036 */1037static noinline int backref_in_log(struct btrfs_root *log,1038				   struct btrfs_key *key,1039				   u64 ref_objectid,1040				   const struct fscrypt_str *name)1041{1042	struct btrfs_path *path;1043	int ret;1044 1045	path = btrfs_alloc_path();1046	if (!path)1047		return -ENOMEM;1048 1049	ret = btrfs_search_slot(NULL, log, key, path, 0, 0);1050	if (ret < 0) {1051		goto out;1052	} else if (ret == 1) {1053		ret = 0;1054		goto out;1055	}1056 1057	if (key->type == BTRFS_INODE_EXTREF_KEY)1058		ret = !!btrfs_find_name_in_ext_backref(path->nodes[0],1059						       path->slots[0],1060						       ref_objectid, name);1061	else1062		ret = !!btrfs_find_name_in_backref(path->nodes[0],1063						   path->slots[0], name);1064out:1065	btrfs_free_path(path);1066	return ret;1067}1068 1069static inline int __add_inode_ref(struct btrfs_trans_handle *trans,1070				  struct btrfs_root *root,1071				  struct btrfs_path *path,1072				  struct btrfs_root *log_root,1073				  struct btrfs_inode *dir,1074				  struct btrfs_inode *inode,1075				  u64 inode_objectid, u64 parent_objectid,1076				  u64 ref_index, struct fscrypt_str *name)1077{1078	int ret;1079	struct extent_buffer *leaf;1080	struct btrfs_dir_item *di;1081	struct btrfs_key search_key;1082	struct btrfs_inode_extref *extref;1083 1084again:1085	/* Search old style refs */1086	search_key.objectid = inode_objectid;1087	search_key.type = BTRFS_INODE_REF_KEY;1088	search_key.offset = parent_objectid;1089	ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);1090	if (ret == 0) {1091		struct btrfs_inode_ref *victim_ref;1092		unsigned long ptr;1093		unsigned long ptr_end;1094 1095		leaf = path->nodes[0];1096 1097		/* are we trying to overwrite a back ref for the root directory1098		 * if so, just jump out, we're done1099		 */1100		if (search_key.objectid == search_key.offset)1101			return 1;1102 1103		/* check all the names in this back reference to see1104		 * if they are in the log.  if so, we allow them to stay1105		 * otherwise they must be unlinked as a conflict1106		 */1107		ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);1108		ptr_end = ptr + btrfs_item_size(leaf, path->slots[0]);1109		while (ptr < ptr_end) {1110			struct fscrypt_str victim_name;1111 1112			victim_ref = (struct btrfs_inode_ref *)ptr;1113			ret = read_alloc_one_name(leaf, (victim_ref + 1),1114				 btrfs_inode_ref_name_len(leaf, victim_ref),1115				 &victim_name);1116			if (ret)1117				return ret;1118 1119			ret = backref_in_log(log_root, &search_key,1120					     parent_objectid, &victim_name);1121			if (ret < 0) {1122				kfree(victim_name.name);1123				return ret;1124			} else if (!ret) {1125				inc_nlink(&inode->vfs_inode);1126				btrfs_release_path(path);1127 1128				ret = unlink_inode_for_log_replay(trans, dir, inode,1129						&victim_name);1130				kfree(victim_name.name);1131				if (ret)1132					return ret;1133				goto again;1134			}1135			kfree(victim_name.name);1136 1137			ptr = (unsigned long)(victim_ref + 1) + victim_name.len;1138		}1139	}1140	btrfs_release_path(path);1141 1142	/* Same search but for extended refs */1143	extref = btrfs_lookup_inode_extref(NULL, root, path, name,1144					   inode_objectid, parent_objectid, 0,1145					   0);1146	if (IS_ERR(extref)) {1147		return PTR_ERR(extref);1148	} else if (extref) {1149		u32 item_size;1150		u32 cur_offset = 0;1151		unsigned long base;1152		struct inode *victim_parent;1153 1154		leaf = path->nodes[0];1155 1156		item_size = btrfs_item_size(leaf, path->slots[0]);1157		base = btrfs_item_ptr_offset(leaf, path->slots[0]);1158 1159		while (cur_offset < item_size) {1160			struct fscrypt_str victim_name;1161 1162			extref = (struct btrfs_inode_extref *)(base + cur_offset);1163 1164			if (btrfs_inode_extref_parent(leaf, extref) != parent_objectid)1165				goto next;1166 1167			ret = read_alloc_one_name(leaf, &extref->name,1168				 btrfs_inode_extref_name_len(leaf, extref),1169				 &victim_name);1170			if (ret)1171				return ret;1172 1173			search_key.objectid = inode_objectid;1174			search_key.type = BTRFS_INODE_EXTREF_KEY;1175			search_key.offset = btrfs_extref_hash(parent_objectid,1176							      victim_name.name,1177							      victim_name.len);1178			ret = backref_in_log(log_root, &search_key,1179					     parent_objectid, &victim_name);1180			if (ret < 0) {1181				kfree(victim_name.name);1182				return ret;1183			} else if (!ret) {1184				ret = -ENOENT;1185				victim_parent = read_one_inode(root,1186						parent_objectid);1187				if (victim_parent) {1188					inc_nlink(&inode->vfs_inode);1189					btrfs_release_path(path);1190 1191					ret = unlink_inode_for_log_replay(trans,1192							BTRFS_I(victim_parent),1193							inode, &victim_name);1194				}1195				iput(victim_parent);1196				kfree(victim_name.name);1197				if (ret)1198					return ret;1199				goto again;1200			}1201			kfree(victim_name.name);1202next:1203			cur_offset += victim_name.len + sizeof(*extref);1204		}1205	}1206	btrfs_release_path(path);1207 1208	/* look for a conflicting sequence number */1209	di = btrfs_lookup_dir_index_item(trans, root, path, btrfs_ino(dir),1210					 ref_index, name, 0);1211	if (IS_ERR(di)) {1212		return PTR_ERR(di);1213	} else if (di) {1214		ret = drop_one_dir_item(trans, path, dir, di);1215		if (ret)1216			return ret;1217	}1218	btrfs_release_path(path);1219 1220	/* look for a conflicting name */1221	di = btrfs_lookup_dir_item(trans, root, path, btrfs_ino(dir), name, 0);1222	if (IS_ERR(di)) {1223		return PTR_ERR(di);1224	} else if (di) {1225		ret = drop_one_dir_item(trans, path, dir, di);1226		if (ret)1227			return ret;1228	}1229	btrfs_release_path(path);1230 1231	return 0;1232}1233 1234static int extref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,1235			     struct fscrypt_str *name, u64 *index,1236			     u64 *parent_objectid)1237{1238	struct btrfs_inode_extref *extref;1239	int ret;1240 1241	extref = (struct btrfs_inode_extref *)ref_ptr;1242 1243	ret = read_alloc_one_name(eb, &extref->name,1244				  btrfs_inode_extref_name_len(eb, extref), name);1245	if (ret)1246		return ret;1247 1248	if (index)1249		*index = btrfs_inode_extref_index(eb, extref);1250	if (parent_objectid)1251		*parent_objectid = btrfs_inode_extref_parent(eb, extref);1252 1253	return 0;1254}1255 1256static int ref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,1257			  struct fscrypt_str *name, u64 *index)1258{1259	struct btrfs_inode_ref *ref;1260	int ret;1261 1262	ref = (struct btrfs_inode_ref *)ref_ptr;1263 1264	ret = read_alloc_one_name(eb, ref + 1, btrfs_inode_ref_name_len(eb, ref),1265				  name);1266	if (ret)1267		return ret;1268 1269	if (index)1270		*index = btrfs_inode_ref_index(eb, ref);1271 1272	return 0;1273}1274 1275/*1276 * Take an inode reference item from the log tree and iterate all names from the1277 * inode reference item in the subvolume tree with the same key (if it exists).1278 * For any name that is not in the inode reference item from the log tree, do a1279 * proper unlink of that name (that is, remove its entry from the inode1280 * reference item and both dir index keys).1281 */1282static int unlink_old_inode_refs(struct btrfs_trans_handle *trans,1283				 struct btrfs_root *root,1284				 struct btrfs_path *path,1285				 struct btrfs_inode *inode,1286				 struct extent_buffer *log_eb,1287				 int log_slot,1288				 struct btrfs_key *key)1289{1290	int ret;1291	unsigned long ref_ptr;1292	unsigned long ref_end;1293	struct extent_buffer *eb;1294 1295again:1296	btrfs_release_path(path);1297	ret = btrfs_search_slot(NULL, root, key, path, 0, 0);1298	if (ret > 0) {1299		ret = 0;1300		goto out;1301	}1302	if (ret < 0)1303		goto out;1304 1305	eb = path->nodes[0];1306	ref_ptr = btrfs_item_ptr_offset(eb, path->slots[0]);1307	ref_end = ref_ptr + btrfs_item_size(eb, path->slots[0]);1308	while (ref_ptr < ref_end) {1309		struct fscrypt_str name;1310		u64 parent_id;1311 1312		if (key->type == BTRFS_INODE_EXTREF_KEY) {1313			ret = extref_get_fields(eb, ref_ptr, &name,1314						NULL, &parent_id);1315		} else {1316			parent_id = key->offset;1317			ret = ref_get_fields(eb, ref_ptr, &name, NULL);1318		}1319		if (ret)1320			goto out;1321 1322		if (key->type == BTRFS_INODE_EXTREF_KEY)1323			ret = !!btrfs_find_name_in_ext_backref(log_eb, log_slot,1324							       parent_id, &name);1325		else1326			ret = !!btrfs_find_name_in_backref(log_eb, log_slot, &name);1327 1328		if (!ret) {1329			struct inode *dir;1330 1331			btrfs_release_path(path);1332			dir = read_one_inode(root, parent_id);1333			if (!dir) {1334				ret = -ENOENT;1335				kfree(name.name);1336				goto out;1337			}1338			ret = unlink_inode_for_log_replay(trans, BTRFS_I(dir),1339						 inode, &name);1340			kfree(name.name);1341			iput(dir);1342			if (ret)1343				goto out;1344			goto again;1345		}1346 1347		kfree(name.name);1348		ref_ptr += name.len;1349		if (key->type == BTRFS_INODE_EXTREF_KEY)1350			ref_ptr += sizeof(struct btrfs_inode_extref);1351		else1352			ref_ptr += sizeof(struct btrfs_inode_ref);1353	}1354	ret = 0;1355 out:1356	btrfs_release_path(path);1357	return ret;1358}1359 1360/*1361 * replay one inode back reference item found in the log tree.1362 * eb, slot and key refer to the buffer and key found in the log tree.1363 * root is the destination we are replaying into, and path is for temp1364 * use by this function.  (it should be released on return).1365 */1366static noinline int add_inode_ref(struct btrfs_trans_handle *trans,1367				  struct btrfs_root *root,1368				  struct btrfs_root *log,1369				  struct btrfs_path *path,1370				  struct extent_buffer *eb, int slot,1371				  struct btrfs_key *key)1372{1373	struct inode *dir = NULL;1374	struct inode *inode = NULL;1375	unsigned long ref_ptr;1376	unsigned long ref_end;1377	struct fscrypt_str name = { 0 };1378	int ret;1379	int log_ref_ver = 0;1380	u64 parent_objectid;1381	u64 inode_objectid;1382	u64 ref_index = 0;1383	int ref_struct_size;1384 1385	ref_ptr = btrfs_item_ptr_offset(eb, slot);1386	ref_end = ref_ptr + btrfs_item_size(eb, slot);1387 1388	if (key->type == BTRFS_INODE_EXTREF_KEY) {1389		struct btrfs_inode_extref *r;1390 1391		ref_struct_size = sizeof(struct btrfs_inode_extref);1392		log_ref_ver = 1;1393		r = (struct btrfs_inode_extref *)ref_ptr;1394		parent_objectid = btrfs_inode_extref_parent(eb, r);1395	} else {1396		ref_struct_size = sizeof(struct btrfs_inode_ref);1397		parent_objectid = key->offset;1398	}1399	inode_objectid = key->objectid;1400 1401	/*1402	 * it is possible that we didn't log all the parent directories1403	 * for a given inode.  If we don't find the dir, just don't1404	 * copy the back ref in.  The link count fixup code will take1405	 * care of the rest1406	 */1407	dir = read_one_inode(root, parent_objectid);1408	if (!dir) {1409		ret = -ENOENT;1410		goto out;1411	}1412 1413	inode = read_one_inode(root, inode_objectid);1414	if (!inode) {1415		ret = -EIO;1416		goto out;1417	}1418 1419	while (ref_ptr < ref_end) {1420		if (log_ref_ver) {1421			ret = extref_get_fields(eb, ref_ptr, &name,1422						&ref_index, &parent_objectid);1423			/*1424			 * parent object can change from one array1425			 * item to another.1426			 */1427			if (!dir)1428				dir = read_one_inode(root, parent_objectid);1429			if (!dir) {1430				ret = -ENOENT;1431				goto out;1432			}1433		} else {1434			ret = ref_get_fields(eb, ref_ptr, &name, &ref_index);1435		}1436		if (ret)1437			goto out;1438 1439		ret = inode_in_dir(root, path, btrfs_ino(BTRFS_I(dir)),1440				   btrfs_ino(BTRFS_I(inode)), ref_index, &name);1441		if (ret < 0) {1442			goto out;1443		} else if (ret == 0) {1444			/*1445			 * look for a conflicting back reference in the1446			 * metadata. if we find one we have to unlink that name1447			 * of the file before we add our new link.  Later on, we1448			 * overwrite any existing back reference, and we don't1449			 * want to create dangling pointers in the directory.1450			 */1451			ret = __add_inode_ref(trans, root, path, log,1452					      BTRFS_I(dir), BTRFS_I(inode),1453					      inode_objectid, parent_objectid,1454					      ref_index, &name);1455			if (ret) {1456				if (ret == 1)1457					ret = 0;1458				goto out;1459			}1460 1461			/* insert our name */1462			ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode),1463					     &name, 0, ref_index);1464			if (ret)1465				goto out;1466 1467			ret = btrfs_update_inode(trans, BTRFS_I(inode));1468			if (ret)1469				goto out;1470		}1471		/* Else, ret == 1, we already have a perfect match, we're done. */1472 1473		ref_ptr = (unsigned long)(ref_ptr + ref_struct_size) + name.len;1474		kfree(name.name);1475		name.name = NULL;1476		if (log_ref_ver) {1477			iput(dir);1478			dir = NULL;1479		}1480	}1481 1482	/*1483	 * Before we overwrite the inode reference item in the subvolume tree1484	 * with the item from the log tree, we must unlink all names from the1485	 * parent directory that are in the subvolume's tree inode reference1486	 * item, otherwise we end up with an inconsistent subvolume tree where1487	 * dir index entries exist for a name but there is no inode reference1488	 * item with the same name.1489	 */1490	ret = unlink_old_inode_refs(trans, root, path, BTRFS_I(inode), eb, slot,1491				    key);1492	if (ret)1493		goto out;1494 1495	/* finally write the back reference in the inode */1496	ret = overwrite_item(trans, root, path, eb, slot, key);1497out:1498	btrfs_release_path(path);1499	kfree(name.name);1500	iput(dir);1501	iput(inode);1502	return ret;1503}1504 1505static int count_inode_extrefs(struct btrfs_inode *inode, struct btrfs_path *path)1506{1507	int ret = 0;1508	int name_len;1509	unsigned int nlink = 0;1510	u32 item_size;1511	u32 cur_offset = 0;1512	u64 inode_objectid = btrfs_ino(inode);1513	u64 offset = 0;1514	unsigned long ptr;1515	struct btrfs_inode_extref *extref;1516	struct extent_buffer *leaf;1517 1518	while (1) {1519		ret = btrfs_find_one_extref(inode->root, inode_objectid, offset,1520					    path, &extref, &offset);1521		if (ret)1522			break;1523 1524		leaf = path->nodes[0];1525		item_size = btrfs_item_size(leaf, path->slots[0]);1526		ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);1527		cur_offset = 0;1528 1529		while (cur_offset < item_size) {1530			extref = (struct btrfs_inode_extref *) (ptr + cur_offset);1531			name_len = btrfs_inode_extref_name_len(leaf, extref);1532 1533			nlink++;1534 1535			cur_offset += name_len + sizeof(*extref);1536		}1537 1538		offset++;1539		btrfs_release_path(path);1540	}1541	btrfs_release_path(path);1542 1543	if (ret < 0 && ret != -ENOENT)1544		return ret;1545	return nlink;1546}1547 1548static int count_inode_refs(struct btrfs_inode *inode, struct btrfs_path *path)1549{1550	int ret;1551	struct btrfs_key key;1552	unsigned int nlink = 0;1553	unsigned long ptr;1554	unsigned long ptr_end;1555	int name_len;1556	u64 ino = btrfs_ino(inode);1557 1558	key.objectid = ino;1559	key.type = BTRFS_INODE_REF_KEY;1560	key.offset = (u64)-1;1561 1562	while (1) {1563		ret = btrfs_search_slot(NULL, inode->root, &key, path, 0, 0);1564		if (ret < 0)1565			break;1566		if (ret > 0) {1567			if (path->slots[0] == 0)1568				break;1569			path->slots[0]--;1570		}1571process_slot:1572		btrfs_item_key_to_cpu(path->nodes[0], &key,1573				      path->slots[0]);1574		if (key.objectid != ino ||1575		    key.type != BTRFS_INODE_REF_KEY)1576			break;1577		ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);1578		ptr_end = ptr + btrfs_item_size(path->nodes[0],1579						   path->slots[0]);1580		while (ptr < ptr_end) {1581			struct btrfs_inode_ref *ref;1582 1583			ref = (struct btrfs_inode_ref *)ptr;1584			name_len = btrfs_inode_ref_name_len(path->nodes[0],1585							    ref);1586			ptr = (unsigned long)(ref + 1) + name_len;1587			nlink++;1588		}1589 1590		if (key.offset == 0)1591			break;1592		if (path->slots[0] > 0) {1593			path->slots[0]--;1594			goto process_slot;1595		}1596		key.offset--;1597		btrfs_release_path(path);1598	}1599	btrfs_release_path(path);1600 1601	return nlink;1602}1603 1604/*1605 * There are a few corners where the link count of the file can't1606 * be properly maintained during replay.  So, instead of adding1607 * lots of complexity to the log code, we just scan the backrefs1608 * for any file that has been through replay.1609 *1610 * The scan will update the link count on the inode to reflect the1611 * number of back refs found.  If it goes down to zero, the iput1612 * will free the inode.1613 */1614static noinline int fixup_inode_link_count(struct btrfs_trans_handle *trans,1615					   struct inode *inode)1616{1617	struct btrfs_root *root = BTRFS_I(inode)->root;1618	struct btrfs_path *path;1619	int ret;1620	u64 nlink = 0;1621	u64 ino = btrfs_ino(BTRFS_I(inode));1622 1623	path = btrfs_alloc_path();1624	if (!path)1625		return -ENOMEM;1626 1627	ret = count_inode_refs(BTRFS_I(inode), path);1628	if (ret < 0)1629		goto out;1630 1631	nlink = ret;1632 1633	ret = count_inode_extrefs(BTRFS_I(inode), path);1634	if (ret < 0)1635		goto out;1636 1637	nlink += ret;1638 1639	ret = 0;1640 1641	if (nlink != inode->i_nlink) {1642		set_nlink(inode, nlink);1643		ret = btrfs_update_inode(trans, BTRFS_I(inode));1644		if (ret)1645			goto out;1646	}1647	if (S_ISDIR(inode->i_mode))1648		BTRFS_I(inode)->index_cnt = (u64)-1;1649 1650	if (inode->i_nlink == 0) {1651		if (S_ISDIR(inode->i_mode)) {1652			ret = replay_dir_deletes(trans, root, NULL, path,1653						 ino, 1);1654			if (ret)1655				goto out;1656		}1657		ret = btrfs_insert_orphan_item(trans, root, ino);1658		if (ret == -EEXIST)1659			ret = 0;1660	}1661 1662out:1663	btrfs_free_path(path);1664	return ret;1665}1666 1667static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,1668					    struct btrfs_root *root,1669					    struct btrfs_path *path)1670{1671	int ret;1672	struct btrfs_key key;1673	struct inode *inode;1674 1675	key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID;1676	key.type = BTRFS_ORPHAN_ITEM_KEY;1677	key.offset = (u64)-1;1678	while (1) {1679		ret = btrfs_search_slot(trans, root, &key, path, -1, 1);1680		if (ret < 0)1681			break;1682 1683		if (ret == 1) {1684			ret = 0;1685			if (path->slots[0] == 0)1686				break;1687			path->slots[0]--;1688		}1689 1690		btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);1691		if (key.objectid != BTRFS_TREE_LOG_FIXUP_OBJECTID ||1692		    key.type != BTRFS_ORPHAN_ITEM_KEY)1693			break;1694 1695		ret = btrfs_del_item(trans, root, path);1696		if (ret)1697			break;1698 1699		btrfs_release_path(path);1700		inode = read_one_inode(root, key.offset);1701		if (!inode) {1702			ret = -EIO;1703			break;1704		}1705 1706		ret = fixup_inode_link_count(trans, inode);1707		iput(inode);1708		if (ret)1709			break;1710 1711		/*1712		 * fixup on a directory may create new entries,1713		 * make sure we always look for the highset possible1714		 * offset1715		 */1716		key.offset = (u64)-1;1717	}1718	btrfs_release_path(path);1719	return ret;1720}1721 1722 1723/*1724 * record a given inode in the fixup dir so we can check its link1725 * count when replay is done.  The link count is incremented here1726 * so the inode won't go away until we check it1727 */1728static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans,1729				      struct btrfs_root *root,1730				      struct btrfs_path *path,1731				      u64 objectid)1732{1733	struct btrfs_key key;1734	int ret = 0;1735	struct inode *inode;1736 1737	inode = read_one_inode(root, objectid);1738	if (!inode)1739		return -EIO;1740 1741	key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID;1742	key.type = BTRFS_ORPHAN_ITEM_KEY;1743	key.offset = objectid;1744 1745	ret = btrfs_insert_empty_item(trans, root, path, &key, 0);1746 1747	btrfs_release_path(path);1748	if (ret == 0) {1749		if (!inode->i_nlink)1750			set_nlink(inode, 1);1751		else1752			inc_nlink(inode);1753		ret = btrfs_update_inode(trans, BTRFS_I(inode));1754	} else if (ret == -EEXIST) {1755		ret = 0;1756	}1757	iput(inode);1758 1759	return ret;1760}1761 1762/*1763 * when replaying the log for a directory, we only insert names1764 * for inodes that actually exist.  This means an fsync on a directory1765 * does not implicitly fsync all the new files in it1766 */1767static noinline int insert_one_name(struct btrfs_trans_handle *trans,1768				    struct btrfs_root *root,1769				    u64 dirid, u64 index,1770				    const struct fscrypt_str *name,1771				    struct btrfs_key *location)1772{1773	struct inode *inode;1774	struct inode *dir;1775	int ret;1776 1777	inode = read_one_inode(root, location->objectid);1778	if (!inode)1779		return -ENOENT;1780 1781	dir = read_one_inode(root, dirid);1782	if (!dir) {1783		iput(inode);1784		return -EIO;1785	}1786 1787	ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode), name,1788			     1, index);1789 1790	/* FIXME, put inode into FIXUP list */1791 1792	iput(inode);1793	iput(dir);1794	return ret;1795}1796 1797static int delete_conflicting_dir_entry(struct btrfs_trans_handle *trans,1798					struct btrfs_inode *dir,1799					struct btrfs_path *path,1800					struct btrfs_dir_item *dst_di,1801					const struct btrfs_key *log_key,1802					u8 log_flags,1803					bool exists)1804{1805	struct btrfs_key found_key;1806 1807	btrfs_dir_item_key_to_cpu(path->nodes[0], dst_di, &found_key);1808	/* The existing dentry points to the same inode, don't delete it. */1809	if (found_key.objectid == log_key->objectid &&1810	    found_key.type == log_key->type &&1811	    found_key.offset == log_key->offset &&1812	    btrfs_dir_flags(path->nodes[0], dst_di) == log_flags)1813		return 1;1814 1815	/*1816	 * Don't drop the conflicting directory entry if the inode for the new1817	 * entry doesn't exist.1818	 */1819	if (!exists)1820		return 0;1821 1822	return drop_one_dir_item(trans, path, dir, dst_di);1823}1824 1825/*1826 * take a single entry in a log directory item and replay it into1827 * the subvolume.1828 *1829 * if a conflicting item exists in the subdirectory already,1830 * the inode it points to is unlinked and put into the link count1831 * fix up tree.1832 *1833 * If a name from the log points to a file or directory that does1834 * not exist in the FS, it is skipped.  fsyncs on directories1835 * do not force down inodes inside that directory, just changes to the1836 * names or unlinks in a directory.1837 *1838 * Returns < 0 on error, 0 if the name wasn't replayed (dentry points to a1839 * non-existing inode) and 1 if the name was replayed.1840 */1841static noinline int replay_one_name(struct btrfs_trans_handle *trans,1842				    struct btrfs_root *root,1843				    struct btrfs_path *path,1844				    struct extent_buffer *eb,1845				    struct btrfs_dir_item *di,1846				    struct btrfs_key *key)1847{1848	struct fscrypt_str name = { 0 };1849	struct btrfs_dir_item *dir_dst_di;1850	struct btrfs_dir_item *index_dst_di;1851	bool dir_dst_matches = false;1852	bool index_dst_matches = false;1853	struct btrfs_key log_key;1854	struct btrfs_key search_key;1855	struct inode *dir;1856	u8 log_flags;1857	bool exists;1858	int ret;1859	bool update_size = true;1860	bool name_added = false;1861 1862	dir = read_one_inode(root, key->objectid);1863	if (!dir)1864		return -EIO;1865 1866	ret = read_alloc_one_name(eb, di + 1, btrfs_dir_name_len(eb, di), &name);1867	if (ret)1868		goto out;1869 1870	log_flags = btrfs_dir_flags(eb, di);1871	btrfs_dir_item_key_to_cpu(eb, di, &log_key);1872	ret = btrfs_lookup_inode(trans, root, path, &log_key, 0);1873	btrfs_release_path(path);1874	if (ret < 0)1875		goto out;1876	exists = (ret == 0);1877	ret = 0;1878 1879	dir_dst_di = btrfs_lookup_dir_item(trans, root, path, key->objectid,1880					   &name, 1);1881	if (IS_ERR(dir_dst_di)) {1882		ret = PTR_ERR(dir_dst_di);1883		goto out;1884	} else if (dir_dst_di) {1885		ret = delete_conflicting_dir_entry(trans, BTRFS_I(dir), path,1886						   dir_dst_di, &log_key,1887						   log_flags, exists);1888		if (ret < 0)1889			goto out;1890		dir_dst_matches = (ret == 1);1891	}1892 1893	btrfs_release_path(path);1894 1895	index_dst_di = btrfs_lookup_dir_index_item(trans, root, path,1896						   key->objectid, key->offset,1897						   &name, 1);1898	if (IS_ERR(index_dst_di)) {1899		ret = PTR_ERR(index_dst_di);1900		goto out;1901	} else if (index_dst_di) {1902		ret = delete_conflicting_dir_entry(trans, BTRFS_I(dir), path,1903						   index_dst_di, &log_key,1904						   log_flags, exists);1905		if (ret < 0)1906			goto out;1907		index_dst_matches = (ret == 1);1908	}1909 1910	btrfs_release_path(path);1911 1912	if (dir_dst_matches && index_dst_matches) {1913		ret = 0;1914		update_size = false;1915		goto out;1916	}1917 1918	/*1919	 * Check if the inode reference exists in the log for the given name,1920	 * inode and parent inode1921	 */1922	search_key.objectid = log_key.objectid;1923	search_key.type = BTRFS_INODE_REF_KEY;1924	search_key.offset = key->objectid;1925	ret = backref_in_log(root->log_root, &search_key, 0, &name);1926	if (ret < 0) {1927	        goto out;1928	} else if (ret) {1929	        /* The dentry will be added later. */1930	        ret = 0;1931	        update_size = false;1932	        goto out;1933	}1934 1935	search_key.objectid = log_key.objectid;1936	search_key.type = BTRFS_INODE_EXTREF_KEY;1937	search_key.offset = key->objectid;1938	ret = backref_in_log(root->log_root, &search_key, key->objectid, &name);1939	if (ret < 0) {1940		goto out;1941	} else if (ret) {1942		/* The dentry will be added later. */1943		ret = 0;1944		update_size = false;1945		goto out;1946	}1947	btrfs_release_path(path);1948	ret = insert_one_name(trans, root, key->objectid, key->offset,1949			      &name, &log_key);1950	if (ret && ret != -ENOENT && ret != -EEXIST)1951		goto out;1952	if (!ret)1953		name_added = true;1954	update_size = false;1955	ret = 0;1956 1957out:1958	if (!ret && update_size) {1959		btrfs_i_size_write(BTRFS_I(dir), dir->i_size + name.len * 2);1960		ret = btrfs_update_inode(trans, BTRFS_I(dir));1961	}1962	kfree(name.name);1963	iput(dir);1964	if (!ret && name_added)1965		ret = 1;1966	return ret;1967}1968 1969/* Replay one dir item from a BTRFS_DIR_INDEX_KEY key. */1970static noinline int replay_one_dir_item(struct btrfs_trans_handle *trans,1971					struct btrfs_root *root,1972					struct btrfs_path *path,1973					struct extent_buffer *eb, int slot,1974					struct btrfs_key *key)1975{1976	int ret;1977	struct btrfs_dir_item *di;1978 1979	/* We only log dir index keys, which only contain a single dir item. */1980	ASSERT(key->type == BTRFS_DIR_INDEX_KEY);1981 1982	di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item);1983	ret = replay_one_name(trans, root, path, eb, di, key);1984	if (ret < 0)1985		return ret;1986 1987	/*1988	 * If this entry refers to a non-directory (directories can not have a1989	 * link count > 1) and it was added in the transaction that was not1990	 * committed, make sure we fixup the link count of the inode the entry1991	 * points to. Otherwise something like the following would result in a1992	 * directory pointing to an inode with a wrong link that does not account1993	 * for this dir entry:1994	 *1995	 * mkdir testdir1996	 * touch testdir/foo1997	 * touch testdir/bar1998	 * sync1999	 *2000	 * ln testdir/bar testdir/bar_link2001	 * ln testdir/foo testdir/foo_link2002	 * xfs_io -c "fsync" testdir/bar2003	 *2004	 * <power failure>2005	 *2006	 * mount fs, log replay happens2007	 *2008	 * File foo would remain with a link count of 1 when it has two entries2009	 * pointing to it in the directory testdir. This would make it impossible2010	 * to ever delete the parent directory has it would result in stale2011	 * dentries that can never be deleted.2012	 */2013	if (ret == 1 && btrfs_dir_ftype(eb, di) != BTRFS_FT_DIR) {2014		struct btrfs_path *fixup_path;2015		struct btrfs_key di_key;2016 2017		fixup_path = btrfs_alloc_path();2018		if (!fixup_path)2019			return -ENOMEM;2020 2021		btrfs_dir_item_key_to_cpu(eb, di, &di_key);2022		ret = link_to_fixup_dir(trans, root, fixup_path, di_key.objectid);2023		btrfs_free_path(fixup_path);2024	}2025 2026	return ret;2027}2028 2029/*2030 * directory replay has two parts.  There are the standard directory2031 * items in the log copied from the subvolume, and range items2032 * created in the log while the subvolume was logged.2033 *2034 * The range items tell us which parts of the key space the log2035 * is authoritative for.  During replay, if a key in the subvolume2036 * directory is in a logged range item, but not actually in the log2037 * that means it was deleted from the directory before the fsync2038 * and should be removed.2039 */2040static noinline int find_dir_range(struct btrfs_root *root,2041				   struct btrfs_path *path,2042				   u64 dirid,2043				   u64 *start_ret, u64 *end_ret)2044{2045	struct btrfs_key key;2046	u64 found_end;2047	struct btrfs_dir_log_item *item;2048	int ret;2049	int nritems;2050 2051	if (*start_ret == (u64)-1)2052		return 1;2053 2054	key.objectid = dirid;2055	key.type = BTRFS_DIR_LOG_INDEX_KEY;2056	key.offset = *start_ret;2057 2058	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);2059	if (ret < 0)2060		goto out;2061	if (ret > 0) {2062		if (path->slots[0] == 0)2063			goto out;2064		path->slots[0]--;2065	}2066	if (ret != 0)2067		btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);2068 2069	if (key.type != BTRFS_DIR_LOG_INDEX_KEY || key.objectid != dirid) {2070		ret = 1;2071		goto next;2072	}2073	item = btrfs_item_ptr(path->nodes[0], path->slots[0],2074			      struct btrfs_dir_log_item);2075	found_end = btrfs_dir_log_end(path->nodes[0], item);2076 2077	if (*start_ret >= key.offset && *start_ret <= found_end) {2078		ret = 0;2079		*start_ret = key.offset;2080		*end_ret = found_end;2081		goto out;2082	}2083	ret = 1;2084next:2085	/* check the next slot in the tree to see if it is a valid item */2086	nritems = btrfs_header_nritems(path->nodes[0]);2087	path->slots[0]++;2088	if (path->slots[0] >= nritems) {2089		ret = btrfs_next_leaf(root, path);2090		if (ret)2091			goto out;2092	}2093 2094	btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);2095 2096	if (key.type != BTRFS_DIR_LOG_INDEX_KEY || key.objectid != dirid) {2097		ret = 1;2098		goto out;2099	}2100	item = btrfs_item_ptr(path->nodes[0], path->slots[0],2101			      struct btrfs_dir_log_item);2102	found_end = btrfs_dir_log_end(path->nodes[0], item);2103	*start_ret = key.offset;2104	*end_ret = found_end;2105	ret = 0;2106out:2107	btrfs_release_path(path);2108	return ret;2109}2110 2111/*2112 * this looks for a given directory item in the log.  If the directory2113 * item is not in the log, the item is removed and the inode it points2114 * to is unlinked2115 */2116static noinline int check_item_in_log(struct btrfs_trans_handle *trans,2117				      struct btrfs_root *log,2118				      struct btrfs_path *path,2119				      struct btrfs_path *log_path,2120				      struct inode *dir,2121				      struct btrfs_key *dir_key)2122{2123	struct btrfs_root *root = BTRFS_I(dir)->root;2124	int ret;2125	struct extent_buffer *eb;2126	int slot;2127	struct btrfs_dir_item *di;2128	struct fscrypt_str name = { 0 };2129	struct inode *inode = NULL;2130	struct btrfs_key location;2131 2132	/*2133	 * Currently we only log dir index keys. Even if we replay a log created2134	 * by an older kernel that logged both dir index and dir item keys, all2135	 * we need to do is process the dir index keys, we (and our caller) can2136	 * safely ignore dir item keys (key type BTRFS_DIR_ITEM_KEY).2137	 */2138	ASSERT(dir_key->type == BTRFS_DIR_INDEX_KEY);2139 2140	eb = path->nodes[0];2141	slot = path->slots[0];2142	di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item);2143	ret = read_alloc_one_name(eb, di + 1, btrfs_dir_name_len(eb, di), &name);2144	if (ret)2145		goto out;2146 2147	if (log) {2148		struct btrfs_dir_item *log_di;2149 2150		log_di = btrfs_lookup_dir_index_item(trans, log, log_path,2151						     dir_key->objectid,2152						     dir_key->offset, &name, 0);2153		if (IS_ERR(log_di)) {2154			ret = PTR_ERR(log_di);2155			goto out;2156		} else if (log_di) {2157			/* The dentry exists in the log, we have nothing to do. */2158			ret = 0;2159			goto out;2160		}2161	}2162 2163	btrfs_dir_item_key_to_cpu(eb, di, &location);2164	btrfs_release_path(path);2165	btrfs_release_path(log_path);2166	inode = read_one_inode(root, location.objectid);2167	if (!inode) {2168		ret = -EIO;2169		goto out;2170	}2171 2172	ret = link_to_fixup_dir(trans, root, path, location.objectid);2173	if (ret)2174		goto out;2175 2176	inc_nlink(inode);2177	ret = unlink_inode_for_log_replay(trans, BTRFS_I(dir), BTRFS_I(inode),2178					  &name);2179	/*2180	 * Unlike dir item keys, dir index keys can only have one name (entry) in2181	 * them, as there are no key collisions since each key has a unique offset2182	 * (an index number), so we're done.2183	 */2184out:2185	btrfs_release_path(path);2186	btrfs_release_path(log_path);2187	kfree(name.name);2188	iput(inode);2189	return ret;2190}2191 2192static int replay_xattr_deletes(struct btrfs_trans_handle *trans,2193			      struct btrfs_root *root,2194			      struct btrfs_root *log,2195			      struct btrfs_path *path,2196			      const u64 ino)2197{2198	struct btrfs_key search_key;2199	struct btrfs_path *log_path;2200	int i;2201	int nritems;2202	int ret;2203 2204	log_path = btrfs_alloc_path();2205	if (!log_path)2206		return -ENOMEM;2207 2208	search_key.objectid = ino;2209	search_key.type = BTRFS_XATTR_ITEM_KEY;2210	search_key.offset = 0;2211again:2212	ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);2213	if (ret < 0)2214		goto out;2215process_leaf:2216	nritems = btrfs_header_nritems(path->nodes[0]);2217	for (i = path->slots[0]; i < nritems; i++) {2218		struct btrfs_key key;2219		struct btrfs_dir_item *di;2220		struct btrfs_dir_item *log_di;2221		u32 total_size;2222		u32 cur;2223 2224		btrfs_item_key_to_cpu(path->nodes[0], &key, i);2225		if (key.objectid != ino || key.type != BTRFS_XATTR_ITEM_KEY) {2226			ret = 0;2227			goto out;2228		}2229 2230		di = btrfs_item_ptr(path->nodes[0], i, struct btrfs_dir_item);2231		total_size = btrfs_item_size(path->nodes[0], i);2232		cur = 0;2233		while (cur < total_size) {2234			u16 name_len = btrfs_dir_name_len(path->nodes[0], di);2235			u16 data_len = btrfs_dir_data_len(path->nodes[0], di);2236			u32 this_len = sizeof(*di) + name_len + data_len;2237			char *name;2238 2239			name = kmalloc(name_len, GFP_NOFS);2240			if (!name) {2241				ret = -ENOMEM;2242				goto out;2243			}2244			read_extent_buffer(path->nodes[0], name,2245					   (unsigned long)(di + 1), name_len);2246 2247			log_di = btrfs_lookup_xattr(NULL, log, log_path, ino,2248						    name, name_len, 0);2249			btrfs_release_path(log_path);2250			if (!log_di) {2251				/* Doesn't exist in log tree, so delete it. */2252				btrfs_release_path(path);2253				di = btrfs_lookup_xattr(trans, root, path, ino,2254							name, name_len, -1);2255				kfree(name);2256				if (IS_ERR(di)) {2257					ret = PTR_ERR(di);2258					goto out;2259				}2260				ASSERT(di);2261				ret = btrfs_delete_one_dir_name(trans, root,2262								path, di);2263				if (ret)2264					goto out;2265				btrfs_release_path(path);2266				search_key = key;2267				goto again;2268			}2269			kfree(name);2270			if (IS_ERR(log_di)) {2271				ret = PTR_ERR(log_di);2272				goto out;2273			}2274			cur += this_len;2275			di = (struct btrfs_dir_item *)((char *)di + this_len);2276		}2277	}2278	ret = btrfs_next_leaf(root, path);2279	if (ret > 0)2280		ret = 0;2281	else if (ret == 0)2282		goto process_leaf;2283out:2284	btrfs_free_path(log_path);2285	btrfs_release_path(path);2286	return ret;2287}2288 2289 2290/*2291 * deletion replay happens before we copy any new directory items2292 * out of the log or out of backreferences from inodes.  It2293 * scans the log to find ranges of keys that log is authoritative for,2294 * and then scans the directory to find items in those ranges that are2295 * not present in the log.2296 *2297 * Anything we don't find in the log is unlinked and removed from the2298 * directory.2299 */2300static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans,2301				       struct btrfs_root *root,2302				       struct btrfs_root *log,2303				       struct btrfs_path *path,2304				       u64 dirid, int del_all)2305{2306	u64 range_start;2307	u64 range_end;2308	int ret = 0;2309	struct btrfs_key dir_key;2310	struct btrfs_key found_key;2311	struct btrfs_path *log_path;2312	struct inode *dir;2313 2314	dir_key.objectid = dirid;2315	dir_key.type = BTRFS_DIR_INDEX_KEY;2316	log_path = btrfs_alloc_path();2317	if (!log_path)2318		return -ENOMEM;2319 2320	dir = read_one_inode(root, dirid);2321	/* it isn't an error if the inode isn't there, that can happen2322	 * because we replay the deletes before we copy in the inode item2323	 * from the log2324	 */2325	if (!dir) {2326		btrfs_free_path(log_path);2327		return 0;2328	}2329 2330	range_start = 0;2331	range_end = 0;2332	while (1) {2333		if (del_all)2334			range_end = (u64)-1;2335		else {2336			ret = find_dir_range(log, path, dirid,2337					     &range_start, &range_end);2338			if (ret < 0)2339				goto out;2340			else if (ret > 0)2341				break;2342		}2343 2344		dir_key.offset = range_start;2345		while (1) {2346			int nritems;2347			ret = btrfs_search_slot(NULL, root, &dir_key, path,2348						0, 0);2349			if (ret < 0)2350				goto out;2351 2352			nritems = btrfs_header_nritems(path->nodes[0]);2353			if (path->slots[0] >= nritems) {2354				ret = btrfs_next_leaf(root, path);2355				if (ret == 1)2356					break;2357				else if (ret < 0)2358					goto out;2359			}2360			btrfs_item_key_to_cpu(path->nodes[0], &found_key,2361					      path->slots[0]);2362			if (found_key.objectid != dirid ||2363			    found_key.type != dir_key.type) {2364				ret = 0;2365				goto out;2366			}2367 2368			if (found_key.offset > range_end)2369				break;2370 2371			ret = check_item_in_log(trans, log, path,2372						log_path, dir,2373						&found_key);2374			if (ret)2375				goto out;2376			if (found_key.offset == (u64)-1)2377				break;2378			dir_key.offset = found_key.offset + 1;2379		}2380		btrfs_release_path(path);2381		if (range_end == (u64)-1)2382			break;2383		range_start = range_end + 1;2384	}2385	ret = 0;2386out:2387	btrfs_release_path(path);2388	btrfs_free_path(log_path);2389	iput(dir);2390	return ret;2391}2392 2393/*2394 * the process_func used to replay items from the log tree.  This2395 * gets called in two different stages.  The first stage just looks2396 * for inodes and makes sure they are all copied into the subvolume.2397 *2398 * The second stage copies all the other item types from the log into2399 * the subvolume.  The two stage approach is slower, but gets rid of2400 * lots of complexity around inodes referencing other inodes that exist2401 * only in the log (references come from either directory items or inode2402 * back refs).2403 */2404static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb,2405			     struct walk_control *wc, u64 gen, int level)2406{2407	int nritems;2408	struct btrfs_tree_parent_check check = {2409		.transid = gen,2410		.level = level2411	};2412	struct btrfs_path *path;2413	struct btrfs_root *root = wc->replay_dest;2414	struct btrfs_key key;2415	int i;2416	int ret;2417 2418	ret = btrfs_read_extent_buffer(eb, &check);2419	if (ret)2420		return ret;2421 2422	level = btrfs_header_level(eb);2423 2424	if (level != 0)2425		return 0;2426 2427	path = btrfs_alloc_path();2428	if (!path)2429		return -ENOMEM;2430 2431	nritems = btrfs_header_nritems(eb);2432	for (i = 0; i < nritems; i++) {2433		btrfs_item_key_to_cpu(eb, &key, i);2434 2435		/* inode keys are done during the first stage */2436		if (key.type == BTRFS_INODE_ITEM_KEY &&2437		    wc->stage == LOG_WALK_REPLAY_INODES) {2438			struct btrfs_inode_item *inode_item;2439			u32 mode;2440 2441			inode_item = btrfs_item_ptr(eb, i,2442					    struct btrfs_inode_item);2443			/*2444			 * If we have a tmpfile (O_TMPFILE) that got fsync'ed2445			 * and never got linked before the fsync, skip it, as2446			 * replaying it is pointless since it would be deleted2447			 * later. We skip logging tmpfiles, but it's always2448			 * possible we are replaying a log created with a kernel2449			 * that used to log tmpfiles.2450			 */2451			if (btrfs_inode_nlink(eb, inode_item) == 0) {2452				wc->ignore_cur_inode = true;2453				continue;2454			} else {2455				wc->ignore_cur_inode = false;2456			}2457			ret = replay_xattr_deletes(wc->trans, root, log,2458						   path, key.objectid);2459			if (ret)2460				break;2461			mode = btrfs_inode_mode(eb, inode_item);2462			if (S_ISDIR(mode)) {2463				ret = replay_dir_deletes(wc->trans,2464					 root, log, path, key.objectid, 0);2465				if (ret)2466					break;2467			}2468			ret = overwrite_item(wc->trans, root, path,2469					     eb, i, &key);2470			if (ret)2471				break;2472 2473			/*2474			 * Before replaying extents, truncate the inode to its2475			 * size. We need to do it now and not after log replay2476			 * because before an fsync we can have prealloc extents2477			 * added beyond the inode's i_size. If we did it after,2478			 * through orphan cleanup for example, we would drop2479			 * those prealloc extents just after replaying them.2480			 */2481			if (S_ISREG(mode)) {2482				struct btrfs_drop_extents_args drop_args = { 0 };2483				struct inode *inode;2484				u64 from;2485 2486				inode = read_one_inode(root, key.objectid);2487				if (!inode) {2488					ret = -EIO;2489					break;2490				}2491				from = ALIGN(i_size_read(inode),2492					     root->fs_info->sectorsize);2493				drop_args.start = from;2494				drop_args.end = (u64)-1;2495				drop_args.drop_cache = true;2496				ret = btrfs_drop_extents(wc->trans, root,2497							 BTRFS_I(inode),2498							 &drop_args);2499				if (!ret) {2500					inode_sub_bytes(inode,2501							drop_args.bytes_found);2502					/* Update the inode's nbytes. */2503					ret = btrfs_update_inode(wc->trans,2504								 BTRFS_I(inode));2505				}2506				iput(inode);2507				if (ret)2508					break;2509			}2510 2511			ret = link_to_fixup_dir(wc->trans, root,2512						path, key.objectid);2513			if (ret)2514				break;2515		}2516 2517		if (wc->ignore_cur_inode)2518			continue;2519 2520		if (key.type == BTRFS_DIR_INDEX_KEY &&2521		    wc->stage == LOG_WALK_REPLAY_DIR_INDEX) {2522			ret = replay_one_dir_item(wc->trans, root, path,2523						  eb, i, &key);2524			if (ret)2525				break;2526		}2527 2528		if (wc->stage < LOG_WALK_REPLAY_ALL)2529			continue;2530 2531		/* these keys are simply copied */2532		if (key.type == BTRFS_XATTR_ITEM_KEY) {2533			ret = overwrite_item(wc->trans, root, path,2534					     eb, i, &key);2535			if (ret)2536				break;2537		} else if (key.type == BTRFS_INODE_REF_KEY ||2538			   key.type == BTRFS_INODE_EXTREF_KEY) {2539			ret = add_inode_ref(wc->trans, root, log, path,2540					    eb, i, &key);2541			if (ret && ret != -ENOENT)2542				break;2543			ret = 0;2544		} else if (key.type == BTRFS_EXTENT_DATA_KEY) {2545			ret = replay_one_extent(wc->trans, root, path,2546						eb, i, &key);2547			if (ret)2548				break;2549		}2550		/*2551		 * We don't log BTRFS_DIR_ITEM_KEY keys anymore, only the2552		 * BTRFS_DIR_INDEX_KEY items which we use to derive the2553		 * BTRFS_DIR_ITEM_KEY items. If we are replaying a log from an2554		 * older kernel with such keys, ignore them.2555		 */2556	}2557	btrfs_free_path(path);2558	return ret;2559}2560 2561/*2562 * Correctly adjust the reserved bytes occupied by a log tree extent buffer2563 */2564static void unaccount_log_buffer(struct btrfs_fs_info *fs_info, u64 start)2565{2566	struct btrfs_block_group *cache;2567 2568	cache = btrfs_lookup_block_group(fs_info, start);2569	if (!cache) {2570		btrfs_err(fs_info, "unable to find block group for %llu", start);2571		return;2572	}2573 2574	spin_lock(&cache->space_info->lock);2575	spin_lock(&cache->lock);2576	cache->reserved -= fs_info->nodesize;2577	cache->space_info->bytes_reserved -= fs_info->nodesize;2578	spin_unlock(&cache->lock);2579	spin_unlock(&cache->space_info->lock);2580 2581	btrfs_put_block_group(cache);2582}2583 2584static int clean_log_buffer(struct btrfs_trans_handle *trans,2585			    struct extent_buffer *eb)2586{2587	int ret;2588 2589	btrfs_tree_lock(eb);2590	btrfs_clear_buffer_dirty(trans, eb);2591	wait_on_extent_buffer_writeback(eb);2592	btrfs_tree_unlock(eb);2593 2594	if (trans) {2595		ret = btrfs_pin_reserved_extent(trans, eb);2596		if (ret)2597			return ret;2598	} else {2599		unaccount_log_buffer(eb->fs_info, eb->start);2600	}2601 2602	return 0;2603}2604 2605static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,2606				   struct btrfs_root *root,2607				   struct btrfs_path *path, int *level,2608				   struct walk_control *wc)2609{2610	struct btrfs_fs_info *fs_info = root->fs_info;2611	u64 bytenr;2612	u64 ptr_gen;2613	struct extent_buffer *next;2614	struct extent_buffer *cur;2615	int ret = 0;2616 2617	while (*level > 0) {2618		struct btrfs_tree_parent_check check = { 0 };2619 2620		cur = path->nodes[*level];2621 2622		WARN_ON(btrfs_header_level(cur) != *level);2623 2624		if (path->slots[*level] >=2625		    btrfs_header_nritems(cur))2626			break;2627 2628		bytenr = btrfs_node_blockptr(cur, path->slots[*level]);2629		ptr_gen = btrfs_node_ptr_generation(cur, path->slots[*level]);2630		check.transid = ptr_gen;2631		check.level = *level - 1;2632		check.has_first_key = true;2633		btrfs_node_key_to_cpu(cur, &check.first_key, path->slots[*level]);2634 2635		next = btrfs_find_create_tree_block(fs_info, bytenr,2636						    btrfs_header_owner(cur),2637						    *level - 1);2638		if (IS_ERR(next))2639			return PTR_ERR(next);2640 2641		if (*level == 1) {2642			ret = wc->process_func(root, next, wc, ptr_gen,2643					       *level - 1);2644			if (ret) {2645				free_extent_buffer(next);2646				return ret;2647			}2648 2649			path->slots[*level]++;2650			if (wc->free) {2651				ret = btrfs_read_extent_buffer(next, &check);2652				if (ret) {2653					free_extent_buffer(next);2654					return ret;2655				}2656 2657				ret = clean_log_buffer(trans, next);2658				if (ret) {2659					free_extent_buffer(next);2660					return ret;2661				}2662			}2663			free_extent_buffer(next);2664			continue;2665		}2666		ret = btrfs_read_extent_buffer(next, &check);2667		if (ret) {2668			free_extent_buffer(next);2669			return ret;2670		}2671 2672		if (path->nodes[*level-1])2673			free_extent_buffer(path->nodes[*level-1]);2674		path->nodes[*level-1] = next;2675		*level = btrfs_header_level(next);2676		path->slots[*level] = 0;2677		cond_resched();2678	}2679	path->slots[*level] = btrfs_header_nritems(path->nodes[*level]);2680 2681	cond_resched();2682	return 0;2683}2684 2685static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,2686				 struct btrfs_root *root,2687				 struct btrfs_path *path, int *level,2688				 struct walk_control *wc)2689{2690	int i;2691	int slot;2692	int ret;2693 2694	for (i = *level; i < BTRFS_MAX_LEVEL - 1 && path->nodes[i]; i++) {2695		slot = path->slots[i];2696		if (slot + 1 < btrfs_header_nritems(path->nodes[i])) {2697			path->slots[i]++;2698			*level = i;2699			WARN_ON(*level == 0);2700			return 0;2701		} else {2702			ret = wc->process_func(root, path->nodes[*level], wc,2703				 btrfs_header_generation(path->nodes[*level]),2704				 *level);2705			if (ret)2706				return ret;2707 2708			if (wc->free) {2709				ret = clean_log_buffer(trans, path->nodes[*level]);2710				if (ret)2711					return ret;2712			}2713			free_extent_buffer(path->nodes[*level]);2714			path->nodes[*level] = NULL;2715			*level = i + 1;2716		}2717	}2718	return 1;2719}2720 2721/*2722 * drop the reference count on the tree rooted at 'snap'.  This traverses2723 * the tree freeing any blocks that have a ref count of zero after being2724 * decremented.2725 */2726static int walk_log_tree(struct btrfs_trans_handle *trans,2727			 struct btrfs_root *log, struct walk_control *wc)2728{2729	int ret = 0;2730	int wret;2731	int level;2732	struct btrfs_path *path;2733	int orig_level;2734 2735	path = btrfs_alloc_path();2736	if (!path)2737		return -ENOMEM;2738 2739	level = btrfs_header_level(log->node);2740	orig_level = level;2741	path->nodes[level] = log->node;2742	atomic_inc(&log->node->refs);2743	path->slots[level] = 0;2744 2745	while (1) {2746		wret = walk_down_log_tree(trans, log, path, &level, wc);2747		if (wret > 0)2748			break;2749		if (wret < 0) {2750			ret = wret;2751			goto out;2752		}2753 2754		wret = walk_up_log_tree(trans, log, path, &level, wc);2755		if (wret > 0)2756			break;2757		if (wret < 0) {2758			ret = wret;2759			goto out;2760		}2761	}2762 2763	/* was the root node processed? if not, catch it here */2764	if (path->nodes[orig_level]) {2765		ret = wc->process_func(log, path->nodes[orig_level], wc,2766			 btrfs_header_generation(path->nodes[orig_level]),2767			 orig_level);2768		if (ret)2769			goto out;2770		if (wc->free)2771			ret = clean_log_buffer(trans, path->nodes[orig_level]);2772	}2773 2774out:2775	btrfs_free_path(path);2776	return ret;2777}2778 2779/*2780 * helper function to update the item for a given subvolumes log root2781 * in the tree of log roots2782 */2783static int update_log_root(struct btrfs_trans_handle *trans,2784			   struct btrfs_root *log,2785			   struct btrfs_root_item *root_item)2786{2787	struct btrfs_fs_info *fs_info = log->fs_info;2788	int ret;2789 2790	if (log->log_transid == 1) {2791		/* insert root item on the first sync */2792		ret = btrfs_insert_root(trans, fs_info->log_root_tree,2793				&log->root_key, root_item);2794	} else {2795		ret = btrfs_update_root(trans, fs_info->log_root_tree,2796				&log->root_key, root_item);2797	}2798	return ret;2799}2800 2801static void wait_log_commit(struct btrfs_root *root, int transid)2802{2803	DEFINE_WAIT(wait);2804	int index = transid % 2;2805 2806	/*2807	 * we only allow two pending log transactions at a time,2808	 * so we know that if ours is more than 2 older than the2809	 * current transaction, we're done2810	 */2811	for (;;) {2812		prepare_to_wait(&root->log_commit_wait[index],2813				&wait, TASK_UNINTERRUPTIBLE);2814 2815		if (!(root->log_transid_committed < transid &&2816		      atomic_read(&root->log_commit[index])))2817			break;2818 2819		mutex_unlock(&root->log_mutex);2820		schedule();2821		mutex_lock(&root->log_mutex);2822	}2823	finish_wait(&root->log_commit_wait[index], &wait);2824}2825 2826static void wait_for_writer(struct btrfs_root *root)2827{2828	DEFINE_WAIT(wait);2829 2830	for (;;) {2831		prepare_to_wait(&root->log_writer_wait, &wait,2832				TASK_UNINTERRUPTIBLE);2833		if (!atomic_read(&root->log_writers))2834			break;2835 2836		mutex_unlock(&root->log_mutex);2837		schedule();2838		mutex_lock(&root->log_mutex);2839	}2840	finish_wait(&root->log_writer_wait, &wait);2841}2842 2843void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx, struct btrfs_inode *inode)2844{2845	ctx->log_ret = 0;2846	ctx->log_transid = 0;2847	ctx->log_new_dentries = false;2848	ctx->logging_new_name = false;2849	ctx->logging_new_delayed_dentries = false;2850	ctx->logged_before = false;2851	ctx->inode = inode;2852	INIT_LIST_HEAD(&ctx->list);2853	INIT_LIST_HEAD(&ctx->ordered_extents);2854	INIT_LIST_HEAD(&ctx->conflict_inodes);2855	ctx->num_conflict_inodes = 0;2856	ctx->logging_conflict_inodes = false;2857	ctx->scratch_eb = NULL;2858}2859 2860void btrfs_init_log_ctx_scratch_eb(struct btrfs_log_ctx *ctx)2861{2862	struct btrfs_inode *inode = ctx->inode;2863 2864	if (!test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags) &&2865	    !test_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags))2866		return;2867 2868	/*2869	 * Don't care about allocation failure. This is just for optimization,2870	 * if we fail to allocate here, we will try again later if needed.2871	 */2872	ctx->scratch_eb = alloc_dummy_extent_buffer(inode->root->fs_info, 0);2873}2874 2875void btrfs_release_log_ctx_extents(struct btrfs_log_ctx *ctx)2876{2877	struct btrfs_ordered_extent *ordered;2878	struct btrfs_ordered_extent *tmp;2879 2880	btrfs_assert_inode_locked(ctx->inode);2881 2882	list_for_each_entry_safe(ordered, tmp, &ctx->ordered_extents, log_list) {2883		list_del_init(&ordered->log_list);2884		btrfs_put_ordered_extent(ordered);2885	}2886}2887 2888 2889static inline void btrfs_remove_log_ctx(struct btrfs_root *root,2890					struct btrfs_log_ctx *ctx)2891{2892	mutex_lock(&root->log_mutex);2893	list_del_init(&ctx->list);2894	mutex_unlock(&root->log_mutex);2895}2896 2897/* 2898 * Invoked in log mutex context, or be sure there is no other task which2899 * can access the list.2900 */2901static inline void btrfs_remove_all_log_ctxs(struct btrfs_root *root,2902					     int index, int error)2903{2904	struct btrfs_log_ctx *ctx;2905	struct btrfs_log_ctx *safe;2906 2907	list_for_each_entry_safe(ctx, safe, &root->log_ctxs[index], list) {2908		list_del_init(&ctx->list);2909		ctx->log_ret = error;2910	}2911}2912 2913/*2914 * Sends a given tree log down to the disk and updates the super blocks to2915 * record it.  When this call is done, you know that any inodes previously2916 * logged are safely on disk only if it returns 0.2917 *2918 * Any other return value means you need to call btrfs_commit_transaction.2919 * Some of the edge cases for fsyncing directories that have had unlinks2920 * or renames done in the past mean that sometimes the only safe2921 * fsync is to commit the whole FS.  When btrfs_sync_log returns -EAGAIN,2922 * that has happened.2923 */2924int btrfs_sync_log(struct btrfs_trans_handle *trans,2925		   struct btrfs_root *root, struct btrfs_log_ctx *ctx)2926{2927	int index1;2928	int index2;2929	int mark;2930	int ret;2931	struct btrfs_fs_info *fs_info = root->fs_info;2932	struct btrfs_root *log = root->log_root;2933	struct btrfs_root *log_root_tree = fs_info->log_root_tree;2934	struct btrfs_root_item new_root_item;2935	int log_transid = 0;2936	struct btrfs_log_ctx root_log_ctx;2937	struct blk_plug plug;2938	u64 log_root_start;2939	u64 log_root_level;2940 2941	mutex_lock(&root->log_mutex);2942	log_transid = ctx->log_transid;2943	if (root->log_transid_committed >= log_transid) {2944		mutex_unlock(&root->log_mutex);2945		return ctx->log_ret;2946	}2947 2948	index1 = log_transid % 2;2949	if (atomic_read(&root->log_commit[index1])) {2950		wait_log_commit(root, log_transid);2951		mutex_unlock(&root->log_mutex);2952		return ctx->log_ret;2953	}2954	ASSERT(log_transid == root->log_transid);2955	atomic_set(&root->log_commit[index1], 1);2956 2957	/* wait for previous tree log sync to complete */2958	if (atomic_read(&root->log_commit[(index1 + 1) % 2]))2959		wait_log_commit(root, log_transid - 1);2960 2961	while (1) {2962		int batch = atomic_read(&root->log_batch);2963		/* when we're on an ssd, just kick the log commit out */2964		if (!btrfs_test_opt(fs_info, SSD) &&2965		    test_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state)) {2966			mutex_unlock(&root->log_mutex);2967			schedule_timeout_uninterruptible(1);2968			mutex_lock(&root->log_mutex);2969		}2970		wait_for_writer(root);2971		if (batch == atomic_read(&root->log_batch))2972			break;2973	}2974 2975	/* bail out if we need to do a full commit */2976	if (btrfs_need_log_full_commit(trans)) {2977		ret = BTRFS_LOG_FORCE_COMMIT;2978		mutex_unlock(&root->log_mutex);2979		goto out;2980	}2981 2982	if (log_transid % 2 == 0)2983		mark = EXTENT_DIRTY;2984	else2985		mark = EXTENT_NEW;2986 2987	/* we start IO on  all the marked extents here, but we don't actually2988	 * wait for them until later.2989	 */2990	blk_start_plug(&plug);2991	ret = btrfs_write_marked_extents(fs_info, &log->dirty_log_pages, mark);2992	/*2993	 * -EAGAIN happens when someone, e.g., a concurrent transaction2994	 *  commit, writes a dirty extent in this tree-log commit. This2995	 *  concurrent write will create a hole writing out the extents,2996	 *  and we cannot proceed on a zoned filesystem, requiring2997	 *  sequential writing. While we can bail out to a full commit2998	 *  here, but we can continue hoping the concurrent writing fills2999	 *  the hole.3000	 */3001	if (ret == -EAGAIN && btrfs_is_zoned(fs_info))3002		ret = 0;3003	if (ret) {3004		blk_finish_plug(&plug);3005		btrfs_set_log_full_commit(trans);3006		mutex_unlock(&root->log_mutex);3007		goto out;3008	}3009 3010	/*3011	 * We _must_ update under the root->log_mutex in order to make sure we3012	 * have a consistent view of the log root we are trying to commit at3013	 * this moment.3014	 *3015	 * We _must_ copy this into a local copy, because we are not holding the3016	 * log_root_tree->log_mutex yet.  This is important because when we3017	 * commit the log_root_tree we must have a consistent view of the3018	 * log_root_tree when we update the super block to point at the3019	 * log_root_tree bytenr.  If we update the log_root_tree here we'll race3020	 * with the commit and possibly point at the new block which we may not3021	 * have written out.3022	 */3023	btrfs_set_root_node(&log->root_item, log->node);3024	memcpy(&new_root_item, &log->root_item, sizeof(new_root_item));3025 3026	btrfs_set_root_log_transid(root, root->log_transid + 1);3027	log->log_transid = root->log_transid;3028	root->log_start_pid = 0;3029	/*3030	 * IO has been started, blocks of the log tree have WRITTEN flag set3031	 * in their headers. new modifications of the log will be written to3032	 * new positions. so it's safe to allow log writers to go in.3033	 */3034	mutex_unlock(&root->log_mutex);3035 3036	if (btrfs_is_zoned(fs_info)) {3037		mutex_lock(&fs_info->tree_root->log_mutex);3038		if (!log_root_tree->node) {3039			ret = btrfs_alloc_log_tree_node(trans, log_root_tree);3040			if (ret) {3041				mutex_unlock(&fs_info->tree_root->log_mutex);3042				blk_finish_plug(&plug);3043				goto out;3044			}3045		}3046		mutex_unlock(&fs_info->tree_root->log_mutex);3047	}3048 3049	btrfs_init_log_ctx(&root_log_ctx, NULL);3050 3051	mutex_lock(&log_root_tree->log_mutex);3052 3053	index2 = log_root_tree->log_transid % 2;3054	list_add_tail(&root_log_ctx.list, &log_root_tree->log_ctxs[index2]);3055	root_log_ctx.log_transid = log_root_tree->log_transid;3056 3057	/*3058	 * Now we are safe to update the log_root_tree because we're under the3059	 * log_mutex, and we're a current writer so we're holding the commit3060	 * open until we drop the log_mutex.3061	 */3062	ret = update_log_root(trans, log, &new_root_item);3063	if (ret) {3064		list_del_init(&root_log_ctx.list);3065		blk_finish_plug(&plug);3066		btrfs_set_log_full_commit(trans);3067		if (ret != -ENOSPC)3068			btrfs_err(fs_info,3069				  "failed to update log for root %llu ret %d",3070				  btrfs_root_id(root), ret);3071		btrfs_wait_tree_log_extents(log, mark);3072		mutex_unlock(&log_root_tree->log_mutex);3073		goto out;3074	}3075 3076	if (log_root_tree->log_transid_committed >= root_log_ctx.log_transid) {3077		blk_finish_plug(&plug);3078		list_del_init(&root_log_ctx.list);3079		mutex_unlock(&log_root_tree->log_mutex);3080		ret = root_log_ctx.log_ret;3081		goto out;3082	}3083 3084	if (atomic_read(&log_root_tree->log_commit[index2])) {3085		blk_finish_plug(&plug);3086		ret = btrfs_wait_tree_log_extents(log, mark);3087		wait_log_commit(log_root_tree,3088				root_log_ctx.log_transid);3089		mutex_unlock(&log_root_tree->log_mutex);3090		if (!ret)3091			ret = root_log_ctx.log_ret;3092		goto out;3093	}3094	ASSERT(root_log_ctx.log_transid == log_root_tree->log_transid);3095	atomic_set(&log_root_tree->log_commit[index2], 1);3096 3097	if (atomic_read(&log_root_tree->log_commit[(index2 + 1) % 2])) {3098		wait_log_commit(log_root_tree,3099				root_log_ctx.log_transid - 1);3100	}3101 3102	/*3103	 * now that we've moved on to the tree of log tree roots,3104	 * check the full commit flag again3105	 */3106	if (btrfs_need_log_full_commit(trans)) {3107		blk_finish_plug(&plug);3108		btrfs_wait_tree_log_extents(log, mark);3109		mutex_unlock(&log_root_tree->log_mutex);3110		ret = BTRFS_LOG_FORCE_COMMIT;3111		goto out_wake_log_root;3112	}3113 3114	ret = btrfs_write_marked_extents(fs_info,3115					 &log_root_tree->dirty_log_pages,3116					 EXTENT_DIRTY | EXTENT_NEW);3117	blk_finish_plug(&plug);3118	/*3119	 * As described above, -EAGAIN indicates a hole in the extents. We3120	 * cannot wait for these write outs since the waiting cause a3121	 * deadlock. Bail out to the full commit instead.3122	 */3123	if (ret == -EAGAIN && btrfs_is_zoned(fs_info)) {3124		btrfs_set_log_full_commit(trans);3125		btrfs_wait_tree_log_extents(log, mark);3126		mutex_unlock(&log_root_tree->log_mutex);3127		goto out_wake_log_root;3128	} else if (ret) {3129		btrfs_set_log_full_commit(trans);3130		mutex_unlock(&log_root_tree->log_mutex);3131		goto out_wake_log_root;3132	}3133	ret = btrfs_wait_tree_log_extents(log, mark);3134	if (!ret)3135		ret = btrfs_wait_tree_log_extents(log_root_tree,3136						  EXTENT_NEW | EXTENT_DIRTY);3137	if (ret) {3138		btrfs_set_log_full_commit(trans);3139		mutex_unlock(&log_root_tree->log_mutex);3140		goto out_wake_log_root;3141	}3142 3143	log_root_start = log_root_tree->node->start;3144	log_root_level = btrfs_header_level(log_root_tree->node);3145	log_root_tree->log_transid++;3146	mutex_unlock(&log_root_tree->log_mutex);3147 3148	/*3149	 * Here we are guaranteed that nobody is going to write the superblock3150	 * for the current transaction before us and that neither we do write3151	 * our superblock before the previous transaction finishes its commit3152	 * and writes its superblock, because:3153	 *3154	 * 1) We are holding a handle on the current transaction, so no body3155	 *    can commit it until we release the handle;3156	 *3157	 * 2) Before writing our superblock we acquire the tree_log_mutex, so3158	 *    if the previous transaction is still committing, and hasn't yet3159	 *    written its superblock, we wait for it to do it, because a3160	 *    transaction commit acquires the tree_log_mutex when the commit3161	 *    begins and releases it only after writing its superblock.3162	 */3163	mutex_lock(&fs_info->tree_log_mutex);3164 3165	/*3166	 * The previous transaction writeout phase could have failed, and thus3167	 * marked the fs in an error state.  We must not commit here, as we3168	 * could have updated our generation in the super_for_commit and3169	 * writing the super here would result in transid mismatches.  If there3170	 * is an error here just bail.3171	 */3172	if (BTRFS_FS_ERROR(fs_info)) {3173		ret = -EIO;3174		btrfs_set_log_full_commit(trans);3175		btrfs_abort_transaction(trans, ret);3176		mutex_unlock(&fs_info->tree_log_mutex);3177		goto out_wake_log_root;3178	}3179 3180	btrfs_set_super_log_root(fs_info->super_for_commit, log_root_start);3181	btrfs_set_super_log_root_level(fs_info->super_for_commit, log_root_level);3182	ret = write_all_supers(fs_info, 1);3183	mutex_unlock(&fs_info->tree_log_mutex);3184	if (ret) {3185		btrfs_set_log_full_commit(trans);3186		btrfs_abort_transaction(trans, ret);3187		goto out_wake_log_root;3188	}3189 3190	/*3191	 * We know there can only be one task here, since we have not yet set3192	 * root->log_commit[index1] to 0 and any task attempting to sync the3193	 * log must wait for the previous log transaction to commit if it's3194	 * still in progress or wait for the current log transaction commit if3195	 * someone else already started it. We use <= and not < because the3196	 * first log transaction has an ID of 0.3197	 */3198	ASSERT(btrfs_get_root_last_log_commit(root) <= log_transid);3199	btrfs_set_root_last_log_commit(root, log_transid);3200 3201out_wake_log_root:3202	mutex_lock(&log_root_tree->log_mutex);3203	btrfs_remove_all_log_ctxs(log_root_tree, index2, ret);3204 3205	log_root_tree->log_transid_committed++;3206	atomic_set(&log_root_tree->log_commit[index2], 0);3207	mutex_unlock(&log_root_tree->log_mutex);3208 3209	/*3210	 * The barrier before waitqueue_active (in cond_wake_up) is needed so3211	 * all the updates above are seen by the woken threads. It might not be3212	 * necessary, but proving that seems to be hard.3213	 */3214	cond_wake_up(&log_root_tree->log_commit_wait[index2]);3215out:3216	mutex_lock(&root->log_mutex);3217	btrfs_remove_all_log_ctxs(root, index1, ret);3218	root->log_transid_committed++;3219	atomic_set(&root->log_commit[index1], 0);3220	mutex_unlock(&root->log_mutex);3221 3222	/*3223	 * The barrier before waitqueue_active (in cond_wake_up) is needed so3224	 * all the updates above are seen by the woken threads. It might not be3225	 * necessary, but proving that seems to be hard.3226	 */3227	cond_wake_up(&root->log_commit_wait[index1]);3228	return ret;3229}3230 3231static void free_log_tree(struct btrfs_trans_handle *trans,3232			  struct btrfs_root *log)3233{3234	int ret;3235	struct walk_control wc = {3236		.free = 1,3237		.process_func = process_one_buffer3238	};3239 3240	if (log->node) {3241		ret = walk_log_tree(trans, log, &wc);3242		if (ret) {3243			/*3244			 * We weren't able to traverse the entire log tree, the3245			 * typical scenario is getting an -EIO when reading an3246			 * extent buffer of the tree, due to a previous writeback3247			 * failure of it.3248			 */3249			set_bit(BTRFS_FS_STATE_LOG_CLEANUP_ERROR,3250				&log->fs_info->fs_state);3251 3252			/*3253			 * Some extent buffers of the log tree may still be dirty3254			 * and not yet written back to storage, because we may3255			 * have updates to a log tree without syncing a log tree,3256			 * such as during rename and link operations. So flush3257			 * them out and wait for their writeback to complete, so3258			 * that we properly cleanup their state and pages.3259			 */3260			btrfs_write_marked_extents(log->fs_info,3261						   &log->dirty_log_pages,3262						   EXTENT_DIRTY | EXTENT_NEW);3263			btrfs_wait_tree_log_extents(log,3264						    EXTENT_DIRTY | EXTENT_NEW);3265 3266			if (trans)3267				btrfs_abort_transaction(trans, ret);3268			else3269				btrfs_handle_fs_error(log->fs_info, ret, NULL);3270		}3271	}3272 3273	extent_io_tree_release(&log->dirty_log_pages);3274	extent_io_tree_release(&log->log_csum_range);3275 3276	btrfs_put_root(log);3277}3278 3279/*3280 * free all the extents used by the tree log.  This should be called3281 * at commit time of the full transaction3282 */3283int btrfs_free_log(struct btrfs_trans_handle *trans, struct btrfs_root *root)3284{3285	if (root->log_root) {3286		free_log_tree(trans, root->log_root);3287		root->log_root = NULL;3288		clear_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state);3289	}3290	return 0;3291}3292 3293int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans,3294			     struct btrfs_fs_info *fs_info)3295{3296	if (fs_info->log_root_tree) {3297		free_log_tree(trans, fs_info->log_root_tree);3298		fs_info->log_root_tree = NULL;3299		clear_bit(BTRFS_ROOT_HAS_LOG_TREE, &fs_info->tree_root->state);3300	}3301	return 0;3302}3303 3304/*3305 * Check if an inode was logged in the current transaction. This correctly deals3306 * with the case where the inode was logged but has a logged_trans of 0, which3307 * happens if the inode is evicted and loaded again, as logged_trans is an in3308 * memory only field (not persisted).3309 *3310 * Returns 1 if the inode was logged before in the transaction, 0 if it was not,3311 * and < 0 on error.3312 */3313static int inode_logged(const struct btrfs_trans_handle *trans,3314			struct btrfs_inode *inode,3315			struct btrfs_path *path_in)3316{3317	struct btrfs_path *path = path_in;3318	struct btrfs_key key;3319	int ret;3320 3321	if (inode->logged_trans == trans->transid)3322		return 1;3323 3324	/*3325	 * If logged_trans is not 0, then we know the inode logged was not logged3326	 * in this transaction, so we can return false right away.3327	 */3328	if (inode->logged_trans > 0)3329		return 0;3330 3331	/*3332	 * If no log tree was created for this root in this transaction, then3333	 * the inode can not have been logged in this transaction. In that case3334	 * set logged_trans to anything greater than 0 and less than the current3335	 * transaction's ID, to avoid the search below in a future call in case3336	 * a log tree gets created after this.3337	 */3338	if (!test_bit(BTRFS_ROOT_HAS_LOG_TREE, &inode->root->state)) {3339		inode->logged_trans = trans->transid - 1;3340		return 0;3341	}3342 3343	/*3344	 * We have a log tree and the inode's logged_trans is 0. We can't tell3345	 * for sure if the inode was logged before in this transaction by looking3346	 * only at logged_trans. We could be pessimistic and assume it was, but3347	 * that can lead to unnecessarily logging an inode during rename and link3348	 * operations, and then further updating the log in followup rename and3349	 * link operations, specially if it's a directory, which adds latency3350	 * visible to applications doing a series of rename or link operations.3351	 *3352	 * A logged_trans of 0 here can mean several things:3353	 *3354	 * 1) The inode was never logged since the filesystem was mounted, and may3355	 *    or may have not been evicted and loaded again;3356	 *3357	 * 2) The inode was logged in a previous transaction, then evicted and3358	 *    then loaded again;3359	 *3360	 * 3) The inode was logged in the current transaction, then evicted and3361	 *    then loaded again.3362	 *3363	 * For cases 1) and 2) we don't want to return true, but we need to detect3364	 * case 3) and return true. So we do a search in the log root for the inode3365	 * item.3366	 */3367	key.objectid = btrfs_ino(inode);3368	key.type = BTRFS_INODE_ITEM_KEY;3369	key.offset = 0;3370 3371	if (!path) {3372		path = btrfs_alloc_path();3373		if (!path)3374			return -ENOMEM;3375	}3376 3377	ret = btrfs_search_slot(NULL, inode->root->log_root, &key, path, 0, 0);3378 3379	if (path_in)3380		btrfs_release_path(path);3381	else3382		btrfs_free_path(path);3383 3384	/*3385	 * Logging an inode always results in logging its inode item. So if we3386	 * did not find the item we know the inode was not logged for sure.3387	 */3388	if (ret < 0) {3389		return ret;3390	} else if (ret > 0) {3391		/*3392		 * Set logged_trans to a value greater than 0 and less then the3393		 * current transaction to avoid doing the search in future calls.3394		 */3395		inode->logged_trans = trans->transid - 1;3396		return 0;3397	}3398 3399	/*3400	 * The inode was previously logged and then evicted, set logged_trans to3401	 * the current transacion's ID, to avoid future tree searches as long as3402	 * the inode is not evicted again.3403	 */3404	inode->logged_trans = trans->transid;3405 3406	/*3407	 * If it's a directory, then we must set last_dir_index_offset to the3408	 * maximum possible value, so that the next attempt to log the inode does3409	 * not skip checking if dir index keys found in modified subvolume tree3410	 * leaves have been logged before, otherwise it would result in attempts3411	 * to insert duplicate dir index keys in the log tree. This must be done3412	 * because last_dir_index_offset is an in-memory only field, not persisted3413	 * in the inode item or any other on-disk structure, so its value is lost3414	 * once the inode is evicted.3415	 */3416	if (S_ISDIR(inode->vfs_inode.i_mode))3417		inode->last_dir_index_offset = (u64)-1;3418 3419	return 1;3420}3421 3422/*3423 * Delete a directory entry from the log if it exists.3424 *3425 * Returns < 0 on error3426 *           1 if the entry does not exists3427 *           0 if the entry existed and was successfully deleted3428 */3429static int del_logged_dentry(struct btrfs_trans_handle *trans,3430			     struct btrfs_root *log,3431			     struct btrfs_path *path,3432			     u64 dir_ino,3433			     const struct fscrypt_str *name,3434			     u64 index)3435{3436	struct btrfs_dir_item *di;3437 3438	/*3439	 * We only log dir index items of a directory, so we don't need to look3440	 * for dir item keys.3441	 */3442	di = btrfs_lookup_dir_index_item(trans, log, path, dir_ino,3443					 index, name, -1);3444	if (IS_ERR(di))3445		return PTR_ERR(di);3446	else if (!di)3447		return 1;3448 3449	/*3450	 * We do not need to update the size field of the directory's3451	 * inode item because on log replay we update the field to reflect3452	 * all existing entries in the directory (see overwrite_item()).3453	 */3454	return btrfs_delete_one_dir_name(trans, log, path, di);3455}3456 3457/*3458 * If both a file and directory are logged, and unlinks or renames are3459 * mixed in, we have a few interesting corners:3460 *3461 * create file X in dir Y3462 * link file X to X.link in dir Y3463 * fsync file X3464 * unlink file X but leave X.link3465 * fsync dir Y3466 *3467 * After a crash we would expect only X.link to exist.  But file X3468 * didn't get fsync'd again so the log has back refs for X and X.link.3469 *3470 * We solve this by removing directory entries and inode backrefs from the3471 * log when a file that was logged in the current transaction is3472 * unlinked.  Any later fsync will include the updated log entries, and3473 * we'll be able to reconstruct the proper directory items from backrefs.3474 *3475 * This optimizations allows us to avoid relogging the entire inode3476 * or the entire directory.3477 */3478void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,3479				  struct btrfs_root *root,3480				  const struct fscrypt_str *name,3481				  struct btrfs_inode *dir, u64 index)3482{3483	struct btrfs_path *path;3484	int ret;3485 3486	ret = inode_logged(trans, dir, NULL);3487	if (ret == 0)3488		return;3489	else if (ret < 0) {3490		btrfs_set_log_full_commit(trans);3491		return;3492	}3493 3494	ret = join_running_log_trans(root);3495	if (ret)3496		return;3497 3498	mutex_lock(&dir->log_mutex);3499 3500	path = btrfs_alloc_path();3501	if (!path) {3502		ret = -ENOMEM;3503		goto out_unlock;3504	}3505 3506	ret = del_logged_dentry(trans, root->log_root, path, btrfs_ino(dir),3507				name, index);3508	btrfs_free_path(path);3509out_unlock:3510	mutex_unlock(&dir->log_mutex);3511	if (ret < 0)3512		btrfs_set_log_full_commit(trans);3513	btrfs_end_log_trans(root);3514}3515 3516/* see comments for btrfs_del_dir_entries_in_log */3517void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,3518				struct btrfs_root *root,3519				const struct fscrypt_str *name,3520				struct btrfs_inode *inode, u64 dirid)3521{3522	struct btrfs_root *log;3523	u64 index;3524	int ret;3525 3526	ret = inode_logged(trans, inode, NULL);3527	if (ret == 0)3528		return;3529	else if (ret < 0) {3530		btrfs_set_log_full_commit(trans);3531		return;3532	}3533 3534	ret = join_running_log_trans(root);3535	if (ret)3536		return;3537	log = root->log_root;3538	mutex_lock(&inode->log_mutex);3539 3540	ret = btrfs_del_inode_ref(trans, log, name, btrfs_ino(inode),3541				  dirid, &index);3542	mutex_unlock(&inode->log_mutex);3543	if (ret < 0 && ret != -ENOENT)3544		btrfs_set_log_full_commit(trans);3545	btrfs_end_log_trans(root);3546}3547 3548/*3549 * creates a range item in the log for 'dirid'.  first_offset and3550 * last_offset tell us which parts of the key space the log should3551 * be considered authoritative for.3552 */3553static noinline int insert_dir_log_key(struct btrfs_trans_handle *trans,3554				       struct btrfs_root *log,3555				       struct btrfs_path *path,3556				       u64 dirid,3557				       u64 first_offset, u64 last_offset)3558{3559	int ret;3560	struct btrfs_key key;3561	struct btrfs_dir_log_item *item;3562 3563	key.objectid = dirid;3564	key.offset = first_offset;3565	key.type = BTRFS_DIR_LOG_INDEX_KEY;3566	ret = btrfs_insert_empty_item(trans, log, path, &key, sizeof(*item));3567	/*3568	 * -EEXIST is fine and can happen sporadically when we are logging a3569	 * directory and have concurrent insertions in the subvolume's tree for3570	 * items from other inodes and that result in pushing off some dir items3571	 * from one leaf to another in order to accommodate for the new items.3572	 * This results in logging the same dir index range key.3573	 */3574	if (ret && ret != -EEXIST)3575		return ret;3576 3577	item = btrfs_item_ptr(path->nodes[0], path->slots[0],3578			      struct btrfs_dir_log_item);3579	if (ret == -EEXIST) {3580		const u64 curr_end = btrfs_dir_log_end(path->nodes[0], item);3581 3582		/*3583		 * btrfs_del_dir_entries_in_log() might have been called during3584		 * an unlink between the initial insertion of this key and the3585		 * current update, or we might be logging a single entry deletion3586		 * during a rename, so set the new last_offset to the max value.3587		 */3588		last_offset = max(last_offset, curr_end);3589	}3590	btrfs_set_dir_log_end(path->nodes[0], item, last_offset);3591	btrfs_mark_buffer_dirty(trans, path->nodes[0]);3592	btrfs_release_path(path);3593	return 0;3594}3595 3596static int flush_dir_items_batch(struct btrfs_trans_handle *trans,3597				 struct btrfs_inode *inode,3598				 struct extent_buffer *src,3599				 struct btrfs_path *dst_path,3600				 int start_slot,3601				 int count)3602{3603	struct btrfs_root *log = inode->root->log_root;3604	char *ins_data = NULL;3605	struct btrfs_item_batch batch;3606	struct extent_buffer *dst;3607	unsigned long src_offset;3608	unsigned long dst_offset;3609	u64 last_index;3610	struct btrfs_key key;3611	u32 item_size;3612	int ret;3613	int i;3614 3615	ASSERT(count > 0);3616	batch.nr = count;3617 3618	if (count == 1) {3619		btrfs_item_key_to_cpu(src, &key, start_slot);3620		item_size = btrfs_item_size(src, start_slot);3621		batch.keys = &key;3622		batch.data_sizes = &item_size;3623		batch.total_data_size = item_size;3624	} else {3625		struct btrfs_key *ins_keys;3626		u32 *ins_sizes;3627 3628		ins_data = kmalloc(count * sizeof(u32) +3629				   count * sizeof(struct btrfs_key), GFP_NOFS);3630		if (!ins_data)3631			return -ENOMEM;3632 3633		ins_sizes = (u32 *)ins_data;3634		ins_keys = (struct btrfs_key *)(ins_data + count * sizeof(u32));3635		batch.keys = ins_keys;3636		batch.data_sizes = ins_sizes;3637		batch.total_data_size = 0;3638 3639		for (i = 0; i < count; i++) {3640			const int slot = start_slot + i;3641 3642			btrfs_item_key_to_cpu(src, &ins_keys[i], slot);3643			ins_sizes[i] = btrfs_item_size(src, slot);3644			batch.total_data_size += ins_sizes[i];3645		}3646	}3647 3648	ret = btrfs_insert_empty_items(trans, log, dst_path, &batch);3649	if (ret)3650		goto out;3651 3652	dst = dst_path->nodes[0];3653	/*3654	 * Copy all the items in bulk, in a single copy operation. Item data is3655	 * organized such that it's placed at the end of a leaf and from right3656	 * to left. For example, the data for the second item ends at an offset3657	 * that matches the offset where the data for the first item starts, the3658	 * data for the third item ends at an offset that matches the offset3659	 * where the data of the second items starts, and so on.3660	 * Therefore our source and destination start offsets for copy match the3661	 * offsets of the last items (highest slots).3662	 */3663	dst_offset = btrfs_item_ptr_offset(dst, dst_path->slots[0] + count - 1);3664	src_offset = btrfs_item_ptr_offset(src, start_slot + count - 1);3665	copy_extent_buffer(dst, src, dst_offset, src_offset, batch.total_data_size);3666	btrfs_release_path(dst_path);3667 3668	last_index = batch.keys[count - 1].offset;3669	ASSERT(last_index > inode->last_dir_index_offset);3670 3671	/*3672	 * If for some unexpected reason the last item's index is not greater3673	 * than the last index we logged, warn and force a transaction commit.3674	 */3675	if (WARN_ON(last_index <= inode->last_dir_index_offset))3676		ret = BTRFS_LOG_FORCE_COMMIT;3677	else3678		inode->last_dir_index_offset = last_index;3679 3680	if (btrfs_get_first_dir_index_to_log(inode) == 0)3681		btrfs_set_first_dir_index_to_log(inode, batch.keys[0].offset);3682out:3683	kfree(ins_data);3684 3685	return ret;3686}3687 3688static int clone_leaf(struct btrfs_path *path, struct btrfs_log_ctx *ctx)3689{3690	const int slot = path->slots[0];3691 3692	if (ctx->scratch_eb) {3693		copy_extent_buffer_full(ctx->scratch_eb, path->nodes[0]);3694	} else {3695		ctx->scratch_eb = btrfs_clone_extent_buffer(path->nodes[0]);3696		if (!ctx->scratch_eb)3697			return -ENOMEM;3698	}3699 3700	btrfs_release_path(path);3701	path->nodes[0] = ctx->scratch_eb;3702	path->slots[0] = slot;3703	/*3704	 * Add extra ref to scratch eb so that it is not freed when callers3705	 * release the path, so we can reuse it later if needed.3706	 */3707	atomic_inc(&ctx->scratch_eb->refs);3708 3709	return 0;3710}3711 3712static int process_dir_items_leaf(struct btrfs_trans_handle *trans,3713				  struct btrfs_inode *inode,3714				  struct btrfs_path *path,3715				  struct btrfs_path *dst_path,3716				  struct btrfs_log_ctx *ctx,3717				  u64 *last_old_dentry_offset)3718{3719	struct btrfs_root *log = inode->root->log_root;3720	struct extent_buffer *src;3721	const int nritems = btrfs_header_nritems(path->nodes[0]);3722	const u64 ino = btrfs_ino(inode);3723	bool last_found = false;3724	int batch_start = 0;3725	int batch_size = 0;3726	int ret;3727 3728	/*3729	 * We need to clone the leaf, release the read lock on it, and use the3730	 * clone before modifying the log tree. See the comment at copy_items()3731	 * about why we need to do this.3732	 */3733	ret = clone_leaf(path, ctx);3734	if (ret < 0)3735		return ret;3736 3737	src = path->nodes[0];3738 3739	for (int i = path->slots[0]; i < nritems; i++) {3740		struct btrfs_dir_item *di;3741		struct btrfs_key key;3742		int ret;3743 3744		btrfs_item_key_to_cpu(src, &key, i);3745 3746		if (key.objectid != ino || key.type != BTRFS_DIR_INDEX_KEY) {3747			last_found = true;3748			break;3749		}3750 3751		di = btrfs_item_ptr(src, i, struct btrfs_dir_item);3752 3753		/*3754		 * Skip ranges of items that consist only of dir item keys created3755		 * in past transactions. However if we find a gap, we must log a3756		 * dir index range item for that gap, so that index keys in that3757		 * gap are deleted during log replay.3758		 */3759		if (btrfs_dir_transid(src, di) < trans->transid) {3760			if (key.offset > *last_old_dentry_offset + 1) {3761				ret = insert_dir_log_key(trans, log, dst_path,3762						 ino, *last_old_dentry_offset + 1,3763						 key.offset - 1);3764				if (ret < 0)3765					return ret;3766			}3767 3768			*last_old_dentry_offset = key.offset;3769			continue;3770		}3771 3772		/* If we logged this dir index item before, we can skip it. */3773		if (key.offset <= inode->last_dir_index_offset)3774			continue;3775 3776		/*3777		 * We must make sure that when we log a directory entry, the3778		 * corresponding inode, after log replay, has a matching link3779		 * count. For example:3780		 *3781		 * touch foo3782		 * mkdir mydir3783		 * sync3784		 * ln foo mydir/bar3785		 * xfs_io -c "fsync" mydir3786		 * <crash>3787		 * <mount fs and log replay>3788		 *3789		 * Would result in a fsync log that when replayed, our file inode3790		 * would have a link count of 1, but we get two directory entries3791		 * pointing to the same inode. After removing one of the names,3792		 * it would not be possible to remove the other name, which3793		 * resulted always in stale file handle errors, and would not be3794		 * possible to rmdir the parent directory, since its i_size could3795		 * never be decremented to the value BTRFS_EMPTY_DIR_SIZE,3796		 * resulting in -ENOTEMPTY errors.3797		 */3798		if (!ctx->log_new_dentries) {3799			struct btrfs_key di_key;3800 3801			btrfs_dir_item_key_to_cpu(src, di, &di_key);3802			if (di_key.type != BTRFS_ROOT_ITEM_KEY)3803				ctx->log_new_dentries = true;3804		}3805 3806		if (batch_size == 0)3807			batch_start = i;3808		batch_size++;3809	}3810 3811	if (batch_size > 0) {3812		int ret;3813 3814		ret = flush_dir_items_batch(trans, inode, src, dst_path,3815					    batch_start, batch_size);3816		if (ret < 0)3817			return ret;3818	}3819 3820	return last_found ? 1 : 0;3821}3822 3823/*3824 * log all the items included in the current transaction for a given3825 * directory.  This also creates the range items in the log tree required3826 * to replay anything deleted before the fsync3827 */3828static noinline int log_dir_items(struct btrfs_trans_handle *trans,3829			  struct btrfs_inode *inode,3830			  struct btrfs_path *path,3831			  struct btrfs_path *dst_path,3832			  struct btrfs_log_ctx *ctx,3833			  u64 min_offset, u64 *last_offset_ret)3834{3835	struct btrfs_key min_key;3836	struct btrfs_root *root = inode->root;3837	struct btrfs_root *log = root->log_root;3838	int ret;3839	u64 last_old_dentry_offset = min_offset - 1;3840	u64 last_offset = (u64)-1;3841	u64 ino = btrfs_ino(inode);3842 3843	min_key.objectid = ino;3844	min_key.type = BTRFS_DIR_INDEX_KEY;3845	min_key.offset = min_offset;3846 3847	ret = btrfs_search_forward(root, &min_key, path, trans->transid);3848 3849	/*3850	 * we didn't find anything from this transaction, see if there3851	 * is anything at all3852	 */3853	if (ret != 0 || min_key.objectid != ino ||3854	    min_key.type != BTRFS_DIR_INDEX_KEY) {3855		min_key.objectid = ino;3856		min_key.type = BTRFS_DIR_INDEX_KEY;3857		min_key.offset = (u64)-1;3858		btrfs_release_path(path);3859		ret = btrfs_search_slot(NULL, root, &min_key, path, 0, 0);3860		if (ret < 0) {3861			btrfs_release_path(path);3862			return ret;3863		}3864		ret = btrfs_previous_item(root, path, ino, BTRFS_DIR_INDEX_KEY);3865 3866		/* if ret == 0 there are items for this type,3867		 * create a range to tell us the last key of this type.3868		 * otherwise, there are no items in this directory after3869		 * *min_offset, and we create a range to indicate that.3870		 */3871		if (ret == 0) {3872			struct btrfs_key tmp;3873 3874			btrfs_item_key_to_cpu(path->nodes[0], &tmp,3875					      path->slots[0]);3876			if (tmp.type == BTRFS_DIR_INDEX_KEY)3877				last_old_dentry_offset = tmp.offset;3878		} else if (ret > 0) {3879			ret = 0;3880		}3881 3882		goto done;3883	}3884 3885	/* go backward to find any previous key */3886	ret = btrfs_previous_item(root, path, ino, BTRFS_DIR_INDEX_KEY);3887	if (ret == 0) {3888		struct btrfs_key tmp;3889 3890		btrfs_item_key_to_cpu(path->nodes[0], &tmp, path->slots[0]);3891		/*3892		 * The dir index key before the first one we found that needs to3893		 * be logged might be in a previous leaf, and there might be a3894		 * gap between these keys, meaning that we had deletions that3895		 * happened. So the key range item we log (key type3896		 * BTRFS_DIR_LOG_INDEX_KEY) must cover a range that starts at the3897		 * previous key's offset plus 1, so that those deletes are replayed.3898		 */3899		if (tmp.type == BTRFS_DIR_INDEX_KEY)3900			last_old_dentry_offset = tmp.offset;3901	} else if (ret < 0) {3902		goto done;3903	}3904 3905	btrfs_release_path(path);3906 3907	/*3908	 * Find the first key from this transaction again or the one we were at3909	 * in the loop below in case we had to reschedule. We may be logging the3910	 * directory without holding its VFS lock, which happen when logging new3911	 * dentries (through log_new_dir_dentries()) or in some cases when we3912	 * need to log the parent directory of an inode. This means a dir index3913	 * key might be deleted from the inode's root, and therefore we may not3914	 * find it anymore. If we can't find it, just move to the next key. We3915	 * can not bail out and ignore, because if we do that we will simply3916	 * not log dir index keys that come after the one that was just deleted3917	 * and we can end up logging a dir index range that ends at (u64)-13918	 * (@last_offset is initialized to that), resulting in removing dir3919	 * entries we should not remove at log replay time.3920	 */3921search:3922	ret = btrfs_search_slot(NULL, root, &min_key, path, 0, 0);3923	if (ret > 0) {3924		ret = btrfs_next_item(root, path);3925		if (ret > 0) {3926			/* There are no more keys in the inode's root. */3927			ret = 0;3928			goto done;3929		}3930	}3931	if (ret < 0)3932		goto done;3933 3934	/*3935	 * we have a block from this transaction, log every item in it3936	 * from our directory3937	 */3938	while (1) {3939		ret = process_dir_items_leaf(trans, inode, path, dst_path, ctx,3940					     &last_old_dentry_offset);3941		if (ret != 0) {3942			if (ret > 0)3943				ret = 0;3944			goto done;3945		}3946		path->slots[0] = btrfs_header_nritems(path->nodes[0]);3947 3948		/*3949		 * look ahead to the next item and see if it is also3950		 * from this directory and from this transaction3951		 */3952		ret = btrfs_next_leaf(root, path);3953		if (ret) {3954			if (ret == 1) {3955				last_offset = (u64)-1;3956				ret = 0;3957			}3958			goto done;3959		}3960		btrfs_item_key_to_cpu(path->nodes[0], &min_key, path->slots[0]);3961		if (min_key.objectid != ino || min_key.type != BTRFS_DIR_INDEX_KEY) {3962			last_offset = (u64)-1;3963			goto done;3964		}3965		if (btrfs_header_generation(path->nodes[0]) != trans->transid) {3966			/*3967			 * The next leaf was not changed in the current transaction3968			 * and has at least one dir index key.3969			 * We check for the next key because there might have been3970			 * one or more deletions between the last key we logged and3971			 * that next key. So the key range item we log (key type3972			 * BTRFS_DIR_LOG_INDEX_KEY) must end at the next key's3973			 * offset minus 1, so that those deletes are replayed.3974			 */3975			last_offset = min_key.offset - 1;3976			goto done;3977		}3978		if (need_resched()) {3979			btrfs_release_path(path);3980			cond_resched();3981			goto search;3982		}3983	}3984done:3985	btrfs_release_path(path);3986	btrfs_release_path(dst_path);3987 3988	if (ret == 0) {3989		*last_offset_ret = last_offset;3990		/*3991		 * In case the leaf was changed in the current transaction but3992		 * all its dir items are from a past transaction, the last item3993		 * in the leaf is a dir item and there's no gap between that last3994		 * dir item and the first one on the next leaf (which did not3995		 * change in the current transaction), then we don't need to log3996		 * a range, last_old_dentry_offset is == to last_offset.3997		 */3998		ASSERT(last_old_dentry_offset <= last_offset);3999		if (last_old_dentry_offset < last_offset)4000			ret = insert_dir_log_key(trans, log, path, ino,4001						 last_old_dentry_offset + 1,4002						 last_offset);4003	}4004 4005	return ret;4006}4007 4008/*4009 * If the inode was logged before and it was evicted, then its4010 * last_dir_index_offset is (u64)-1, so we don't the value of the last index4011 * key offset. If that's the case, search for it and update the inode. This4012 * is to avoid lookups in the log tree every time we try to insert a dir index4013 * key from a leaf changed in the current transaction, and to allow us to always4014 * do batch insertions of dir index keys.4015 */4016static int update_last_dir_index_offset(struct btrfs_inode *inode,4017					struct btrfs_path *path,4018					const struct btrfs_log_ctx *ctx)4019{4020	const u64 ino = btrfs_ino(inode);4021	struct btrfs_key key;4022	int ret;4023 4024	lockdep_assert_held(&inode->log_mutex);4025 4026	if (inode->last_dir_index_offset != (u64)-1)4027		return 0;4028 4029	if (!ctx->logged_before) {4030		inode->last_dir_index_offset = BTRFS_DIR_START_INDEX - 1;4031		return 0;4032	}4033 4034	key.objectid = ino;4035	key.type = BTRFS_DIR_INDEX_KEY;4036	key.offset = (u64)-1;4037 4038	ret = btrfs_search_slot(NULL, inode->root->log_root, &key, path, 0, 0);4039	/*4040	 * An error happened or we actually have an index key with an offset4041	 * value of (u64)-1. Bail out, we're done.4042	 */4043	if (ret <= 0)4044		goto out;4045 4046	ret = 0;4047	inode->last_dir_index_offset = BTRFS_DIR_START_INDEX - 1;4048 4049	/*4050	 * No dir index items, bail out and leave last_dir_index_offset with4051	 * the value right before the first valid index value.4052	 */4053	if (path->slots[0] == 0)4054		goto out;4055 4056	/*4057	 * btrfs_search_slot() left us at one slot beyond the slot with the last4058	 * index key, or beyond the last key of the directory that is not an4059	 * index key. If we have an index key before, set last_dir_index_offset4060	 * to its offset value, otherwise leave it with a value right before the4061	 * first valid index value, as it means we have an empty directory.4062	 */4063	btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0] - 1);4064	if (key.objectid == ino && key.type == BTRFS_DIR_INDEX_KEY)4065		inode->last_dir_index_offset = key.offset;4066 4067out:4068	btrfs_release_path(path);4069 4070	return ret;4071}4072 4073/*4074 * logging directories is very similar to logging inodes, We find all the items4075 * from the current transaction and write them to the log.4076 *4077 * The recovery code scans the directory in the subvolume, and if it finds a4078 * key in the range logged that is not present in the log tree, then it means4079 * that dir entry was unlinked during the transaction.4080 *4081 * In order for that scan to work, we must include one key smaller than4082 * the smallest logged by this transaction and one key larger than the largest4083 * key logged by this transaction.4084 */4085static noinline int log_directory_changes(struct btrfs_trans_handle *trans,4086			  struct btrfs_inode *inode,4087			  struct btrfs_path *path,4088			  struct btrfs_path *dst_path,4089			  struct btrfs_log_ctx *ctx)4090{4091	u64 min_key;4092	u64 max_key;4093	int ret;4094 4095	ret = update_last_dir_index_offset(inode, path, ctx);4096	if (ret)4097		return ret;4098 4099	min_key = BTRFS_DIR_START_INDEX;4100	max_key = 0;4101 4102	while (1) {4103		ret = log_dir_items(trans, inode, path, dst_path,4104				ctx, min_key, &max_key);4105		if (ret)4106			return ret;4107		if (max_key == (u64)-1)4108			break;4109		min_key = max_key + 1;4110	}4111 4112	return 0;4113}4114 4115/*4116 * a helper function to drop items from the log before we relog an4117 * inode.  max_key_type indicates the highest item type to remove.4118 * This cannot be run for file data extents because it does not4119 * free the extents they point to.4120 */4121static int drop_inode_items(struct btrfs_trans_handle *trans,4122				  struct btrfs_root *log,4123				  struct btrfs_path *path,4124				  struct btrfs_inode *inode,4125				  int max_key_type)4126{4127	int ret;4128	struct btrfs_key key;4129	struct btrfs_key found_key;4130	int start_slot;4131 4132	key.objectid = btrfs_ino(inode);4133	key.type = max_key_type;4134	key.offset = (u64)-1;4135 4136	while (1) {4137		ret = btrfs_search_slot(trans, log, &key, path, -1, 1);4138		if (ret < 0) {4139			break;4140		} else if (ret > 0) {4141			if (path->slots[0] == 0)4142				break;4143			path->slots[0]--;4144		}4145 4146		btrfs_item_key_to_cpu(path->nodes[0], &found_key,4147				      path->slots[0]);4148 4149		if (found_key.objectid != key.objectid)4150			break;4151 4152		found_key.offset = 0;4153		found_key.type = 0;4154		ret = btrfs_bin_search(path->nodes[0], 0, &found_key, &start_slot);4155		if (ret < 0)4156			break;4157 4158		ret = btrfs_del_items(trans, log, path, start_slot,4159				      path->slots[0] - start_slot + 1);4160		/*4161		 * If start slot isn't 0 then we don't need to re-search, we've4162		 * found the last guy with the objectid in this tree.4163		 */4164		if (ret || start_slot != 0)4165			break;4166		btrfs_release_path(path);4167	}4168	btrfs_release_path(path);4169	if (ret > 0)4170		ret = 0;4171	return ret;4172}4173 4174static int truncate_inode_items(struct btrfs_trans_handle *trans,4175				struct btrfs_root *log_root,4176				struct btrfs_inode *inode,4177				u64 new_size, u32 min_type)4178{4179	struct btrfs_truncate_control control = {4180		.new_size = new_size,4181		.ino = btrfs_ino(inode),4182		.min_type = min_type,4183		.skip_ref_updates = true,4184	};4185 4186	return btrfs_truncate_inode_items(trans, log_root, &control);4187}4188 4189static void fill_inode_item(struct btrfs_trans_handle *trans,4190			    struct extent_buffer *leaf,4191			    struct btrfs_inode_item *item,4192			    struct inode *inode, int log_inode_only,4193			    u64 logged_isize)4194{4195	struct btrfs_map_token token;4196	u64 flags;4197 4198	btrfs_init_map_token(&token, leaf);4199 4200	if (log_inode_only) {4201		/* set the generation to zero so the recover code4202		 * can tell the difference between an logging4203		 * just to say 'this inode exists' and a logging4204		 * to say 'update this inode with these values'4205		 */4206		btrfs_set_token_inode_generation(&token, item, 0);4207		btrfs_set_token_inode_size(&token, item, logged_isize);4208	} else {4209		btrfs_set_token_inode_generation(&token, item,4210						 BTRFS_I(inode)->generation);4211		btrfs_set_token_inode_size(&token, item, inode->i_size);4212	}4213 4214	btrfs_set_token_inode_uid(&token, item, i_uid_read(inode));4215	btrfs_set_token_inode_gid(&token, item, i_gid_read(inode));4216	btrfs_set_token_inode_mode(&token, item, inode->i_mode);4217	btrfs_set_token_inode_nlink(&token, item, inode->i_nlink);4218 4219	btrfs_set_token_timespec_sec(&token, &item->atime,4220				     inode_get_atime_sec(inode));4221	btrfs_set_token_timespec_nsec(&token, &item->atime,4222				      inode_get_atime_nsec(inode));4223 4224	btrfs_set_token_timespec_sec(&token, &item->mtime,4225				     inode_get_mtime_sec(inode));4226	btrfs_set_token_timespec_nsec(&token, &item->mtime,4227				      inode_get_mtime_nsec(inode));4228 4229	btrfs_set_token_timespec_sec(&token, &item->ctime,4230				     inode_get_ctime_sec(inode));4231	btrfs_set_token_timespec_nsec(&token, &item->ctime,4232				      inode_get_ctime_nsec(inode));4233 4234	/*4235	 * We do not need to set the nbytes field, in fact during a fast fsync4236	 * its value may not even be correct, since a fast fsync does not wait4237	 * for ordered extent completion, which is where we update nbytes, it4238	 * only waits for writeback to complete. During log replay as we find4239	 * file extent items and replay them, we adjust the nbytes field of the4240	 * inode item in subvolume tree as needed (see overwrite_item()).4241	 */4242 4243	btrfs_set_token_inode_sequence(&token, item, inode_peek_iversion(inode));4244	btrfs_set_token_inode_transid(&token, item, trans->transid);4245	btrfs_set_token_inode_rdev(&token, item, inode->i_rdev);4246	flags = btrfs_inode_combine_flags(BTRFS_I(inode)->flags,4247					  BTRFS_I(inode)->ro_flags);4248	btrfs_set_token_inode_flags(&token, item, flags);4249	btrfs_set_token_inode_block_group(&token, item, 0);4250}4251 4252static int log_inode_item(struct btrfs_trans_handle *trans,4253			  struct btrfs_root *log, struct btrfs_path *path,4254			  struct btrfs_inode *inode, bool inode_item_dropped)4255{4256	struct btrfs_inode_item *inode_item;4257	struct btrfs_key key;4258	int ret;4259 4260	btrfs_get_inode_key(inode, &key);4261	/*4262	 * If we are doing a fast fsync and the inode was logged before in the4263	 * current transaction, then we know the inode was previously logged and4264	 * it exists in the log tree. For performance reasons, in this case use4265	 * btrfs_search_slot() directly with ins_len set to 0 so that we never4266	 * attempt a write lock on the leaf's parent, which adds unnecessary lock4267	 * contention in case there are concurrent fsyncs for other inodes of the4268	 * same subvolume. Using btrfs_insert_empty_item() when the inode item4269	 * already exists can also result in unnecessarily splitting a leaf.4270	 */4271	if (!inode_item_dropped && inode->logged_trans == trans->transid) {4272		ret = btrfs_search_slot(trans, log, &key, path, 0, 1);4273		ASSERT(ret <= 0);4274		if (ret > 0)4275			ret = -ENOENT;4276	} else {4277		/*4278		 * This means it is the first fsync in the current transaction,4279		 * so the inode item is not in the log and we need to insert it.4280		 * We can never get -EEXIST because we are only called for a fast4281		 * fsync and in case an inode eviction happens after the inode was4282		 * logged before in the current transaction, when we load again4283		 * the inode, we set BTRFS_INODE_NEEDS_FULL_SYNC on its runtime4284		 * flags and set ->logged_trans to 0.4285		 */4286		ret = btrfs_insert_empty_item(trans, log, path, &key,4287					      sizeof(*inode_item));4288		ASSERT(ret != -EEXIST);4289	}4290	if (ret)4291		return ret;4292	inode_item = btrfs_item_ptr(path->nodes[0], path->slots[0],4293				    struct btrfs_inode_item);4294	fill_inode_item(trans, path->nodes[0], inode_item, &inode->vfs_inode,4295			0, 0);4296	btrfs_release_path(path);4297	return 0;4298}4299 4300static int log_csums(struct btrfs_trans_handle *trans,4301		     struct btrfs_inode *inode,4302		     struct btrfs_root *log_root,4303		     struct btrfs_ordered_sum *sums)4304{4305	const u64 lock_end = sums->logical + sums->len - 1;4306	struct extent_state *cached_state = NULL;4307	int ret;4308 4309	/*4310	 * If this inode was not used for reflink operations in the current4311	 * transaction with new extents, then do the fast path, no need to4312	 * worry about logging checksum items with overlapping ranges.4313	 */4314	if (inode->last_reflink_trans < trans->transid)4315		return btrfs_csum_file_blocks(trans, log_root, sums);4316 4317	/*4318	 * Serialize logging for checksums. This is to avoid racing with the4319	 * same checksum being logged by another task that is logging another4320	 * file which happens to refer to the same extent as well. Such races4321	 * can leave checksum items in the log with overlapping ranges.4322	 */4323	ret = lock_extent(&log_root->log_csum_range, sums->logical, lock_end,4324			  &cached_state);4325	if (ret)4326		return ret;4327	/*4328	 * Due to extent cloning, we might have logged a csum item that covers a4329	 * subrange of a cloned extent, and later we can end up logging a csum4330	 * item for a larger subrange of the same extent or the entire range.4331	 * This would leave csum items in the log tree that cover the same range4332	 * and break the searches for checksums in the log tree, resulting in4333	 * some checksums missing in the fs/subvolume tree. So just delete (or4334	 * trim and adjust) any existing csum items in the log for this range.4335	 */4336	ret = btrfs_del_csums(trans, log_root, sums->logical, sums->len);4337	if (!ret)4338		ret = btrfs_csum_file_blocks(trans, log_root, sums);4339 4340	unlock_extent(&log_root->log_csum_range, sums->logical, lock_end,4341		      &cached_state);4342 4343	return ret;4344}4345 4346static noinline int copy_items(struct btrfs_trans_handle *trans,4347			       struct btrfs_inode *inode,4348			       struct btrfs_path *dst_path,4349			       struct btrfs_path *src_path,4350			       int start_slot, int nr, int inode_only,4351			       u64 logged_isize, struct btrfs_log_ctx *ctx)4352{4353	struct btrfs_root *log = inode->root->log_root;4354	struct btrfs_file_extent_item *extent;4355	struct extent_buffer *src;4356	int ret;4357	struct btrfs_key *ins_keys;4358	u32 *ins_sizes;4359	struct btrfs_item_batch batch;4360	char *ins_data;4361	int dst_index;4362	const bool skip_csum = (inode->flags & BTRFS_INODE_NODATASUM);4363	const u64 i_size = i_size_read(&inode->vfs_inode);4364 4365	/*4366	 * To keep lockdep happy and avoid deadlocks, clone the source leaf and4367	 * use the clone. This is because otherwise we would be changing the log4368	 * tree, to insert items from the subvolume tree or insert csum items,4369	 * while holding a read lock on a leaf from the subvolume tree, which4370	 * creates a nasty lock dependency when COWing log tree nodes/leaves:4371	 *4372	 * 1) Modifying the log tree triggers an extent buffer allocation while4373	 *    holding a write lock on a parent extent buffer from the log tree.4374	 *    Allocating the pages for an extent buffer, or the extent buffer4375	 *    struct, can trigger inode eviction and finally the inode eviction4376	 *    will trigger a release/remove of a delayed node, which requires4377	 *    taking the delayed node's mutex;4378	 *4379	 * 2) Allocating a metadata extent for a log tree can trigger the async4380	 *    reclaim thread and make us wait for it to release enough space and4381	 *    unblock our reservation ticket. The reclaim thread can start4382	 *    flushing delayed items, and that in turn results in the need to4383	 *    lock delayed node mutexes and in the need to write lock extent4384	 *    buffers of a subvolume tree - all this while holding a write lock4385	 *    on the parent extent buffer in the log tree.4386	 *4387	 * So one task in scenario 1) running in parallel with another task in4388	 * scenario 2) could lead to a deadlock, one wanting to lock a delayed4389	 * node mutex while having a read lock on a leaf from the subvolume,4390	 * while the other is holding the delayed node's mutex and wants to4391	 * write lock the same subvolume leaf for flushing delayed items.4392	 */4393	ret = clone_leaf(src_path, ctx);4394	if (ret < 0)4395		return ret;4396 4397	src = src_path->nodes[0];4398 4399	ins_data = kmalloc(nr * sizeof(struct btrfs_key) +4400			   nr * sizeof(u32), GFP_NOFS);4401	if (!ins_data)4402		return -ENOMEM;4403 4404	ins_sizes = (u32 *)ins_data;4405	ins_keys = (struct btrfs_key *)(ins_data + nr * sizeof(u32));4406	batch.keys = ins_keys;4407	batch.data_sizes = ins_sizes;4408	batch.total_data_size = 0;4409	batch.nr = 0;4410 4411	dst_index = 0;4412	for (int i = 0; i < nr; i++) {4413		const int src_slot = start_slot + i;4414		struct btrfs_root *csum_root;4415		struct btrfs_ordered_sum *sums;4416		struct btrfs_ordered_sum *sums_next;4417		LIST_HEAD(ordered_sums);4418		u64 disk_bytenr;4419		u64 disk_num_bytes;4420		u64 extent_offset;4421		u64 extent_num_bytes;4422		bool is_old_extent;4423 4424		btrfs_item_key_to_cpu(src, &ins_keys[dst_index], src_slot);4425 4426		if (ins_keys[dst_index].type != BTRFS_EXTENT_DATA_KEY)4427			goto add_to_batch;4428 4429		extent = btrfs_item_ptr(src, src_slot,4430					struct btrfs_file_extent_item);4431 4432		is_old_extent = (btrfs_file_extent_generation(src, extent) <4433				 trans->transid);4434 4435		/*4436		 * Don't copy extents from past generations. That would make us4437		 * log a lot more metadata for common cases like doing only a4438		 * few random writes into a file and then fsync it for the first4439		 * time or after the full sync flag is set on the inode. We can4440		 * get leaves full of extent items, most of which are from past4441		 * generations, so we can skip them - as long as the inode has4442		 * not been the target of a reflink operation in this transaction,4443		 * as in that case it might have had file extent items with old4444		 * generations copied into it. We also must always log prealloc4445		 * extents that start at or beyond eof, otherwise we would lose4446		 * them on log replay.4447		 */4448		if (is_old_extent &&4449		    ins_keys[dst_index].offset < i_size &&4450		    inode->last_reflink_trans < trans->transid)4451			continue;4452 4453		if (skip_csum)4454			goto add_to_batch;4455 4456		/* Only regular extents have checksums. */4457		if (btrfs_file_extent_type(src, extent) != BTRFS_FILE_EXTENT_REG)4458			goto add_to_batch;4459 4460		/*4461		 * If it's an extent created in a past transaction, then its4462		 * checksums are already accessible from the committed csum tree,4463		 * no need to log them.4464		 */4465		if (is_old_extent)4466			goto add_to_batch;4467 4468		disk_bytenr = btrfs_file_extent_disk_bytenr(src, extent);4469		/* If it's an explicit hole, there are no checksums. */4470		if (disk_bytenr == 0)4471			goto add_to_batch;4472 4473		disk_num_bytes = btrfs_file_extent_disk_num_bytes(src, extent);4474 4475		if (btrfs_file_extent_compression(src, extent)) {4476			extent_offset = 0;4477			extent_num_bytes = disk_num_bytes;4478		} else {4479			extent_offset = btrfs_file_extent_offset(src, extent);4480			extent_num_bytes = btrfs_file_extent_num_bytes(src, extent);4481		}4482 4483		csum_root = btrfs_csum_root(trans->fs_info, disk_bytenr);4484		disk_bytenr += extent_offset;4485		ret = btrfs_lookup_csums_list(csum_root, disk_bytenr,4486					      disk_bytenr + extent_num_bytes - 1,4487					      &ordered_sums, false);4488		if (ret < 0)4489			goto out;4490		ret = 0;4491 4492		list_for_each_entry_safe(sums, sums_next, &ordered_sums, list) {4493			if (!ret)4494				ret = log_csums(trans, inode, log, sums);4495			list_del(&sums->list);4496			kfree(sums);4497		}4498		if (ret)4499			goto out;4500 4501add_to_batch:4502		ins_sizes[dst_index] = btrfs_item_size(src, src_slot);4503		batch.total_data_size += ins_sizes[dst_index];4504		batch.nr++;4505		dst_index++;4506	}4507 4508	/*4509	 * We have a leaf full of old extent items that don't need to be logged,4510	 * so we don't need to do anything.4511	 */4512	if (batch.nr == 0)4513		goto out;4514 4515	ret = btrfs_insert_empty_items(trans, log, dst_path, &batch);4516	if (ret)4517		goto out;4518 4519	dst_index = 0;4520	for (int i = 0; i < nr; i++) {4521		const int src_slot = start_slot + i;4522		const int dst_slot = dst_path->slots[0] + dst_index;4523		struct btrfs_key key;4524		unsigned long src_offset;4525		unsigned long dst_offset;4526 4527		/*4528		 * We're done, all the remaining items in the source leaf4529		 * correspond to old file extent items.4530		 */4531		if (dst_index >= batch.nr)4532			break;4533 4534		btrfs_item_key_to_cpu(src, &key, src_slot);4535 4536		if (key.type != BTRFS_EXTENT_DATA_KEY)4537			goto copy_item;4538 4539		extent = btrfs_item_ptr(src, src_slot,4540					struct btrfs_file_extent_item);4541 4542		/* See the comment in the previous loop, same logic. */4543		if (btrfs_file_extent_generation(src, extent) < trans->transid &&4544		    key.offset < i_size &&4545		    inode->last_reflink_trans < trans->transid)4546			continue;4547 4548copy_item:4549		dst_offset = btrfs_item_ptr_offset(dst_path->nodes[0], dst_slot);4550		src_offset = btrfs_item_ptr_offset(src, src_slot);4551 4552		if (key.type == BTRFS_INODE_ITEM_KEY) {4553			struct btrfs_inode_item *inode_item;4554 4555			inode_item = btrfs_item_ptr(dst_path->nodes[0], dst_slot,4556						    struct btrfs_inode_item);4557			fill_inode_item(trans, dst_path->nodes[0], inode_item,4558					&inode->vfs_inode,4559					inode_only == LOG_INODE_EXISTS,4560					logged_isize);4561		} else {4562			copy_extent_buffer(dst_path->nodes[0], src, dst_offset,4563					   src_offset, ins_sizes[dst_index]);4564		}4565 4566		dst_index++;4567	}4568 4569	btrfs_mark_buffer_dirty(trans, dst_path->nodes[0]);4570	btrfs_release_path(dst_path);4571out:4572	kfree(ins_data);4573 4574	return ret;4575}4576 4577static int extent_cmp(void *priv, const struct list_head *a,4578		      const struct list_head *b)4579{4580	const struct extent_map *em1, *em2;4581 4582	em1 = list_entry(a, struct extent_map, list);4583	em2 = list_entry(b, struct extent_map, list);4584 4585	if (em1->start < em2->start)4586		return -1;4587	else if (em1->start > em2->start)4588		return 1;4589	return 0;4590}4591 4592static int log_extent_csums(struct btrfs_trans_handle *trans,4593			    struct btrfs_inode *inode,4594			    struct btrfs_root *log_root,4595			    const struct extent_map *em,4596			    struct btrfs_log_ctx *ctx)4597{4598	struct btrfs_ordered_extent *ordered;4599	struct btrfs_root *csum_root;4600	u64 block_start;4601	u64 csum_offset;4602	u64 csum_len;4603	u64 mod_start = em->start;4604	u64 mod_len = em->len;4605	LIST_HEAD(ordered_sums);4606	int ret = 0;4607 4608	if (inode->flags & BTRFS_INODE_NODATASUM ||4609	    (em->flags & EXTENT_FLAG_PREALLOC) ||4610	    em->disk_bytenr == EXTENT_MAP_HOLE)4611		return 0;4612 4613	list_for_each_entry(ordered, &ctx->ordered_extents, log_list) {4614		const u64 ordered_end = ordered->file_offset + ordered->num_bytes;4615		const u64 mod_end = mod_start + mod_len;4616		struct btrfs_ordered_sum *sums;4617 4618		if (mod_len == 0)4619			break;4620 4621		if (ordered_end <= mod_start)4622			continue;4623		if (mod_end <= ordered->file_offset)4624			break;4625 4626		/*4627		 * We are going to copy all the csums on this ordered extent, so4628		 * go ahead and adjust mod_start and mod_len in case this ordered4629		 * extent has already been logged.4630		 */4631		if (ordered->file_offset > mod_start) {4632			if (ordered_end >= mod_end)4633				mod_len = ordered->file_offset - mod_start;4634			/*4635			 * If we have this case4636			 *4637			 * |--------- logged extent ---------|4638			 *       |----- ordered extent ----|4639			 *4640			 * Just don't mess with mod_start and mod_len, we'll4641			 * just end up logging more csums than we need and it4642			 * will be ok.4643			 */4644		} else {4645			if (ordered_end < mod_end) {4646				mod_len = mod_end - ordered_end;4647				mod_start = ordered_end;4648			} else {4649				mod_len = 0;4650			}4651		}4652 4653		/*4654		 * To keep us from looping for the above case of an ordered4655		 * extent that falls inside of the logged extent.4656		 */4657		if (test_and_set_bit(BTRFS_ORDERED_LOGGED_CSUM, &ordered->flags))4658			continue;4659 4660		list_for_each_entry(sums, &ordered->list, list) {4661			ret = log_csums(trans, inode, log_root, sums);4662			if (ret)4663				return ret;4664		}4665	}4666 4667	/* We're done, found all csums in the ordered extents. */4668	if (mod_len == 0)4669		return 0;4670 4671	/* If we're compressed we have to save the entire range of csums. */4672	if (extent_map_is_compressed(em)) {4673		csum_offset = 0;4674		csum_len = em->disk_num_bytes;4675	} else {4676		csum_offset = mod_start - em->start;4677		csum_len = mod_len;4678	}4679 4680	/* block start is already adjusted for the file extent offset. */4681	block_start = extent_map_block_start(em);4682	csum_root = btrfs_csum_root(trans->fs_info, block_start);4683	ret = btrfs_lookup_csums_list(csum_root, block_start + csum_offset,4684				      block_start + csum_offset + csum_len - 1,4685				      &ordered_sums, false);4686	if (ret < 0)4687		return ret;4688	ret = 0;4689 4690	while (!list_empty(&ordered_sums)) {4691		struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next,4692						   struct btrfs_ordered_sum,4693						   list);4694		if (!ret)4695			ret = log_csums(trans, inode, log_root, sums);4696		list_del(&sums->list);4697		kfree(sums);4698	}4699 4700	return ret;4701}4702 4703static int log_one_extent(struct btrfs_trans_handle *trans,4704			  struct btrfs_inode *inode,4705			  const struct extent_map *em,4706			  struct btrfs_path *path,4707			  struct btrfs_log_ctx *ctx)4708{4709	struct btrfs_drop_extents_args drop_args = { 0 };4710	struct btrfs_root *log = inode->root->log_root;4711	struct btrfs_file_extent_item fi = { 0 };4712	struct extent_buffer *leaf;4713	struct btrfs_key key;4714	enum btrfs_compression_type compress_type;4715	u64 extent_offset = em->offset;4716	u64 block_start = extent_map_block_start(em);4717	u64 block_len;4718	int ret;4719 4720	btrfs_set_stack_file_extent_generation(&fi, trans->transid);4721	if (em->flags & EXTENT_FLAG_PREALLOC)4722		btrfs_set_stack_file_extent_type(&fi, BTRFS_FILE_EXTENT_PREALLOC);4723	else4724		btrfs_set_stack_file_extent_type(&fi, BTRFS_FILE_EXTENT_REG);4725 4726	block_len = em->disk_num_bytes;4727	compress_type = extent_map_compression(em);4728	if (compress_type != BTRFS_COMPRESS_NONE) {4729		btrfs_set_stack_file_extent_disk_bytenr(&fi, block_start);4730		btrfs_set_stack_file_extent_disk_num_bytes(&fi, block_len);4731	} else if (em->disk_bytenr < EXTENT_MAP_LAST_BYTE) {4732		btrfs_set_stack_file_extent_disk_bytenr(&fi, block_start - extent_offset);4733		btrfs_set_stack_file_extent_disk_num_bytes(&fi, block_len);4734	}4735 4736	btrfs_set_stack_file_extent_offset(&fi, extent_offset);4737	btrfs_set_stack_file_extent_num_bytes(&fi, em->len);4738	btrfs_set_stack_file_extent_ram_bytes(&fi, em->ram_bytes);4739	btrfs_set_stack_file_extent_compression(&fi, compress_type);4740 4741	ret = log_extent_csums(trans, inode, log, em, ctx);4742	if (ret)4743		return ret;4744 4745	/*4746	 * If this is the first time we are logging the inode in the current4747	 * transaction, we can avoid btrfs_drop_extents(), which is expensive4748	 * because it does a deletion search, which always acquires write locks4749	 * for extent buffers at levels 2, 1 and 0. This not only wastes time4750	 * but also adds significant contention in a log tree, since log trees4751	 * are small, with a root at level 2 or 3 at most, due to their short4752	 * life span.4753	 */4754	if (ctx->logged_before) {4755		drop_args.path = path;4756		drop_args.start = em->start;4757		drop_args.end = em->start + em->len;4758		drop_args.replace_extent = true;4759		drop_args.extent_item_size = sizeof(fi);4760		ret = btrfs_drop_extents(trans, log, inode, &drop_args);4761		if (ret)4762			return ret;4763	}4764 4765	if (!drop_args.extent_inserted) {4766		key.objectid = btrfs_ino(inode);4767		key.type = BTRFS_EXTENT_DATA_KEY;4768		key.offset = em->start;4769 4770		ret = btrfs_insert_empty_item(trans, log, path, &key,4771					      sizeof(fi));4772		if (ret)4773			return ret;4774	}4775	leaf = path->nodes[0];4776	write_extent_buffer(leaf, &fi,4777			    btrfs_item_ptr_offset(leaf, path->slots[0]),4778			    sizeof(fi));4779	btrfs_mark_buffer_dirty(trans, leaf);4780 4781	btrfs_release_path(path);4782 4783	return ret;4784}4785 4786/*4787 * Log all prealloc extents beyond the inode's i_size to make sure we do not4788 * lose them after doing a full/fast fsync and replaying the log. We scan the4789 * subvolume's root instead of iterating the inode's extent map tree because4790 * otherwise we can log incorrect extent items based on extent map conversion.4791 * That can happen due to the fact that extent maps are merged when they4792 * are not in the extent map tree's list of modified extents.4793 */4794static int btrfs_log_prealloc_extents(struct btrfs_trans_handle *trans,4795				      struct btrfs_inode *inode,4796				      struct btrfs_path *path,4797				      struct btrfs_log_ctx *ctx)4798{4799	struct btrfs_root *root = inode->root;4800	struct btrfs_key key;4801	const u64 i_size = i_size_read(&inode->vfs_inode);4802	const u64 ino = btrfs_ino(inode);4803	struct btrfs_path *dst_path = NULL;4804	bool dropped_extents = false;4805	u64 truncate_offset = i_size;4806	struct extent_buffer *leaf;4807	int slot;4808	int ins_nr = 0;4809	int start_slot = 0;4810	int ret;4811 4812	if (!(inode->flags & BTRFS_INODE_PREALLOC))4813		return 0;4814 4815	key.objectid = ino;4816	key.type = BTRFS_EXTENT_DATA_KEY;4817	key.offset = i_size;4818	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);4819	if (ret < 0)4820		goto out;4821 4822	/*4823	 * We must check if there is a prealloc extent that starts before the4824	 * i_size and crosses the i_size boundary. This is to ensure later we4825	 * truncate down to the end of that extent and not to the i_size, as4826	 * otherwise we end up losing part of the prealloc extent after a log4827	 * replay and with an implicit hole if there is another prealloc extent4828	 * that starts at an offset beyond i_size.4829	 */4830	ret = btrfs_previous_item(root, path, ino, BTRFS_EXTENT_DATA_KEY);4831	if (ret < 0)4832		goto out;4833 4834	if (ret == 0) {4835		struct btrfs_file_extent_item *ei;4836 4837		leaf = path->nodes[0];4838		slot = path->slots[0];4839		ei = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);4840 4841		if (btrfs_file_extent_type(leaf, ei) ==4842		    BTRFS_FILE_EXTENT_PREALLOC) {4843			u64 extent_end;4844 4845			btrfs_item_key_to_cpu(leaf, &key, slot);4846			extent_end = key.offset +4847				btrfs_file_extent_num_bytes(leaf, ei);4848 4849			if (extent_end > i_size)4850				truncate_offset = extent_end;4851		}4852	} else {4853		ret = 0;4854	}4855 4856	while (true) {4857		leaf = path->nodes[0];4858		slot = path->slots[0];4859 4860		if (slot >= btrfs_header_nritems(leaf)) {4861			if (ins_nr > 0) {4862				ret = copy_items(trans, inode, dst_path, path,4863						 start_slot, ins_nr, 1, 0, ctx);4864				if (ret < 0)4865					goto out;4866				ins_nr = 0;4867			}4868			ret = btrfs_next_leaf(root, path);4869			if (ret < 0)4870				goto out;4871			if (ret > 0) {4872				ret = 0;4873				break;4874			}4875			continue;4876		}4877 4878		btrfs_item_key_to_cpu(leaf, &key, slot);4879		if (key.objectid > ino)4880			break;4881		if (WARN_ON_ONCE(key.objectid < ino) ||4882		    key.type < BTRFS_EXTENT_DATA_KEY ||4883		    key.offset < i_size) {4884			path->slots[0]++;4885			continue;4886		}4887		/*4888		 * Avoid overlapping items in the log tree. The first time we4889		 * get here, get rid of everything from a past fsync. After4890		 * that, if the current extent starts before the end of the last4891		 * extent we copied, truncate the last one. This can happen if4892		 * an ordered extent completion modifies the subvolume tree4893		 * while btrfs_next_leaf() has the tree unlocked.4894		 */4895		if (!dropped_extents || key.offset < truncate_offset) {4896			ret = truncate_inode_items(trans, root->log_root, inode,4897						   min(key.offset, truncate_offset),4898						   BTRFS_EXTENT_DATA_KEY);4899			if (ret)4900				goto out;4901			dropped_extents = true;4902		}4903		truncate_offset = btrfs_file_extent_end(path);4904		if (ins_nr == 0)4905			start_slot = slot;4906		ins_nr++;4907		path->slots[0]++;4908		if (!dst_path) {4909			dst_path = btrfs_alloc_path();4910			if (!dst_path) {4911				ret = -ENOMEM;4912				goto out;4913			}4914		}4915	}4916	if (ins_nr > 0)4917		ret = copy_items(trans, inode, dst_path, path,4918				 start_slot, ins_nr, 1, 0, ctx);4919out:4920	btrfs_release_path(path);4921	btrfs_free_path(dst_path);4922	return ret;4923}4924 4925static int btrfs_log_changed_extents(struct btrfs_trans_handle *trans,4926				     struct btrfs_inode *inode,4927				     struct btrfs_path *path,4928				     struct btrfs_log_ctx *ctx)4929{4930	struct btrfs_ordered_extent *ordered;4931	struct btrfs_ordered_extent *tmp;4932	struct extent_map *em, *n;4933	LIST_HEAD(extents);4934	struct extent_map_tree *tree = &inode->extent_tree;4935	int ret = 0;4936	int num = 0;4937 4938	write_lock(&tree->lock);4939 4940	list_for_each_entry_safe(em, n, &tree->modified_extents, list) {4941		list_del_init(&em->list);4942		/*4943		 * Just an arbitrary number, this can be really CPU intensive4944		 * once we start getting a lot of extents, and really once we4945		 * have a bunch of extents we just want to commit since it will4946		 * be faster.4947		 */4948		if (++num > 32768) {4949			list_del_init(&tree->modified_extents);4950			ret = -EFBIG;4951			goto process;4952		}4953 4954		if (em->generation < trans->transid)4955			continue;4956 4957		/* We log prealloc extents beyond eof later. */4958		if ((em->flags & EXTENT_FLAG_PREALLOC) &&4959		    em->start >= i_size_read(&inode->vfs_inode))4960			continue;4961 4962		/* Need a ref to keep it from getting evicted from cache */4963		refcount_inc(&em->refs);4964		em->flags |= EXTENT_FLAG_LOGGING;4965		list_add_tail(&em->list, &extents);4966		num++;4967	}4968 4969	list_sort(NULL, &extents, extent_cmp);4970process:4971	while (!list_empty(&extents)) {4972		em = list_entry(extents.next, struct extent_map, list);4973 4974		list_del_init(&em->list);4975 4976		/*4977		 * If we had an error we just need to delete everybody from our4978		 * private list.4979		 */4980		if (ret) {4981			clear_em_logging(inode, em);4982			free_extent_map(em);4983			continue;4984		}4985 4986		write_unlock(&tree->lock);4987 4988		ret = log_one_extent(trans, inode, em, path, ctx);4989		write_lock(&tree->lock);4990		clear_em_logging(inode, em);4991		free_extent_map(em);4992	}4993	WARN_ON(!list_empty(&extents));4994	write_unlock(&tree->lock);4995 4996	if (!ret)4997		ret = btrfs_log_prealloc_extents(trans, inode, path, ctx);4998	if (ret)4999		return ret;5000 5001	/*5002	 * We have logged all extents successfully, now make sure the commit of5003	 * the current transaction waits for the ordered extents to complete5004	 * before it commits and wipes out the log trees, otherwise we would5005	 * lose data if an ordered extents completes after the transaction5006	 * commits and a power failure happens after the transaction commit.5007	 */5008	list_for_each_entry_safe(ordered, tmp, &ctx->ordered_extents, log_list) {5009		list_del_init(&ordered->log_list);5010		set_bit(BTRFS_ORDERED_LOGGED, &ordered->flags);5011 5012		if (!test_bit(BTRFS_ORDERED_COMPLETE, &ordered->flags)) {5013			spin_lock_irq(&inode->ordered_tree_lock);5014			if (!test_bit(BTRFS_ORDERED_COMPLETE, &ordered->flags)) {5015				set_bit(BTRFS_ORDERED_PENDING, &ordered->flags);5016				atomic_inc(&trans->transaction->pending_ordered);5017			}5018			spin_unlock_irq(&inode->ordered_tree_lock);5019		}5020		btrfs_put_ordered_extent(ordered);5021	}5022 5023	return 0;5024}5025 5026static int logged_inode_size(struct btrfs_root *log, struct btrfs_inode *inode,5027			     struct btrfs_path *path, u64 *size_ret)5028{5029	struct btrfs_key key;5030	int ret;5031 5032	key.objectid = btrfs_ino(inode);5033	key.type = BTRFS_INODE_ITEM_KEY;5034	key.offset = 0;5035 5036	ret = btrfs_search_slot(NULL, log, &key, path, 0, 0);5037	if (ret < 0) {5038		return ret;5039	} else if (ret > 0) {5040		*size_ret = 0;5041	} else {5042		struct btrfs_inode_item *item;5043 5044		item = btrfs_item_ptr(path->nodes[0], path->slots[0],5045				      struct btrfs_inode_item);5046		*size_ret = btrfs_inode_size(path->nodes[0], item);5047		/*5048		 * If the in-memory inode's i_size is smaller then the inode5049		 * size stored in the btree, return the inode's i_size, so5050		 * that we get a correct inode size after replaying the log5051		 * when before a power failure we had a shrinking truncate5052		 * followed by addition of a new name (rename / new hard link).5053		 * Otherwise return the inode size from the btree, to avoid5054		 * data loss when replaying a log due to previously doing a5055		 * write that expands the inode's size and logging a new name5056		 * immediately after.5057		 */5058		if (*size_ret > inode->vfs_inode.i_size)5059			*size_ret = inode->vfs_inode.i_size;5060	}5061 5062	btrfs_release_path(path);5063	return 0;5064}5065 5066/*5067 * At the moment we always log all xattrs. This is to figure out at log replay5068 * time which xattrs must have their deletion replayed. If a xattr is missing5069 * in the log tree and exists in the fs/subvol tree, we delete it. This is5070 * because if a xattr is deleted, the inode is fsynced and a power failure5071 * happens, causing the log to be replayed the next time the fs is mounted,5072 * we want the xattr to not exist anymore (same behaviour as other filesystems5073 * with a journal, ext3/4, xfs, f2fs, etc).5074 */5075static int btrfs_log_all_xattrs(struct btrfs_trans_handle *trans,5076				struct btrfs_inode *inode,5077				struct btrfs_path *path,5078				struct btrfs_path *dst_path,5079				struct btrfs_log_ctx *ctx)5080{5081	struct btrfs_root *root = inode->root;5082	int ret;5083	struct btrfs_key key;5084	const u64 ino = btrfs_ino(inode);5085	int ins_nr = 0;5086	int start_slot = 0;5087	bool found_xattrs = false;5088 5089	if (test_bit(BTRFS_INODE_NO_XATTRS, &inode->runtime_flags))5090		return 0;5091 5092	key.objectid = ino;5093	key.type = BTRFS_XATTR_ITEM_KEY;5094	key.offset = 0;5095 5096	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);5097	if (ret < 0)5098		return ret;5099 5100	while (true) {5101		int slot = path->slots[0];5102		struct extent_buffer *leaf = path->nodes[0];5103		int nritems = btrfs_header_nritems(leaf);5104 5105		if (slot >= nritems) {5106			if (ins_nr > 0) {5107				ret = copy_items(trans, inode, dst_path, path,5108						 start_slot, ins_nr, 1, 0, ctx);5109				if (ret < 0)5110					return ret;5111				ins_nr = 0;5112			}5113			ret = btrfs_next_leaf(root, path);5114			if (ret < 0)5115				return ret;5116			else if (ret > 0)5117				break;5118			continue;5119		}5120 5121		btrfs_item_key_to_cpu(leaf, &key, slot);5122		if (key.objectid != ino || key.type != BTRFS_XATTR_ITEM_KEY)5123			break;5124 5125		if (ins_nr == 0)5126			start_slot = slot;5127		ins_nr++;5128		path->slots[0]++;5129		found_xattrs = true;5130		cond_resched();5131	}5132	if (ins_nr > 0) {5133		ret = copy_items(trans, inode, dst_path, path,5134				 start_slot, ins_nr, 1, 0, ctx);5135		if (ret < 0)5136			return ret;5137	}5138 5139	if (!found_xattrs)5140		set_bit(BTRFS_INODE_NO_XATTRS, &inode->runtime_flags);5141 5142	return 0;5143}5144 5145/*5146 * When using the NO_HOLES feature if we punched a hole that causes the5147 * deletion of entire leafs or all the extent items of the first leaf (the one5148 * that contains the inode item and references) we may end up not processing5149 * any extents, because there are no leafs with a generation matching the5150 * current transaction that have extent items for our inode. So we need to find5151 * if any holes exist and then log them. We also need to log holes after any5152 * truncate operation that changes the inode's size.5153 */5154static int btrfs_log_holes(struct btrfs_trans_handle *trans,5155			   struct btrfs_inode *inode,5156			   struct btrfs_path *path)5157{5158	struct btrfs_root *root = inode->root;5159	struct btrfs_fs_info *fs_info = root->fs_info;5160	struct btrfs_key key;5161	const u64 ino = btrfs_ino(inode);5162	const u64 i_size = i_size_read(&inode->vfs_inode);5163	u64 prev_extent_end = 0;5164	int ret;5165 5166	if (!btrfs_fs_incompat(fs_info, NO_HOLES) || i_size == 0)5167		return 0;5168 5169	key.objectid = ino;5170	key.type = BTRFS_EXTENT_DATA_KEY;5171	key.offset = 0;5172 5173	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);5174	if (ret < 0)5175		return ret;5176 5177	while (true) {5178		struct extent_buffer *leaf = path->nodes[0];5179 5180		if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {5181			ret = btrfs_next_leaf(root, path);5182			if (ret < 0)5183				return ret;5184			if (ret > 0) {5185				ret = 0;5186				break;5187			}5188			leaf = path->nodes[0];5189		}5190 5191		btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);5192		if (key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY)5193			break;5194 5195		/* We have a hole, log it. */5196		if (prev_extent_end < key.offset) {5197			const u64 hole_len = key.offset - prev_extent_end;5198 5199			/*5200			 * Release the path to avoid deadlocks with other code5201			 * paths that search the root while holding locks on5202			 * leafs from the log root.5203			 */5204			btrfs_release_path(path);5205			ret = btrfs_insert_hole_extent(trans, root->log_root,5206						       ino, prev_extent_end,5207						       hole_len);5208			if (ret < 0)5209				return ret;5210 5211			/*5212			 * Search for the same key again in the root. Since it's5213			 * an extent item and we are holding the inode lock, the5214			 * key must still exist. If it doesn't just emit warning5215			 * and return an error to fall back to a transaction5216			 * commit.5217			 */5218			ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);5219			if (ret < 0)5220				return ret;5221			if (WARN_ON(ret > 0))5222				return -ENOENT;5223			leaf = path->nodes[0];5224		}5225 5226		prev_extent_end = btrfs_file_extent_end(path);5227		path->slots[0]++;5228		cond_resched();5229	}5230 5231	if (prev_extent_end < i_size) {5232		u64 hole_len;5233 5234		btrfs_release_path(path);5235		hole_len = ALIGN(i_size - prev_extent_end, fs_info->sectorsize);5236		ret = btrfs_insert_hole_extent(trans, root->log_root, ino,5237					       prev_extent_end, hole_len);5238		if (ret < 0)5239			return ret;5240	}5241 5242	return 0;5243}5244 5245/*5246 * When we are logging a new inode X, check if it doesn't have a reference that5247 * matches the reference from some other inode Y created in a past transaction5248 * and that was renamed in the current transaction. If we don't do this, then at5249 * log replay time we can lose inode Y (and all its files if it's a directory):5250 *5251 * mkdir /mnt/x5252 * echo "hello world" > /mnt/x/foobar5253 * sync5254 * mv /mnt/x /mnt/y5255 * mkdir /mnt/x                 # or touch /mnt/x5256 * xfs_io -c fsync /mnt/x5257 * <power fail>5258 * mount fs, trigger log replay5259 *5260 * After the log replay procedure, we would lose the first directory and all its5261 * files (file foobar).5262 * For the case where inode Y is not a directory we simply end up losing it:5263 *5264 * echo "123" > /mnt/foo5265 * sync5266 * mv /mnt/foo /mnt/bar5267 * echo "abc" > /mnt/foo5268 * xfs_io -c fsync /mnt/foo5269 * <power fail>5270 *5271 * We also need this for cases where a snapshot entry is replaced by some other5272 * entry (file or directory) otherwise we end up with an unreplayable log due to5273 * attempts to delete the snapshot entry (entry of type BTRFS_ROOT_ITEM_KEY) as5274 * if it were a regular entry:5275 *5276 * mkdir /mnt/x5277 * btrfs subvolume snapshot /mnt /mnt/x/snap5278 * btrfs subvolume delete /mnt/x/snap5279 * rmdir /mnt/x5280 * mkdir /mnt/x5281 * fsync /mnt/x or fsync some new file inside it5282 * <power fail>5283 *5284 * The snapshot delete, rmdir of x, mkdir of a new x and the fsync all happen in5285 * the same transaction.5286 */5287static int btrfs_check_ref_name_override(struct extent_buffer *eb,5288					 const int slot,5289					 const struct btrfs_key *key,5290					 struct btrfs_inode *inode,5291					 u64 *other_ino, u64 *other_parent)5292{5293	int ret;5294	struct btrfs_path *search_path;5295	char *name = NULL;5296	u32 name_len = 0;5297	u32 item_size = btrfs_item_size(eb, slot);5298	u32 cur_offset = 0;5299	unsigned long ptr = btrfs_item_ptr_offset(eb, slot);5300 5301	search_path = btrfs_alloc_path();5302	if (!search_path)5303		return -ENOMEM;5304	search_path->search_commit_root = 1;5305	search_path->skip_locking = 1;5306 5307	while (cur_offset < item_size) {5308		u64 parent;5309		u32 this_name_len;5310		u32 this_len;5311		unsigned long name_ptr;5312		struct btrfs_dir_item *di;5313		struct fscrypt_str name_str;5314 5315		if (key->type == BTRFS_INODE_REF_KEY) {5316			struct btrfs_inode_ref *iref;5317 5318			iref = (struct btrfs_inode_ref *)(ptr + cur_offset);5319			parent = key->offset;5320			this_name_len = btrfs_inode_ref_name_len(eb, iref);5321			name_ptr = (unsigned long)(iref + 1);5322			this_len = sizeof(*iref) + this_name_len;5323		} else {5324			struct btrfs_inode_extref *extref;5325 5326			extref = (struct btrfs_inode_extref *)(ptr +5327							       cur_offset);5328			parent = btrfs_inode_extref_parent(eb, extref);5329			this_name_len = btrfs_inode_extref_name_len(eb, extref);5330			name_ptr = (unsigned long)&extref->name;5331			this_len = sizeof(*extref) + this_name_len;5332		}5333 5334		if (this_name_len > name_len) {5335			char *new_name;5336 5337			new_name = krealloc(name, this_name_len, GFP_NOFS);5338			if (!new_name) {5339				ret = -ENOMEM;5340				goto out;5341			}5342			name_len = this_name_len;5343			name = new_name;5344		}5345 5346		read_extent_buffer(eb, name, name_ptr, this_name_len);5347 5348		name_str.name = name;5349		name_str.len = this_name_len;5350		di = btrfs_lookup_dir_item(NULL, inode->root, search_path,5351				parent, &name_str, 0);5352		if (di && !IS_ERR(di)) {5353			struct btrfs_key di_key;5354 5355			btrfs_dir_item_key_to_cpu(search_path->nodes[0],5356						  di, &di_key);5357			if (di_key.type == BTRFS_INODE_ITEM_KEY) {5358				if (di_key.objectid != key->objectid) {5359					ret = 1;5360					*other_ino = di_key.objectid;5361					*other_parent = parent;5362				} else {5363					ret = 0;5364				}5365			} else {5366				ret = -EAGAIN;5367			}5368			goto out;5369		} else if (IS_ERR(di)) {5370			ret = PTR_ERR(di);5371			goto out;5372		}5373		btrfs_release_path(search_path);5374 5375		cur_offset += this_len;5376	}5377	ret = 0;5378out:5379	btrfs_free_path(search_path);5380	kfree(name);5381	return ret;5382}5383 5384/*5385 * Check if we need to log an inode. This is used in contexts where while5386 * logging an inode we need to log another inode (either that it exists or in5387 * full mode). This is used instead of btrfs_inode_in_log() because the later5388 * requires the inode to be in the log and have the log transaction committed,5389 * while here we do not care if the log transaction was already committed - our5390 * caller will commit the log later - and we want to avoid logging an inode5391 * multiple times when multiple tasks have joined the same log transaction.5392 */5393static bool need_log_inode(const struct btrfs_trans_handle *trans,5394			   struct btrfs_inode *inode)5395{5396	/*5397	 * If a directory was not modified, no dentries added or removed, we can5398	 * and should avoid logging it.5399	 */5400	if (S_ISDIR(inode->vfs_inode.i_mode) && inode->last_trans < trans->transid)5401		return false;5402 5403	/*5404	 * If this inode does not have new/updated/deleted xattrs since the last5405	 * time it was logged and is flagged as logged in the current transaction,5406	 * we can skip logging it. As for new/deleted names, those are updated in5407	 * the log by link/unlink/rename operations.5408	 * In case the inode was logged and then evicted and reloaded, its5409	 * logged_trans will be 0, in which case we have to fully log it since5410	 * logged_trans is a transient field, not persisted.5411	 */5412	if (inode_logged(trans, inode, NULL) == 1 &&5413	    !test_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags))5414		return false;5415 5416	return true;5417}5418 5419struct btrfs_dir_list {5420	u64 ino;5421	struct list_head list;5422};5423 5424/*5425 * Log the inodes of the new dentries of a directory.5426 * See process_dir_items_leaf() for details about why it is needed.5427 * This is a recursive operation - if an existing dentry corresponds to a5428 * directory, that directory's new entries are logged too (same behaviour as5429 * ext3/4, xfs, f2fs, reiserfs, nilfs2). Note that when logging the inodes5430 * the dentries point to we do not acquire their VFS lock, otherwise lockdep5431 * complains about the following circular lock dependency / possible deadlock:5432 *5433 *        CPU0                                        CPU15434 *        ----                                        ----5435 * lock(&type->i_mutex_dir_key#3/2);5436 *                                            lock(sb_internal#2);5437 *                                            lock(&type->i_mutex_dir_key#3/2);5438 * lock(&sb->s_type->i_mutex_key#14);5439 *5440 * Where sb_internal is the lock (a counter that works as a lock) acquired by5441 * sb_start_intwrite() in btrfs_start_transaction().5442 * Not acquiring the VFS lock of the inodes is still safe because:5443 *5444 * 1) For regular files we log with a mode of LOG_INODE_EXISTS. It's possible5445 *    that while logging the inode new references (names) are added or removed5446 *    from the inode, leaving the logged inode item with a link count that does5447 *    not match the number of logged inode reference items. This is fine because5448 *    at log replay time we compute the real number of links and correct the5449 *    link count in the inode item (see replay_one_buffer() and5450 *    link_to_fixup_dir());5451 *5452 * 2) For directories we log with a mode of LOG_INODE_ALL. It's possible that5453 *    while logging the inode's items new index items (key type5454 *    BTRFS_DIR_INDEX_KEY) are added to fs/subvol tree and the logged inode item5455 *    has a size that doesn't match the sum of the lengths of all the logged5456 *    names - this is ok, not a problem, because at log replay time we set the5457 *    directory's i_size to the correct value (see replay_one_name() and5458 *    overwrite_item()).5459 */5460static int log_new_dir_dentries(struct btrfs_trans_handle *trans,5461				struct btrfs_inode *start_inode,5462				struct btrfs_log_ctx *ctx)5463{5464	struct btrfs_root *root = start_inode->root;5465	struct btrfs_path *path;5466	LIST_HEAD(dir_list);5467	struct btrfs_dir_list *dir_elem;5468	u64 ino = btrfs_ino(start_inode);5469	struct btrfs_inode *curr_inode = start_inode;5470	int ret = 0;5471 5472	/*5473	 * If we are logging a new name, as part of a link or rename operation,5474	 * don't bother logging new dentries, as we just want to log the names5475	 * of an inode and that any new parents exist.5476	 */5477	if (ctx->logging_new_name)5478		return 0;5479 5480	path = btrfs_alloc_path();5481	if (!path)5482		return -ENOMEM;5483 5484	/* Pairs with btrfs_add_delayed_iput below. */5485	ihold(&curr_inode->vfs_inode);5486 5487	while (true) {5488		struct inode *vfs_inode;5489		struct btrfs_key key;5490		struct btrfs_key found_key;5491		u64 next_index;5492		bool continue_curr_inode = true;5493		int iter_ret;5494 5495		key.objectid = ino;5496		key.type = BTRFS_DIR_INDEX_KEY;5497		key.offset = btrfs_get_first_dir_index_to_log(curr_inode);5498		next_index = key.offset;5499again:5500		btrfs_for_each_slot(root->log_root, &key, &found_key, path, iter_ret) {5501			struct extent_buffer *leaf = path->nodes[0];5502			struct btrfs_dir_item *di;5503			struct btrfs_key di_key;5504			struct inode *di_inode;5505			int log_mode = LOG_INODE_EXISTS;5506			int type;5507 5508			if (found_key.objectid != ino ||5509			    found_key.type != BTRFS_DIR_INDEX_KEY) {5510				continue_curr_inode = false;5511				break;5512			}5513 5514			next_index = found_key.offset + 1;5515 5516			di = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_dir_item);5517			type = btrfs_dir_ftype(leaf, di);5518			if (btrfs_dir_transid(leaf, di) < trans->transid)5519				continue;5520			btrfs_dir_item_key_to_cpu(leaf, di, &di_key);5521			if (di_key.type == BTRFS_ROOT_ITEM_KEY)5522				continue;5523 5524			btrfs_release_path(path);5525			di_inode = btrfs_iget_logging(di_key.objectid, root);5526			if (IS_ERR(di_inode)) {5527				ret = PTR_ERR(di_inode);5528				goto out;5529			}5530 5531			if (!need_log_inode(trans, BTRFS_I(di_inode))) {5532				btrfs_add_delayed_iput(BTRFS_I(di_inode));5533				break;5534			}5535 5536			ctx->log_new_dentries = false;5537			if (type == BTRFS_FT_DIR)5538				log_mode = LOG_INODE_ALL;5539			ret = btrfs_log_inode(trans, BTRFS_I(di_inode),5540					      log_mode, ctx);5541			btrfs_add_delayed_iput(BTRFS_I(di_inode));5542			if (ret)5543				goto out;5544			if (ctx->log_new_dentries) {5545				dir_elem = kmalloc(sizeof(*dir_elem), GFP_NOFS);5546				if (!dir_elem) {5547					ret = -ENOMEM;5548					goto out;5549				}5550				dir_elem->ino = di_key.objectid;5551				list_add_tail(&dir_elem->list, &dir_list);5552			}5553			break;5554		}5555 5556		btrfs_release_path(path);5557 5558		if (iter_ret < 0) {5559			ret = iter_ret;5560			goto out;5561		} else if (iter_ret > 0) {5562			continue_curr_inode = false;5563		} else {5564			key = found_key;5565		}5566 5567		if (continue_curr_inode && key.offset < (u64)-1) {5568			key.offset++;5569			goto again;5570		}5571 5572		btrfs_set_first_dir_index_to_log(curr_inode, next_index);5573 5574		if (list_empty(&dir_list))5575			break;5576 5577		dir_elem = list_first_entry(&dir_list, struct btrfs_dir_list, list);5578		ino = dir_elem->ino;5579		list_del(&dir_elem->list);5580		kfree(dir_elem);5581 5582		btrfs_add_delayed_iput(curr_inode);5583		curr_inode = NULL;5584 5585		vfs_inode = btrfs_iget_logging(ino, root);5586		if (IS_ERR(vfs_inode)) {5587			ret = PTR_ERR(vfs_inode);5588			break;5589		}5590		curr_inode = BTRFS_I(vfs_inode);5591	}5592out:5593	btrfs_free_path(path);5594	if (curr_inode)5595		btrfs_add_delayed_iput(curr_inode);5596 5597	if (ret) {5598		struct btrfs_dir_list *next;5599 5600		list_for_each_entry_safe(dir_elem, next, &dir_list, list)5601			kfree(dir_elem);5602	}5603 5604	return ret;5605}5606 5607struct btrfs_ino_list {5608	u64 ino;5609	u64 parent;5610	struct list_head list;5611};5612 5613static void free_conflicting_inodes(struct btrfs_log_ctx *ctx)5614{5615	struct btrfs_ino_list *curr;5616	struct btrfs_ino_list *next;5617 5618	list_for_each_entry_safe(curr, next, &ctx->conflict_inodes, list) {5619		list_del(&curr->list);5620		kfree(curr);5621	}5622}5623 5624static int conflicting_inode_is_dir(struct btrfs_root *root, u64 ino,5625				    struct btrfs_path *path)5626{5627	struct btrfs_key key;5628	int ret;5629 5630	key.objectid = ino;5631	key.type = BTRFS_INODE_ITEM_KEY;5632	key.offset = 0;5633 5634	path->search_commit_root = 1;5635	path->skip_locking = 1;5636 5637	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);5638	if (WARN_ON_ONCE(ret > 0)) {5639		/*5640		 * We have previously found the inode through the commit root5641		 * so this should not happen. If it does, just error out and5642		 * fallback to a transaction commit.5643		 */5644		ret = -ENOENT;5645	} else if (ret == 0) {5646		struct btrfs_inode_item *item;5647 5648		item = btrfs_item_ptr(path->nodes[0], path->slots[0],5649				      struct btrfs_inode_item);5650		if (S_ISDIR(btrfs_inode_mode(path->nodes[0], item)))5651			ret = 1;5652	}5653 5654	btrfs_release_path(path);5655	path->search_commit_root = 0;5656	path->skip_locking = 0;5657 5658	return ret;5659}5660 5661static int add_conflicting_inode(struct btrfs_trans_handle *trans,5662				 struct btrfs_root *root,5663				 struct btrfs_path *path,5664				 u64 ino, u64 parent,5665				 struct btrfs_log_ctx *ctx)5666{5667	struct btrfs_ino_list *ino_elem;5668	struct inode *inode;5669 5670	/*5671	 * It's rare to have a lot of conflicting inodes, in practice it is not5672	 * common to have more than 1 or 2. We don't want to collect too many,5673	 * as we could end up logging too many inodes (even if only in5674	 * LOG_INODE_EXISTS mode) and slow down other fsyncs or transaction5675	 * commits.5676	 */5677	if (ctx->num_conflict_inodes >= MAX_CONFLICT_INODES)5678		return BTRFS_LOG_FORCE_COMMIT;5679 5680	inode = btrfs_iget_logging(ino, root);5681	/*5682	 * If the other inode that had a conflicting dir entry was deleted in5683	 * the current transaction then we either:5684	 *5685	 * 1) Log the parent directory (later after adding it to the list) if5686	 *    the inode is a directory. This is because it may be a deleted5687	 *    subvolume/snapshot or it may be a regular directory that had5688	 *    deleted subvolumes/snapshots (or subdirectories that had them),5689	 *    and at the moment we can't deal with dropping subvolumes/snapshots5690	 *    during log replay. So we just log the parent, which will result in5691	 *    a fallback to a transaction commit if we are dealing with those5692	 *    cases (last_unlink_trans will match the current transaction);5693	 *5694	 * 2) Do nothing if it's not a directory. During log replay we simply5695	 *    unlink the conflicting dentry from the parent directory and then5696	 *    add the dentry for our inode. Like this we can avoid logging the5697	 *    parent directory (and maybe fallback to a transaction commit in5698	 *    case it has a last_unlink_trans == trans->transid, due to moving5699	 *    some inode from it to some other directory).5700	 */5701	if (IS_ERR(inode)) {5702		int ret = PTR_ERR(inode);5703 5704		if (ret != -ENOENT)5705			return ret;5706 5707		ret = conflicting_inode_is_dir(root, ino, path);5708		/* Not a directory or we got an error. */5709		if (ret <= 0)5710			return ret;5711 5712		/* Conflicting inode is a directory, so we'll log its parent. */5713		ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);5714		if (!ino_elem)5715			return -ENOMEM;5716		ino_elem->ino = ino;5717		ino_elem->parent = parent;5718		list_add_tail(&ino_elem->list, &ctx->conflict_inodes);5719		ctx->num_conflict_inodes++;5720 5721		return 0;5722	}5723 5724	/*5725	 * If the inode was already logged skip it - otherwise we can hit an5726	 * infinite loop. Example:5727	 *5728	 * From the commit root (previous transaction) we have the following5729	 * inodes:5730	 *5731	 * inode 257 a directory5732	 * inode 258 with references "zz" and "zz_link" on inode 2575733	 * inode 259 with reference "a" on inode 2575734	 *5735	 * And in the current (uncommitted) transaction we have:5736	 *5737	 * inode 257 a directory, unchanged5738	 * inode 258 with references "a" and "a2" on inode 2575739	 * inode 259 with reference "zz_link" on inode 2575740	 * inode 261 with reference "zz" on inode 2575741	 *5742	 * When logging inode 261 the following infinite loop could5743	 * happen if we don't skip already logged inodes:5744	 *5745	 * - we detect inode 258 as a conflicting inode, with inode 2615746	 *   on reference "zz", and log it;5747	 *5748	 * - we detect inode 259 as a conflicting inode, with inode 2585749	 *   on reference "a", and log it;5750	 *5751	 * - we detect inode 258 as a conflicting inode, with inode 2595752	 *   on reference "zz_link", and log it - again! After this we5753	 *   repeat the above steps forever.5754	 *5755	 * Here we can use need_log_inode() because we only need to log the5756	 * inode in LOG_INODE_EXISTS mode and rename operations update the log,5757	 * so that the log ends up with the new name and without the old name.5758	 */5759	if (!need_log_inode(trans, BTRFS_I(inode))) {5760		btrfs_add_delayed_iput(BTRFS_I(inode));5761		return 0;5762	}5763 5764	btrfs_add_delayed_iput(BTRFS_I(inode));5765 5766	ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);5767	if (!ino_elem)5768		return -ENOMEM;5769	ino_elem->ino = ino;5770	ino_elem->parent = parent;5771	list_add_tail(&ino_elem->list, &ctx->conflict_inodes);5772	ctx->num_conflict_inodes++;5773 5774	return 0;5775}5776 5777static int log_conflicting_inodes(struct btrfs_trans_handle *trans,5778				  struct btrfs_root *root,5779				  struct btrfs_log_ctx *ctx)5780{5781	int ret = 0;5782 5783	/*5784	 * Conflicting inodes are logged by the first call to btrfs_log_inode(),5785	 * otherwise we could have unbounded recursion of btrfs_log_inode()5786	 * calls. This check guarantees we can have only 1 level of recursion.5787	 */5788	if (ctx->logging_conflict_inodes)5789		return 0;5790 5791	ctx->logging_conflict_inodes = true;5792 5793	/*5794	 * New conflicting inodes may be found and added to the list while we5795	 * are logging a conflicting inode, so keep iterating while the list is5796	 * not empty.5797	 */5798	while (!list_empty(&ctx->conflict_inodes)) {5799		struct btrfs_ino_list *curr;5800		struct inode *inode;5801		u64 ino;5802		u64 parent;5803 5804		curr = list_first_entry(&ctx->conflict_inodes,5805					struct btrfs_ino_list, list);5806		ino = curr->ino;5807		parent = curr->parent;5808		list_del(&curr->list);5809		kfree(curr);5810 5811		inode = btrfs_iget_logging(ino, root);5812		/*5813		 * If the other inode that had a conflicting dir entry was5814		 * deleted in the current transaction, we need to log its parent5815		 * directory. See the comment at add_conflicting_inode().5816		 */5817		if (IS_ERR(inode)) {5818			ret = PTR_ERR(inode);5819			if (ret != -ENOENT)5820				break;5821 5822			inode = btrfs_iget_logging(parent, root);5823			if (IS_ERR(inode)) {5824				ret = PTR_ERR(inode);5825				break;5826			}5827 5828			/*5829			 * Always log the directory, we cannot make this5830			 * conditional on need_log_inode() because the directory5831			 * might have been logged in LOG_INODE_EXISTS mode or5832			 * the dir index of the conflicting inode is not in a5833			 * dir index key range logged for the directory. So we5834			 * must make sure the deletion is recorded.5835			 */5836			ret = btrfs_log_inode(trans, BTRFS_I(inode),5837					      LOG_INODE_ALL, ctx);5838			btrfs_add_delayed_iput(BTRFS_I(inode));5839			if (ret)5840				break;5841			continue;5842		}5843 5844		/*5845		 * Here we can use need_log_inode() because we only need to log5846		 * the inode in LOG_INODE_EXISTS mode and rename operations5847		 * update the log, so that the log ends up with the new name and5848		 * without the old name.5849		 *5850		 * We did this check at add_conflicting_inode(), but here we do5851		 * it again because if some other task logged the inode after5852		 * that, we can avoid doing it again.5853		 */5854		if (!need_log_inode(trans, BTRFS_I(inode))) {5855			btrfs_add_delayed_iput(BTRFS_I(inode));5856			continue;5857		}5858 5859		/*5860		 * We are safe logging the other inode without acquiring its5861		 * lock as long as we log with the LOG_INODE_EXISTS mode. We5862		 * are safe against concurrent renames of the other inode as5863		 * well because during a rename we pin the log and update the5864		 * log with the new name before we unpin it.5865		 */5866		ret = btrfs_log_inode(trans, BTRFS_I(inode), LOG_INODE_EXISTS, ctx);5867		btrfs_add_delayed_iput(BTRFS_I(inode));5868		if (ret)5869			break;5870	}5871 5872	ctx->logging_conflict_inodes = false;5873	if (ret)5874		free_conflicting_inodes(ctx);5875 5876	return ret;5877}5878 5879static int copy_inode_items_to_log(struct btrfs_trans_handle *trans,5880				   struct btrfs_inode *inode,5881				   struct btrfs_key *min_key,5882				   const struct btrfs_key *max_key,5883				   struct btrfs_path *path,5884				   struct btrfs_path *dst_path,5885				   const u64 logged_isize,5886				   const int inode_only,5887				   struct btrfs_log_ctx *ctx,5888				   bool *need_log_inode_item)5889{5890	const u64 i_size = i_size_read(&inode->vfs_inode);5891	struct btrfs_root *root = inode->root;5892	int ins_start_slot = 0;5893	int ins_nr = 0;5894	int ret;5895 5896	while (1) {5897		ret = btrfs_search_forward(root, min_key, path, trans->transid);5898		if (ret < 0)5899			return ret;5900		if (ret > 0) {5901			ret = 0;5902			break;5903		}5904again:5905		/* Note, ins_nr might be > 0 here, cleanup outside the loop */5906		if (min_key->objectid != max_key->objectid)5907			break;5908		if (min_key->type > max_key->type)5909			break;5910 5911		if (min_key->type == BTRFS_INODE_ITEM_KEY) {5912			*need_log_inode_item = false;5913		} else if (min_key->type == BTRFS_EXTENT_DATA_KEY &&5914			   min_key->offset >= i_size) {5915			/*5916			 * Extents at and beyond eof are logged with5917			 * btrfs_log_prealloc_extents().5918			 * Only regular files have BTRFS_EXTENT_DATA_KEY keys,5919			 * and no keys greater than that, so bail out.5920			 */5921			break;5922		} else if ((min_key->type == BTRFS_INODE_REF_KEY ||5923			    min_key->type == BTRFS_INODE_EXTREF_KEY) &&5924			   (inode->generation == trans->transid ||5925			    ctx->logging_conflict_inodes)) {5926			u64 other_ino = 0;5927			u64 other_parent = 0;5928 5929			ret = btrfs_check_ref_name_override(path->nodes[0],5930					path->slots[0], min_key, inode,5931					&other_ino, &other_parent);5932			if (ret < 0) {5933				return ret;5934			} else if (ret > 0 &&5935				   other_ino != btrfs_ino(ctx->inode)) {5936				if (ins_nr > 0) {5937					ins_nr++;5938				} else {5939					ins_nr = 1;5940					ins_start_slot = path->slots[0];5941				}5942				ret = copy_items(trans, inode, dst_path, path,5943						 ins_start_slot, ins_nr,5944						 inode_only, logged_isize, ctx);5945				if (ret < 0)5946					return ret;5947				ins_nr = 0;5948 5949				btrfs_release_path(path);5950				ret = add_conflicting_inode(trans, root, path,5951							    other_ino,5952							    other_parent, ctx);5953				if (ret)5954					return ret;5955				goto next_key;5956			}5957		} else if (min_key->type == BTRFS_XATTR_ITEM_KEY) {5958			/* Skip xattrs, logged later with btrfs_log_all_xattrs() */5959			if (ins_nr == 0)5960				goto next_slot;5961			ret = copy_items(trans, inode, dst_path, path,5962					 ins_start_slot,5963					 ins_nr, inode_only, logged_isize, ctx);5964			if (ret < 0)5965				return ret;5966			ins_nr = 0;5967			goto next_slot;5968		}5969 5970		if (ins_nr && ins_start_slot + ins_nr == path->slots[0]) {5971			ins_nr++;5972			goto next_slot;5973		} else if (!ins_nr) {5974			ins_start_slot = path->slots[0];5975			ins_nr = 1;5976			goto next_slot;5977		}5978 5979		ret = copy_items(trans, inode, dst_path, path, ins_start_slot,5980				 ins_nr, inode_only, logged_isize, ctx);5981		if (ret < 0)5982			return ret;5983		ins_nr = 1;5984		ins_start_slot = path->slots[0];5985next_slot:5986		path->slots[0]++;5987		if (path->slots[0] < btrfs_header_nritems(path->nodes[0])) {5988			btrfs_item_key_to_cpu(path->nodes[0], min_key,5989					      path->slots[0]);5990			goto again;5991		}5992		if (ins_nr) {5993			ret = copy_items(trans, inode, dst_path, path,5994					 ins_start_slot, ins_nr, inode_only,5995					 logged_isize, ctx);5996			if (ret < 0)5997				return ret;5998			ins_nr = 0;5999		}6000		btrfs_release_path(path);6001next_key:6002		if (min_key->offset < (u64)-1) {6003			min_key->offset++;6004		} else if (min_key->type < max_key->type) {6005			min_key->type++;6006			min_key->offset = 0;6007		} else {6008			break;6009		}6010 6011		/*6012		 * We may process many leaves full of items for our inode, so6013		 * avoid monopolizing a cpu for too long by rescheduling while6014		 * not holding locks on any tree.6015		 */6016		cond_resched();6017	}6018	if (ins_nr) {6019		ret = copy_items(trans, inode, dst_path, path, ins_start_slot,6020				 ins_nr, inode_only, logged_isize, ctx);6021		if (ret)6022			return ret;6023	}6024 6025	if (inode_only == LOG_INODE_ALL && S_ISREG(inode->vfs_inode.i_mode)) {6026		/*6027		 * Release the path because otherwise we might attempt to double6028		 * lock the same leaf with btrfs_log_prealloc_extents() below.6029		 */6030		btrfs_release_path(path);6031		ret = btrfs_log_prealloc_extents(trans, inode, dst_path, ctx);6032	}6033 6034	return ret;6035}6036 6037static int insert_delayed_items_batch(struct btrfs_trans_handle *trans,6038				      struct btrfs_root *log,6039				      struct btrfs_path *path,6040				      const struct btrfs_item_batch *batch,6041				      const struct btrfs_delayed_item *first_item)6042{6043	const struct btrfs_delayed_item *curr = first_item;6044	int ret;6045 6046	ret = btrfs_insert_empty_items(trans, log, path, batch);6047	if (ret)6048		return ret;6049 6050	for (int i = 0; i < batch->nr; i++) {6051		char *data_ptr;6052 6053		data_ptr = btrfs_item_ptr(path->nodes[0], path->slots[0], char);6054		write_extent_buffer(path->nodes[0], &curr->data,6055				    (unsigned long)data_ptr, curr->data_len);6056		curr = list_next_entry(curr, log_list);6057		path->slots[0]++;6058	}6059 6060	btrfs_release_path(path);6061 6062	return 0;6063}6064 6065static int log_delayed_insertion_items(struct btrfs_trans_handle *trans,6066				       struct btrfs_inode *inode,6067				       struct btrfs_path *path,6068				       const struct list_head *delayed_ins_list,6069				       struct btrfs_log_ctx *ctx)6070{6071	/* 195 (4095 bytes of keys and sizes) fits in a single 4K page. */6072	const int max_batch_size = 195;6073	const int leaf_data_size = BTRFS_LEAF_DATA_SIZE(trans->fs_info);6074	const u64 ino = btrfs_ino(inode);6075	struct btrfs_root *log = inode->root->log_root;6076	struct btrfs_item_batch batch = {6077		.nr = 0,6078		.total_data_size = 0,6079	};6080	const struct btrfs_delayed_item *first = NULL;6081	const struct btrfs_delayed_item *curr;6082	char *ins_data;6083	struct btrfs_key *ins_keys;6084	u32 *ins_sizes;6085	u64 curr_batch_size = 0;6086	int batch_idx = 0;6087	int ret;6088 6089	/* We are adding dir index items to the log tree. */6090	lockdep_assert_held(&inode->log_mutex);6091 6092	/*6093	 * We collect delayed items before copying index keys from the subvolume6094	 * to the log tree. However just after we collected them, they may have6095	 * been flushed (all of them or just some of them), and therefore we6096	 * could have copied them from the subvolume tree to the log tree.6097	 * So find the first delayed item that was not yet logged (they are6098	 * sorted by index number).6099	 */6100	list_for_each_entry(curr, delayed_ins_list, log_list) {6101		if (curr->index > inode->last_dir_index_offset) {6102			first = curr;6103			break;6104		}6105	}6106 6107	/* Empty list or all delayed items were already logged. */6108	if (!first)6109		return 0;6110 6111	ins_data = kmalloc(max_batch_size * sizeof(u32) +6112			   max_batch_size * sizeof(struct btrfs_key), GFP_NOFS);6113	if (!ins_data)6114		return -ENOMEM;6115	ins_sizes = (u32 *)ins_data;6116	batch.data_sizes = ins_sizes;6117	ins_keys = (struct btrfs_key *)(ins_data + max_batch_size * sizeof(u32));6118	batch.keys = ins_keys;6119 6120	curr = first;6121	while (!list_entry_is_head(curr, delayed_ins_list, log_list)) {6122		const u32 curr_size = curr->data_len + sizeof(struct btrfs_item);6123 6124		if (curr_batch_size + curr_size > leaf_data_size ||6125		    batch.nr == max_batch_size) {6126			ret = insert_delayed_items_batch(trans, log, path,6127							 &batch, first);6128			if (ret)6129				goto out;6130			batch_idx = 0;6131			batch.nr = 0;6132			batch.total_data_size = 0;6133			curr_batch_size = 0;6134			first = curr;6135		}6136 6137		ins_sizes[batch_idx] = curr->data_len;6138		ins_keys[batch_idx].objectid = ino;6139		ins_keys[batch_idx].type = BTRFS_DIR_INDEX_KEY;6140		ins_keys[batch_idx].offset = curr->index;6141		curr_batch_size += curr_size;6142		batch.total_data_size += curr->data_len;6143		batch.nr++;6144		batch_idx++;6145		curr = list_next_entry(curr, log_list);6146	}6147 6148	ASSERT(batch.nr >= 1);6149	ret = insert_delayed_items_batch(trans, log, path, &batch, first);6150 6151	curr = list_last_entry(delayed_ins_list, struct btrfs_delayed_item,6152			       log_list);6153	inode->last_dir_index_offset = curr->index;6154out:6155	kfree(ins_data);6156 6157	return ret;6158}6159 6160static int log_delayed_deletions_full(struct btrfs_trans_handle *trans,6161				      struct btrfs_inode *inode,6162				      struct btrfs_path *path,6163				      const struct list_head *delayed_del_list,6164				      struct btrfs_log_ctx *ctx)6165{6166	const u64 ino = btrfs_ino(inode);6167	const struct btrfs_delayed_item *curr;6168 6169	curr = list_first_entry(delayed_del_list, struct btrfs_delayed_item,6170				log_list);6171 6172	while (!list_entry_is_head(curr, delayed_del_list, log_list)) {6173		u64 first_dir_index = curr->index;6174		u64 last_dir_index;6175		const struct btrfs_delayed_item *next;6176		int ret;6177 6178		/*6179		 * Find a range of consecutive dir index items to delete. Like6180		 * this we log a single dir range item spanning several contiguous6181		 * dir items instead of logging one range item per dir index item.6182		 */6183		next = list_next_entry(curr, log_list);6184		while (!list_entry_is_head(next, delayed_del_list, log_list)) {6185			if (next->index != curr->index + 1)6186				break;6187			curr = next;6188			next = list_next_entry(next, log_list);6189		}6190 6191		last_dir_index = curr->index;6192		ASSERT(last_dir_index >= first_dir_index);6193 6194		ret = insert_dir_log_key(trans, inode->root->log_root, path,6195					 ino, first_dir_index, last_dir_index);6196		if (ret)6197			return ret;6198		curr = list_next_entry(curr, log_list);6199	}6200 6201	return 0;6202}6203 6204static int batch_delete_dir_index_items(struct btrfs_trans_handle *trans,6205					struct btrfs_inode *inode,6206					struct btrfs_path *path,6207					struct btrfs_log_ctx *ctx,6208					const struct list_head *delayed_del_list,6209					const struct btrfs_delayed_item *first,6210					const struct btrfs_delayed_item **last_ret)6211{6212	const struct btrfs_delayed_item *next;6213	struct extent_buffer *leaf = path->nodes[0];6214	const int last_slot = btrfs_header_nritems(leaf) - 1;6215	int slot = path->slots[0] + 1;6216	const u64 ino = btrfs_ino(inode);6217 6218	next = list_next_entry(first, log_list);6219 6220	while (slot < last_slot &&6221	       !list_entry_is_head(next, delayed_del_list, log_list)) {6222		struct btrfs_key key;6223 6224		btrfs_item_key_to_cpu(leaf, &key, slot);6225		if (key.objectid != ino ||6226		    key.type != BTRFS_DIR_INDEX_KEY ||6227		    key.offset != next->index)6228			break;6229 6230		slot++;6231		*last_ret = next;6232		next = list_next_entry(next, log_list);6233	}6234 6235	return btrfs_del_items(trans, inode->root->log_root, path,6236			       path->slots[0], slot - path->slots[0]);6237}6238 6239static int log_delayed_deletions_incremental(struct btrfs_trans_handle *trans,6240					     struct btrfs_inode *inode,6241					     struct btrfs_path *path,6242					     const struct list_head *delayed_del_list,6243					     struct btrfs_log_ctx *ctx)6244{6245	struct btrfs_root *log = inode->root->log_root;6246	const struct btrfs_delayed_item *curr;6247	u64 last_range_start = 0;6248	u64 last_range_end = 0;6249	struct btrfs_key key;6250 6251	key.objectid = btrfs_ino(inode);6252	key.type = BTRFS_DIR_INDEX_KEY;6253	curr = list_first_entry(delayed_del_list, struct btrfs_delayed_item,6254				log_list);6255 6256	while (!list_entry_is_head(curr, delayed_del_list, log_list)) {6257		const struct btrfs_delayed_item *last = curr;6258		u64 first_dir_index = curr->index;6259		u64 last_dir_index;6260		bool deleted_items = false;6261		int ret;6262 6263		key.offset = curr->index;6264		ret = btrfs_search_slot(trans, log, &key, path, -1, 1);6265		if (ret < 0) {6266			return ret;6267		} else if (ret == 0) {6268			ret = batch_delete_dir_index_items(trans, inode, path, ctx,6269							   delayed_del_list, curr,6270							   &last);6271			if (ret)6272				return ret;6273			deleted_items = true;6274		}6275 6276		btrfs_release_path(path);6277 6278		/*6279		 * If we deleted items from the leaf, it means we have a range6280		 * item logging their range, so no need to add one or update an6281		 * existing one. Otherwise we have to log a dir range item.6282		 */6283		if (deleted_items)6284			goto next_batch;6285 6286		last_dir_index = last->index;6287		ASSERT(last_dir_index >= first_dir_index);6288		/*6289		 * If this range starts right after where the previous one ends,6290		 * then we want to reuse the previous range item and change its6291		 * end offset to the end of this range. This is just to minimize6292		 * leaf space usage, by avoiding adding a new range item.6293		 */6294		if (last_range_end != 0 && first_dir_index == last_range_end + 1)6295			first_dir_index = last_range_start;6296 6297		ret = insert_dir_log_key(trans, log, path, key.objectid,6298					 first_dir_index, last_dir_index);6299		if (ret)6300			return ret;6301 6302		last_range_start = first_dir_index;6303		last_range_end = last_dir_index;6304next_batch:6305		curr = list_next_entry(last, log_list);6306	}6307 6308	return 0;6309}6310 6311static int log_delayed_deletion_items(struct btrfs_trans_handle *trans,6312				      struct btrfs_inode *inode,6313				      struct btrfs_path *path,6314				      const struct list_head *delayed_del_list,6315				      struct btrfs_log_ctx *ctx)6316{6317	/*6318	 * We are deleting dir index items from the log tree or adding range6319	 * items to it.6320	 */6321	lockdep_assert_held(&inode->log_mutex);6322 6323	if (list_empty(delayed_del_list))6324		return 0;6325 6326	if (ctx->logged_before)6327		return log_delayed_deletions_incremental(trans, inode, path,6328							 delayed_del_list, ctx);6329 6330	return log_delayed_deletions_full(trans, inode, path, delayed_del_list,6331					  ctx);6332}6333 6334/*6335 * Similar logic as for log_new_dir_dentries(), but it iterates over the delayed6336 * items instead of the subvolume tree.6337 */6338static int log_new_delayed_dentries(struct btrfs_trans_handle *trans,6339				    struct btrfs_inode *inode,6340				    const struct list_head *delayed_ins_list,6341				    struct btrfs_log_ctx *ctx)6342{6343	const bool orig_log_new_dentries = ctx->log_new_dentries;6344	struct btrfs_delayed_item *item;6345	int ret = 0;6346 6347	/*6348	 * No need for the log mutex, plus to avoid potential deadlocks or6349	 * lockdep annotations due to nesting of delayed inode mutexes and log6350	 * mutexes.6351	 */6352	lockdep_assert_not_held(&inode->log_mutex);6353 6354	ASSERT(!ctx->logging_new_delayed_dentries);6355	ctx->logging_new_delayed_dentries = true;6356 6357	list_for_each_entry(item, delayed_ins_list, log_list) {6358		struct btrfs_dir_item *dir_item;6359		struct inode *di_inode;6360		struct btrfs_key key;6361		int log_mode = LOG_INODE_EXISTS;6362 6363		dir_item = (struct btrfs_dir_item *)item->data;6364		btrfs_disk_key_to_cpu(&key, &dir_item->location);6365 6366		if (key.type == BTRFS_ROOT_ITEM_KEY)6367			continue;6368 6369		di_inode = btrfs_iget_logging(key.objectid, inode->root);6370		if (IS_ERR(di_inode)) {6371			ret = PTR_ERR(di_inode);6372			break;6373		}6374 6375		if (!need_log_inode(trans, BTRFS_I(di_inode))) {6376			btrfs_add_delayed_iput(BTRFS_I(di_inode));6377			continue;6378		}6379 6380		if (btrfs_stack_dir_ftype(dir_item) == BTRFS_FT_DIR)6381			log_mode = LOG_INODE_ALL;6382 6383		ctx->log_new_dentries = false;6384		ret = btrfs_log_inode(trans, BTRFS_I(di_inode), log_mode, ctx);6385 6386		if (!ret && ctx->log_new_dentries)6387			ret = log_new_dir_dentries(trans, BTRFS_I(di_inode), ctx);6388 6389		btrfs_add_delayed_iput(BTRFS_I(di_inode));6390 6391		if (ret)6392			break;6393	}6394 6395	ctx->log_new_dentries = orig_log_new_dentries;6396	ctx->logging_new_delayed_dentries = false;6397 6398	return ret;6399}6400 6401/* log a single inode in the tree log.6402 * At least one parent directory for this inode must exist in the tree6403 * or be logged already.6404 *6405 * Any items from this inode changed by the current transaction are copied6406 * to the log tree.  An extra reference is taken on any extents in this6407 * file, allowing us to avoid a whole pile of corner cases around logging6408 * blocks that have been removed from the tree.6409 *6410 * See LOG_INODE_ALL and related defines for a description of what inode_only6411 * does.6412 *6413 * This handles both files and directories.6414 */6415static int btrfs_log_inode(struct btrfs_trans_handle *trans,6416			   struct btrfs_inode *inode,6417			   int inode_only,6418			   struct btrfs_log_ctx *ctx)6419{6420	struct btrfs_path *path;6421	struct btrfs_path *dst_path;6422	struct btrfs_key min_key;6423	struct btrfs_key max_key;6424	struct btrfs_root *log = inode->root->log_root;6425	int ret;6426	bool fast_search = false;6427	u64 ino = btrfs_ino(inode);6428	struct extent_map_tree *em_tree = &inode->extent_tree;6429	u64 logged_isize = 0;6430	bool need_log_inode_item = true;6431	bool xattrs_logged = false;6432	bool inode_item_dropped = true;6433	bool full_dir_logging = false;6434	LIST_HEAD(delayed_ins_list);6435	LIST_HEAD(delayed_del_list);6436 6437	path = btrfs_alloc_path();6438	if (!path)6439		return -ENOMEM;6440	dst_path = btrfs_alloc_path();6441	if (!dst_path) {6442		btrfs_free_path(path);6443		return -ENOMEM;6444	}6445 6446	min_key.objectid = ino;6447	min_key.type = BTRFS_INODE_ITEM_KEY;6448	min_key.offset = 0;6449 6450	max_key.objectid = ino;6451 6452 6453	/* today the code can only do partial logging of directories */6454	if (S_ISDIR(inode->vfs_inode.i_mode) ||6455	    (!test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,6456		       &inode->runtime_flags) &&6457	     inode_only >= LOG_INODE_EXISTS))6458		max_key.type = BTRFS_XATTR_ITEM_KEY;6459	else6460		max_key.type = (u8)-1;6461	max_key.offset = (u64)-1;6462 6463	if (S_ISDIR(inode->vfs_inode.i_mode) && inode_only == LOG_INODE_ALL)6464		full_dir_logging = true;6465 6466	/*6467	 * If we are logging a directory while we are logging dentries of the6468	 * delayed items of some other inode, then we need to flush the delayed6469	 * items of this directory and not log the delayed items directly. This6470	 * is to prevent more than one level of recursion into btrfs_log_inode()6471	 * by having something like this:6472	 *6473	 *     $ mkdir -p a/b/c/d/e/f/g/h/...6474	 *     $ xfs_io -c "fsync" a6475	 *6476	 * Where all directories in the path did not exist before and are6477	 * created in the current transaction.6478	 * So in such a case we directly log the delayed items of the main6479	 * directory ("a") without flushing them first, while for each of its6480	 * subdirectories we flush their delayed items before logging them.6481	 * This prevents a potential unbounded recursion like this:6482	 *6483	 * btrfs_log_inode()6484	 *   log_new_delayed_dentries()6485	 *      btrfs_log_inode()6486	 *        log_new_delayed_dentries()6487	 *          btrfs_log_inode()6488	 *            log_new_delayed_dentries()6489	 *              (...)6490	 *6491	 * We have thresholds for the maximum number of delayed items to have in6492	 * memory, and once they are hit, the items are flushed asynchronously.6493	 * However the limit is quite high, so lets prevent deep levels of6494	 * recursion to happen by limiting the maximum depth to be 1.6495	 */6496	if (full_dir_logging && ctx->logging_new_delayed_dentries) {6497		ret = btrfs_commit_inode_delayed_items(trans, inode);6498		if (ret)6499			goto out;6500	}6501 6502	mutex_lock(&inode->log_mutex);6503 6504	/*6505	 * For symlinks, we must always log their content, which is stored in an6506	 * inline extent, otherwise we could end up with an empty symlink after6507	 * log replay, which is invalid on linux (symlink(2) returns -ENOENT if6508	 * one attempts to create an empty symlink).6509	 * We don't need to worry about flushing delalloc, because when we create6510	 * the inline extent when the symlink is created (we never have delalloc6511	 * for symlinks).6512	 */6513	if (S_ISLNK(inode->vfs_inode.i_mode))6514		inode_only = LOG_INODE_ALL;6515 6516	/*6517	 * Before logging the inode item, cache the value returned by6518	 * inode_logged(), because after that we have the need to figure out if6519	 * the inode was previously logged in this transaction.6520	 */6521	ret = inode_logged(trans, inode, path);6522	if (ret < 0)6523		goto out_unlock;6524	ctx->logged_before = (ret == 1);6525	ret = 0;6526 6527	/*6528	 * This is for cases where logging a directory could result in losing a6529	 * a file after replaying the log. For example, if we move a file from a6530	 * directory A to a directory B, then fsync directory A, we have no way6531	 * to known the file was moved from A to B, so logging just A would6532	 * result in losing the file after a log replay.6533	 */6534	if (full_dir_logging && inode->last_unlink_trans >= trans->transid) {6535		ret = BTRFS_LOG_FORCE_COMMIT;6536		goto out_unlock;6537	}6538 6539	/*6540	 * a brute force approach to making sure we get the most uptodate6541	 * copies of everything.6542	 */6543	if (S_ISDIR(inode->vfs_inode.i_mode)) {6544		clear_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags);6545		if (ctx->logged_before)6546			ret = drop_inode_items(trans, log, path, inode,6547					       BTRFS_XATTR_ITEM_KEY);6548	} else {6549		if (inode_only == LOG_INODE_EXISTS && ctx->logged_before) {6550			/*6551			 * Make sure the new inode item we write to the log has6552			 * the same isize as the current one (if it exists).6553			 * This is necessary to prevent data loss after log6554			 * replay, and also to prevent doing a wrong expanding6555			 * truncate - for e.g. create file, write 4K into offset6556			 * 0, fsync, write 4K into offset 4096, add hard link,6557			 * fsync some other file (to sync log), power fail - if6558			 * we use the inode's current i_size, after log replay6559			 * we get a 8Kb file, with the last 4Kb extent as a hole6560			 * (zeroes), as if an expanding truncate happened,6561			 * instead of getting a file of 4Kb only.6562			 */6563			ret = logged_inode_size(log, inode, path, &logged_isize);6564			if (ret)6565				goto out_unlock;6566		}6567		if (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,6568			     &inode->runtime_flags)) {6569			if (inode_only == LOG_INODE_EXISTS) {6570				max_key.type = BTRFS_XATTR_ITEM_KEY;6571				if (ctx->logged_before)6572					ret = drop_inode_items(trans, log, path,6573							       inode, max_key.type);6574			} else {6575				clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,6576					  &inode->runtime_flags);6577				clear_bit(BTRFS_INODE_COPY_EVERYTHING,6578					  &inode->runtime_flags);6579				if (ctx->logged_before)6580					ret = truncate_inode_items(trans, log,6581								   inode, 0, 0);6582			}6583		} else if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING,6584					      &inode->runtime_flags) ||6585			   inode_only == LOG_INODE_EXISTS) {6586			if (inode_only == LOG_INODE_ALL)6587				fast_search = true;6588			max_key.type = BTRFS_XATTR_ITEM_KEY;6589			if (ctx->logged_before)6590				ret = drop_inode_items(trans, log, path, inode,6591						       max_key.type);6592		} else {6593			if (inode_only == LOG_INODE_ALL)6594				fast_search = true;6595			inode_item_dropped = false;6596			goto log_extents;6597		}6598 6599	}6600	if (ret)6601		goto out_unlock;6602 6603	/*6604	 * If we are logging a directory in full mode, collect the delayed items6605	 * before iterating the subvolume tree, so that we don't miss any new6606	 * dir index items in case they get flushed while or right after we are6607	 * iterating the subvolume tree.6608	 */6609	if (full_dir_logging && !ctx->logging_new_delayed_dentries)6610		btrfs_log_get_delayed_items(inode, &delayed_ins_list,6611					    &delayed_del_list);6612 6613	ret = copy_inode_items_to_log(trans, inode, &min_key, &max_key,6614				      path, dst_path, logged_isize,6615				      inode_only, ctx,6616				      &need_log_inode_item);6617	if (ret)6618		goto out_unlock;6619 6620	btrfs_release_path(path);6621	btrfs_release_path(dst_path);6622	ret = btrfs_log_all_xattrs(trans, inode, path, dst_path, ctx);6623	if (ret)6624		goto out_unlock;6625	xattrs_logged = true;6626	if (max_key.type >= BTRFS_EXTENT_DATA_KEY && !fast_search) {6627		btrfs_release_path(path);6628		btrfs_release_path(dst_path);6629		ret = btrfs_log_holes(trans, inode, path);6630		if (ret)6631			goto out_unlock;6632	}6633log_extents:6634	btrfs_release_path(path);6635	btrfs_release_path(dst_path);6636	if (need_log_inode_item) {6637		ret = log_inode_item(trans, log, dst_path, inode, inode_item_dropped);6638		if (ret)6639			goto out_unlock;6640		/*6641		 * If we are doing a fast fsync and the inode was logged before6642		 * in this transaction, we don't need to log the xattrs because6643		 * they were logged before. If xattrs were added, changed or6644		 * deleted since the last time we logged the inode, then we have6645		 * already logged them because the inode had the runtime flag6646		 * BTRFS_INODE_COPY_EVERYTHING set.6647		 */6648		if (!xattrs_logged && inode->logged_trans < trans->transid) {6649			ret = btrfs_log_all_xattrs(trans, inode, path, dst_path, ctx);6650			if (ret)6651				goto out_unlock;6652			btrfs_release_path(path);6653		}6654	}6655	if (fast_search) {6656		ret = btrfs_log_changed_extents(trans, inode, dst_path, ctx);6657		if (ret)6658			goto out_unlock;6659	} else if (inode_only == LOG_INODE_ALL) {6660		struct extent_map *em, *n;6661 6662		write_lock(&em_tree->lock);6663		list_for_each_entry_safe(em, n, &em_tree->modified_extents, list)6664			list_del_init(&em->list);6665		write_unlock(&em_tree->lock);6666	}6667 6668	if (full_dir_logging) {6669		ret = log_directory_changes(trans, inode, path, dst_path, ctx);6670		if (ret)6671			goto out_unlock;6672		ret = log_delayed_insertion_items(trans, inode, path,6673						  &delayed_ins_list, ctx);6674		if (ret)6675			goto out_unlock;6676		ret = log_delayed_deletion_items(trans, inode, path,6677						 &delayed_del_list, ctx);6678		if (ret)6679			goto out_unlock;6680	}6681 6682	spin_lock(&inode->lock);6683	inode->logged_trans = trans->transid;6684	/*6685	 * Don't update last_log_commit if we logged that an inode exists.6686	 * We do this for three reasons:6687	 *6688	 * 1) We might have had buffered writes to this inode that were6689	 *    flushed and had their ordered extents completed in this6690	 *    transaction, but we did not previously log the inode with6691	 *    LOG_INODE_ALL. Later the inode was evicted and after that6692	 *    it was loaded again and this LOG_INODE_EXISTS log operation6693	 *    happened. We must make sure that if an explicit fsync against6694	 *    the inode is performed later, it logs the new extents, an6695	 *    updated inode item, etc, and syncs the log. The same logic6696	 *    applies to direct IO writes instead of buffered writes.6697	 *6698	 * 2) When we log the inode with LOG_INODE_EXISTS, its inode item6699	 *    is logged with an i_size of 0 or whatever value was logged6700	 *    before. If later the i_size of the inode is increased by a6701	 *    truncate operation, the log is synced through an fsync of6702	 *    some other inode and then finally an explicit fsync against6703	 *    this inode is made, we must make sure this fsync logs the6704	 *    inode with the new i_size, the hole between old i_size and6705	 *    the new i_size, and syncs the log.6706	 *6707	 * 3) If we are logging that an ancestor inode exists as part of6708	 *    logging a new name from a link or rename operation, don't update6709	 *    its last_log_commit - otherwise if an explicit fsync is made6710	 *    against an ancestor, the fsync considers the inode in the log6711	 *    and doesn't sync the log, resulting in the ancestor missing after6712	 *    a power failure unless the log was synced as part of an fsync6713	 *    against any other unrelated inode.6714	 */6715	if (inode_only != LOG_INODE_EXISTS)6716		inode->last_log_commit = inode->last_sub_trans;6717	spin_unlock(&inode->lock);6718 6719	/*6720	 * Reset the last_reflink_trans so that the next fsync does not need to6721	 * go through the slower path when logging extents and their checksums.6722	 */6723	if (inode_only == LOG_INODE_ALL)6724		inode->last_reflink_trans = 0;6725 6726out_unlock:6727	mutex_unlock(&inode->log_mutex);6728out:6729	btrfs_free_path(path);6730	btrfs_free_path(dst_path);6731 6732	if (ret)6733		free_conflicting_inodes(ctx);6734	else6735		ret = log_conflicting_inodes(trans, inode->root, ctx);6736 6737	if (full_dir_logging && !ctx->logging_new_delayed_dentries) {6738		if (!ret)6739			ret = log_new_delayed_dentries(trans, inode,6740						       &delayed_ins_list, ctx);6741 6742		btrfs_log_put_delayed_items(inode, &delayed_ins_list,6743					    &delayed_del_list);6744	}6745 6746	return ret;6747}6748 6749static int btrfs_log_all_parents(struct btrfs_trans_handle *trans,6750				 struct btrfs_inode *inode,6751				 struct btrfs_log_ctx *ctx)6752{6753	int ret;6754	struct btrfs_path *path;6755	struct btrfs_key key;6756	struct btrfs_root *root = inode->root;6757	const u64 ino = btrfs_ino(inode);6758 6759	path = btrfs_alloc_path();6760	if (!path)6761		return -ENOMEM;6762	path->skip_locking = 1;6763	path->search_commit_root = 1;6764 6765	key.objectid = ino;6766	key.type = BTRFS_INODE_REF_KEY;6767	key.offset = 0;6768	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);6769	if (ret < 0)6770		goto out;6771 6772	while (true) {6773		struct extent_buffer *leaf = path->nodes[0];6774		int slot = path->slots[0];6775		u32 cur_offset = 0;6776		u32 item_size;6777		unsigned long ptr;6778 6779		if (slot >= btrfs_header_nritems(leaf)) {6780			ret = btrfs_next_leaf(root, path);6781			if (ret < 0)6782				goto out;6783			else if (ret > 0)6784				break;6785			continue;6786		}6787 6788		btrfs_item_key_to_cpu(leaf, &key, slot);6789		/* BTRFS_INODE_EXTREF_KEY is BTRFS_INODE_REF_KEY + 1 */6790		if (key.objectid != ino || key.type > BTRFS_INODE_EXTREF_KEY)6791			break;6792 6793		item_size = btrfs_item_size(leaf, slot);6794		ptr = btrfs_item_ptr_offset(leaf, slot);6795		while (cur_offset < item_size) {6796			struct btrfs_key inode_key;6797			struct inode *dir_inode;6798 6799			inode_key.type = BTRFS_INODE_ITEM_KEY;6800			inode_key.offset = 0;6801 6802			if (key.type == BTRFS_INODE_EXTREF_KEY) {6803				struct btrfs_inode_extref *extref;6804 6805				extref = (struct btrfs_inode_extref *)6806					(ptr + cur_offset);6807				inode_key.objectid = btrfs_inode_extref_parent(6808					leaf, extref);6809				cur_offset += sizeof(*extref);6810				cur_offset += btrfs_inode_extref_name_len(leaf,6811					extref);6812			} else {6813				inode_key.objectid = key.offset;6814				cur_offset = item_size;6815			}6816 6817			dir_inode = btrfs_iget_logging(inode_key.objectid, root);6818			/*6819			 * If the parent inode was deleted, return an error to6820			 * fallback to a transaction commit. This is to prevent6821			 * getting an inode that was moved from one parent A to6822			 * a parent B, got its former parent A deleted and then6823			 * it got fsync'ed, from existing at both parents after6824			 * a log replay (and the old parent still existing).6825			 * Example:6826			 *6827			 * mkdir /mnt/A6828			 * mkdir /mnt/B6829			 * touch /mnt/B/bar6830			 * sync6831			 * mv /mnt/B/bar /mnt/A/bar6832			 * mv -T /mnt/A /mnt/B6833			 * fsync /mnt/B/bar6834			 * <power fail>6835			 *6836			 * If we ignore the old parent B which got deleted,6837			 * after a log replay we would have file bar linked6838			 * at both parents and the old parent B would still6839			 * exist.6840			 */6841			if (IS_ERR(dir_inode)) {6842				ret = PTR_ERR(dir_inode);6843				goto out;6844			}6845 6846			if (!need_log_inode(trans, BTRFS_I(dir_inode))) {6847				btrfs_add_delayed_iput(BTRFS_I(dir_inode));6848				continue;6849			}6850 6851			ctx->log_new_dentries = false;6852			ret = btrfs_log_inode(trans, BTRFS_I(dir_inode),6853					      LOG_INODE_ALL, ctx);6854			if (!ret && ctx->log_new_dentries)6855				ret = log_new_dir_dentries(trans,6856						   BTRFS_I(dir_inode), ctx);6857			btrfs_add_delayed_iput(BTRFS_I(dir_inode));6858			if (ret)6859				goto out;6860		}6861		path->slots[0]++;6862	}6863	ret = 0;6864out:6865	btrfs_free_path(path);6866	return ret;6867}6868 6869static int log_new_ancestors(struct btrfs_trans_handle *trans,6870			     struct btrfs_root *root,6871			     struct btrfs_path *path,6872			     struct btrfs_log_ctx *ctx)6873{6874	struct btrfs_key found_key;6875 6876	btrfs_item_key_to_cpu(path->nodes[0], &found_key, path->slots[0]);6877 6878	while (true) {6879		struct extent_buffer *leaf;6880		int slot;6881		struct btrfs_key search_key;6882		struct inode *inode;6883		u64 ino;6884		int ret = 0;6885 6886		btrfs_release_path(path);6887 6888		ino = found_key.offset;6889 6890		search_key.objectid = found_key.offset;6891		search_key.type = BTRFS_INODE_ITEM_KEY;6892		search_key.offset = 0;6893		inode = btrfs_iget_logging(ino, root);6894		if (IS_ERR(inode))6895			return PTR_ERR(inode);6896 6897		if (BTRFS_I(inode)->generation >= trans->transid &&6898		    need_log_inode(trans, BTRFS_I(inode)))6899			ret = btrfs_log_inode(trans, BTRFS_I(inode),6900					      LOG_INODE_EXISTS, ctx);6901		btrfs_add_delayed_iput(BTRFS_I(inode));6902		if (ret)6903			return ret;6904 6905		if (search_key.objectid == BTRFS_FIRST_FREE_OBJECTID)6906			break;6907 6908		search_key.type = BTRFS_INODE_REF_KEY;6909		ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);6910		if (ret < 0)6911			return ret;6912 6913		leaf = path->nodes[0];6914		slot = path->slots[0];6915		if (slot >= btrfs_header_nritems(leaf)) {6916			ret = btrfs_next_leaf(root, path);6917			if (ret < 0)6918				return ret;6919			else if (ret > 0)6920				return -ENOENT;6921			leaf = path->nodes[0];6922			slot = path->slots[0];6923		}6924 6925		btrfs_item_key_to_cpu(leaf, &found_key, slot);6926		if (found_key.objectid != search_key.objectid ||6927		    found_key.type != BTRFS_INODE_REF_KEY)6928			return -ENOENT;6929	}6930	return 0;6931}6932 6933static int log_new_ancestors_fast(struct btrfs_trans_handle *trans,6934				  struct btrfs_inode *inode,6935				  struct dentry *parent,6936				  struct btrfs_log_ctx *ctx)6937{6938	struct btrfs_root *root = inode->root;6939	struct dentry *old_parent = NULL;6940	struct super_block *sb = inode->vfs_inode.i_sb;6941	int ret = 0;6942 6943	while (true) {6944		if (!parent || d_really_is_negative(parent) ||6945		    sb != parent->d_sb)6946			break;6947 6948		inode = BTRFS_I(d_inode(parent));6949		if (root != inode->root)6950			break;6951 6952		if (inode->generation >= trans->transid &&6953		    need_log_inode(trans, inode)) {6954			ret = btrfs_log_inode(trans, inode,6955					      LOG_INODE_EXISTS, ctx);6956			if (ret)6957				break;6958		}6959		if (IS_ROOT(parent))6960			break;6961 6962		parent = dget_parent(parent);6963		dput(old_parent);6964		old_parent = parent;6965	}6966	dput(old_parent);6967 6968	return ret;6969}6970 6971static int log_all_new_ancestors(struct btrfs_trans_handle *trans,6972				 struct btrfs_inode *inode,6973				 struct dentry *parent,6974				 struct btrfs_log_ctx *ctx)6975{6976	struct btrfs_root *root = inode->root;6977	const u64 ino = btrfs_ino(inode);6978	struct btrfs_path *path;6979	struct btrfs_key search_key;6980	int ret;6981 6982	/*6983	 * For a single hard link case, go through a fast path that does not6984	 * need to iterate the fs/subvolume tree.6985	 */6986	if (inode->vfs_inode.i_nlink < 2)6987		return log_new_ancestors_fast(trans, inode, parent, ctx);6988 6989	path = btrfs_alloc_path();6990	if (!path)6991		return -ENOMEM;6992 6993	search_key.objectid = ino;6994	search_key.type = BTRFS_INODE_REF_KEY;6995	search_key.offset = 0;6996again:6997	ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);6998	if (ret < 0)6999		goto out;7000	if (ret == 0)7001		path->slots[0]++;7002 7003	while (true) {7004		struct extent_buffer *leaf = path->nodes[0];7005		int slot = path->slots[0];7006		struct btrfs_key found_key;7007 7008		if (slot >= btrfs_header_nritems(leaf)) {7009			ret = btrfs_next_leaf(root, path);7010			if (ret < 0)7011				goto out;7012			else if (ret > 0)7013				break;7014			continue;7015		}7016 7017		btrfs_item_key_to_cpu(leaf, &found_key, slot);7018		if (found_key.objectid != ino ||7019		    found_key.type > BTRFS_INODE_EXTREF_KEY)7020			break;7021 7022		/*7023		 * Don't deal with extended references because they are rare7024		 * cases and too complex to deal with (we would need to keep7025		 * track of which subitem we are processing for each item in7026		 * this loop, etc). So just return some error to fallback to7027		 * a transaction commit.7028		 */7029		if (found_key.type == BTRFS_INODE_EXTREF_KEY) {7030			ret = -EMLINK;7031			goto out;7032		}7033 7034		/*7035		 * Logging ancestors needs to do more searches on the fs/subvol7036		 * tree, so it releases the path as needed to avoid deadlocks.7037		 * Keep track of the last inode ref key and resume from that key7038		 * after logging all new ancestors for the current hard link.7039		 */7040		memcpy(&search_key, &found_key, sizeof(search_key));7041 7042		ret = log_new_ancestors(trans, root, path, ctx);7043		if (ret)7044			goto out;7045		btrfs_release_path(path);7046		goto again;7047	}7048	ret = 0;7049out:7050	btrfs_free_path(path);7051	return ret;7052}7053 7054/*7055 * helper function around btrfs_log_inode to make sure newly created7056 * parent directories also end up in the log.  A minimal inode and backref7057 * only logging is done of any parent directories that are older than7058 * the last committed transaction7059 */7060static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,7061				  struct btrfs_inode *inode,7062				  struct dentry *parent,7063				  int inode_only,7064				  struct btrfs_log_ctx *ctx)7065{7066	struct btrfs_root *root = inode->root;7067	struct btrfs_fs_info *fs_info = root->fs_info;7068	int ret = 0;7069	bool log_dentries = false;7070 7071	if (btrfs_test_opt(fs_info, NOTREELOG)) {7072		ret = BTRFS_LOG_FORCE_COMMIT;7073		goto end_no_trans;7074	}7075 7076	if (btrfs_root_refs(&root->root_item) == 0) {7077		ret = BTRFS_LOG_FORCE_COMMIT;7078		goto end_no_trans;7079	}7080 7081	/*7082	 * If we're logging an inode from a subvolume created in the current7083	 * transaction we must force a commit since the root is not persisted.7084	 */7085	if (btrfs_root_generation(&root->root_item) == trans->transid) {7086		ret = BTRFS_LOG_FORCE_COMMIT;7087		goto end_no_trans;7088	}7089 7090	/*7091	 * Skip already logged inodes or inodes corresponding to tmpfiles7092	 * (since logging them is pointless, a link count of 0 means they7093	 * will never be accessible).7094	 */7095	if ((btrfs_inode_in_log(inode, trans->transid) &&7096	     list_empty(&ctx->ordered_extents)) ||7097	    inode->vfs_inode.i_nlink == 0) {7098		ret = BTRFS_NO_LOG_SYNC;7099		goto end_no_trans;7100	}7101 7102	ret = start_log_trans(trans, root, ctx);7103	if (ret)7104		goto end_no_trans;7105 7106	ret = btrfs_log_inode(trans, inode, inode_only, ctx);7107	if (ret)7108		goto end_trans;7109 7110	/*7111	 * for regular files, if its inode is already on disk, we don't7112	 * have to worry about the parents at all.  This is because7113	 * we can use the last_unlink_trans field to record renames7114	 * and other fun in this file.7115	 */7116	if (S_ISREG(inode->vfs_inode.i_mode) &&7117	    inode->generation < trans->transid &&7118	    inode->last_unlink_trans < trans->transid) {7119		ret = 0;7120		goto end_trans;7121	}7122 7123	if (S_ISDIR(inode->vfs_inode.i_mode) && ctx->log_new_dentries)7124		log_dentries = true;7125 7126	/*7127	 * On unlink we must make sure all our current and old parent directory7128	 * inodes are fully logged. This is to prevent leaving dangling7129	 * directory index entries in directories that were our parents but are7130	 * not anymore. Not doing this results in old parent directory being7131	 * impossible to delete after log replay (rmdir will always fail with7132	 * error -ENOTEMPTY).7133	 *7134	 * Example 1:7135	 *7136	 * mkdir testdir7137	 * touch testdir/foo7138	 * ln testdir/foo testdir/bar7139	 * sync7140	 * unlink testdir/bar7141	 * xfs_io -c fsync testdir/foo7142	 * <power failure>7143	 * mount fs, triggers log replay7144	 *7145	 * If we don't log the parent directory (testdir), after log replay the7146	 * directory still has an entry pointing to the file inode using the bar7147	 * name, but a matching BTRFS_INODE_[REF|EXTREF]_KEY does not exist and7148	 * the file inode has a link count of 1.7149	 *7150	 * Example 2:7151	 *7152	 * mkdir testdir7153	 * touch foo7154	 * ln foo testdir/foo27155	 * ln foo testdir/foo37156	 * sync7157	 * unlink testdir/foo37158	 * xfs_io -c fsync foo7159	 * <power failure>7160	 * mount fs, triggers log replay7161	 *7162	 * Similar as the first example, after log replay the parent directory7163	 * testdir still has an entry pointing to the inode file with name foo37164	 * but the file inode does not have a matching BTRFS_INODE_REF_KEY item7165	 * and has a link count of 2.7166	 */7167	if (inode->last_unlink_trans >= trans->transid) {7168		ret = btrfs_log_all_parents(trans, inode, ctx);7169		if (ret)7170			goto end_trans;7171	}7172 7173	ret = log_all_new_ancestors(trans, inode, parent, ctx);7174	if (ret)7175		goto end_trans;7176 7177	if (log_dentries)7178		ret = log_new_dir_dentries(trans, inode, ctx);7179	else7180		ret = 0;7181end_trans:7182	if (ret < 0) {7183		btrfs_set_log_full_commit(trans);7184		ret = BTRFS_LOG_FORCE_COMMIT;7185	}7186 7187	if (ret)7188		btrfs_remove_log_ctx(root, ctx);7189	btrfs_end_log_trans(root);7190end_no_trans:7191	return ret;7192}7193 7194/*7195 * it is not safe to log dentry if the chunk root has added new7196 * chunks.  This returns 0 if the dentry was logged, and 1 otherwise.7197 * If this returns 1, you must commit the transaction to safely get your7198 * data on disk.7199 */7200int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,7201			  struct dentry *dentry,7202			  struct btrfs_log_ctx *ctx)7203{7204	struct dentry *parent = dget_parent(dentry);7205	int ret;7206 7207	ret = btrfs_log_inode_parent(trans, BTRFS_I(d_inode(dentry)), parent,7208				     LOG_INODE_ALL, ctx);7209	dput(parent);7210 7211	return ret;7212}7213 7214/*7215 * should be called during mount to recover any replay any log trees7216 * from the FS7217 */7218int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)7219{7220	int ret;7221	struct btrfs_path *path;7222	struct btrfs_trans_handle *trans;7223	struct btrfs_key key;7224	struct btrfs_key found_key;7225	struct btrfs_root *log;7226	struct btrfs_fs_info *fs_info = log_root_tree->fs_info;7227	struct walk_control wc = {7228		.process_func = process_one_buffer,7229		.stage = LOG_WALK_PIN_ONLY,7230	};7231 7232	path = btrfs_alloc_path();7233	if (!path)7234		return -ENOMEM;7235 7236	set_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);7237 7238	trans = btrfs_start_transaction(fs_info->tree_root, 0);7239	if (IS_ERR(trans)) {7240		ret = PTR_ERR(trans);7241		goto error;7242	}7243 7244	wc.trans = trans;7245	wc.pin = 1;7246 7247	ret = walk_log_tree(trans, log_root_tree, &wc);7248	if (ret) {7249		btrfs_abort_transaction(trans, ret);7250		goto error;7251	}7252 7253again:7254	key.objectid = BTRFS_TREE_LOG_OBJECTID;7255	key.offset = (u64)-1;7256	key.type = BTRFS_ROOT_ITEM_KEY;7257 7258	while (1) {7259		ret = btrfs_search_slot(NULL, log_root_tree, &key, path, 0, 0);7260 7261		if (ret < 0) {7262			btrfs_abort_transaction(trans, ret);7263			goto error;7264		}7265		if (ret > 0) {7266			if (path->slots[0] == 0)7267				break;7268			path->slots[0]--;7269		}7270		btrfs_item_key_to_cpu(path->nodes[0], &found_key,7271				      path->slots[0]);7272		btrfs_release_path(path);7273		if (found_key.objectid != BTRFS_TREE_LOG_OBJECTID)7274			break;7275 7276		log = btrfs_read_tree_root(log_root_tree, &found_key);7277		if (IS_ERR(log)) {7278			ret = PTR_ERR(log);7279			btrfs_abort_transaction(trans, ret);7280			goto error;7281		}7282 7283		wc.replay_dest = btrfs_get_fs_root(fs_info, found_key.offset,7284						   true);7285		if (IS_ERR(wc.replay_dest)) {7286			ret = PTR_ERR(wc.replay_dest);7287 7288			/*7289			 * We didn't find the subvol, likely because it was7290			 * deleted.  This is ok, simply skip this log and go to7291			 * the next one.7292			 *7293			 * We need to exclude the root because we can't have7294			 * other log replays overwriting this log as we'll read7295			 * it back in a few more times.  This will keep our7296			 * block from being modified, and we'll just bail for7297			 * each subsequent pass.7298			 */7299			if (ret == -ENOENT)7300				ret = btrfs_pin_extent_for_log_replay(trans, log->node);7301			btrfs_put_root(log);7302 7303			if (!ret)7304				goto next;7305			btrfs_abort_transaction(trans, ret);7306			goto error;7307		}7308 7309		wc.replay_dest->log_root = log;7310		ret = btrfs_record_root_in_trans(trans, wc.replay_dest);7311		if (ret)7312			/* The loop needs to continue due to the root refs */7313			btrfs_abort_transaction(trans, ret);7314		else7315			ret = walk_log_tree(trans, log, &wc);7316 7317		if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {7318			ret = fixup_inode_link_counts(trans, wc.replay_dest,7319						      path);7320			if (ret)7321				btrfs_abort_transaction(trans, ret);7322		}7323 7324		if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {7325			struct btrfs_root *root = wc.replay_dest;7326 7327			btrfs_release_path(path);7328 7329			/*7330			 * We have just replayed everything, and the highest7331			 * objectid of fs roots probably has changed in case7332			 * some inode_item's got replayed.7333			 *7334			 * root->objectid_mutex is not acquired as log replay7335			 * could only happen during mount.7336			 */7337			ret = btrfs_init_root_free_objectid(root);7338			if (ret)7339				btrfs_abort_transaction(trans, ret);7340		}7341 7342		wc.replay_dest->log_root = NULL;7343		btrfs_put_root(wc.replay_dest);7344		btrfs_put_root(log);7345 7346		if (ret)7347			goto error;7348next:7349		if (found_key.offset == 0)7350			break;7351		key.offset = found_key.offset - 1;7352	}7353	btrfs_release_path(path);7354 7355	/* step one is to pin it all, step two is to replay just inodes */7356	if (wc.pin) {7357		wc.pin = 0;7358		wc.process_func = replay_one_buffer;7359		wc.stage = LOG_WALK_REPLAY_INODES;7360		goto again;7361	}7362	/* step three is to replay everything */7363	if (wc.stage < LOG_WALK_REPLAY_ALL) {7364		wc.stage++;7365		goto again;7366	}7367 7368	btrfs_free_path(path);7369 7370	/* step 4: commit the transaction, which also unpins the blocks */7371	ret = btrfs_commit_transaction(trans);7372	if (ret)7373		return ret;7374 7375	log_root_tree->log_root = NULL;7376	clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);7377	btrfs_put_root(log_root_tree);7378 7379	return 0;7380error:7381	if (wc.trans)7382		btrfs_end_transaction(wc.trans);7383	clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);7384	btrfs_free_path(path);7385	return ret;7386}7387 7388/*7389 * there are some corner cases where we want to force a full7390 * commit instead of allowing a directory to be logged.7391 *7392 * They revolve around files there were unlinked from the directory, and7393 * this function updates the parent directory so that a full commit is7394 * properly done if it is fsync'd later after the unlinks are done.7395 *7396 * Must be called before the unlink operations (updates to the subvolume tree,7397 * inodes, etc) are done.7398 */7399void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,7400			     struct btrfs_inode *dir, struct btrfs_inode *inode,7401			     bool for_rename)7402{7403	/*7404	 * when we're logging a file, if it hasn't been renamed7405	 * or unlinked, and its inode is fully committed on disk,7406	 * we don't have to worry about walking up the directory chain7407	 * to log its parents.7408	 *7409	 * So, we use the last_unlink_trans field to put this transid7410	 * into the file.  When the file is logged we check it and7411	 * don't log the parents if the file is fully on disk.7412	 */7413	mutex_lock(&inode->log_mutex);7414	inode->last_unlink_trans = trans->transid;7415	mutex_unlock(&inode->log_mutex);7416 7417	if (!for_rename)7418		return;7419 7420	/*7421	 * If this directory was already logged, any new names will be logged7422	 * with btrfs_log_new_name() and old names will be deleted from the log7423	 * tree with btrfs_del_dir_entries_in_log() or with7424	 * btrfs_del_inode_ref_in_log().7425	 */7426	if (inode_logged(trans, dir, NULL) == 1)7427		return;7428 7429	/*7430	 * If the inode we're about to unlink was logged before, the log will be7431	 * properly updated with the new name with btrfs_log_new_name() and the7432	 * old name removed with btrfs_del_dir_entries_in_log() or with7433	 * btrfs_del_inode_ref_in_log().7434	 */7435	if (inode_logged(trans, inode, NULL) == 1)7436		return;7437 7438	/*7439	 * when renaming files across directories, if the directory7440	 * there we're unlinking from gets fsync'd later on, there's7441	 * no way to find the destination directory later and fsync it7442	 * properly.  So, we have to be conservative and force commits7443	 * so the new name gets discovered.7444	 */7445	mutex_lock(&dir->log_mutex);7446	dir->last_unlink_trans = trans->transid;7447	mutex_unlock(&dir->log_mutex);7448}7449 7450/*7451 * Make sure that if someone attempts to fsync the parent directory of a deleted7452 * snapshot, it ends up triggering a transaction commit. This is to guarantee7453 * that after replaying the log tree of the parent directory's root we will not7454 * see the snapshot anymore and at log replay time we will not see any log tree7455 * corresponding to the deleted snapshot's root, which could lead to replaying7456 * it after replaying the log tree of the parent directory (which would replay7457 * the snapshot delete operation).7458 *7459 * Must be called before the actual snapshot destroy operation (updates to the7460 * parent root and tree of tree roots trees, etc) are done.7461 */7462void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,7463				   struct btrfs_inode *dir)7464{7465	mutex_lock(&dir->log_mutex);7466	dir->last_unlink_trans = trans->transid;7467	mutex_unlock(&dir->log_mutex);7468}7469 7470/*7471 * Call this when creating a subvolume in a directory.7472 * Because we don't commit a transaction when creating a subvolume, we can't7473 * allow the directory pointing to the subvolume to be logged with an entry that7474 * points to an unpersisted root if we are still in the transaction used to7475 * create the subvolume, so make any attempt to log the directory to result in a7476 * full log sync.7477 * Also we don't need to worry with renames, since btrfs_rename() marks the log7478 * for full commit when renaming a subvolume.7479 */7480void btrfs_record_new_subvolume(const struct btrfs_trans_handle *trans,7481				struct btrfs_inode *dir)7482{7483	mutex_lock(&dir->log_mutex);7484	dir->last_unlink_trans = trans->transid;7485	mutex_unlock(&dir->log_mutex);7486}7487 7488/*7489 * Update the log after adding a new name for an inode.7490 *7491 * @trans:              Transaction handle.7492 * @old_dentry:         The dentry associated with the old name and the old7493 *                      parent directory.7494 * @old_dir:            The inode of the previous parent directory for the case7495 *                      of a rename. For a link operation, it must be NULL.7496 * @old_dir_index:      The index number associated with the old name, meaningful7497 *                      only for rename operations (when @old_dir is not NULL).7498 *                      Ignored for link operations.7499 * @parent:             The dentry associated with the directory under which the7500 *                      new name is located.7501 *7502 * Call this after adding a new name for an inode, as a result of a link or7503 * rename operation, and it will properly update the log to reflect the new name.7504 */7505void btrfs_log_new_name(struct btrfs_trans_handle *trans,7506			struct dentry *old_dentry, struct btrfs_inode *old_dir,7507			u64 old_dir_index, struct dentry *parent)7508{7509	struct btrfs_inode *inode = BTRFS_I(d_inode(old_dentry));7510	struct btrfs_root *root = inode->root;7511	struct btrfs_log_ctx ctx;7512	bool log_pinned = false;7513	int ret;7514 7515	/*7516	 * this will force the logging code to walk the dentry chain7517	 * up for the file7518	 */7519	if (!S_ISDIR(inode->vfs_inode.i_mode))7520		inode->last_unlink_trans = trans->transid;7521 7522	/*7523	 * if this inode hasn't been logged and directory we're renaming it7524	 * from hasn't been logged, we don't need to log it7525	 */7526	ret = inode_logged(trans, inode, NULL);7527	if (ret < 0) {7528		goto out;7529	} else if (ret == 0) {7530		if (!old_dir)7531			return;7532		/*7533		 * If the inode was not logged and we are doing a rename (old_dir is not7534		 * NULL), check if old_dir was logged - if it was not we can return and7535		 * do nothing.7536		 */7537		ret = inode_logged(trans, old_dir, NULL);7538		if (ret < 0)7539			goto out;7540		else if (ret == 0)7541			return;7542	}7543	ret = 0;7544 7545	/*7546	 * If we are doing a rename (old_dir is not NULL) from a directory that7547	 * was previously logged, make sure that on log replay we get the old7548	 * dir entry deleted. This is needed because we will also log the new7549	 * name of the renamed inode, so we need to make sure that after log7550	 * replay we don't end up with both the new and old dir entries existing.7551	 */7552	if (old_dir && old_dir->logged_trans == trans->transid) {7553		struct btrfs_root *log = old_dir->root->log_root;7554		struct btrfs_path *path;7555		struct fscrypt_name fname;7556 7557		ASSERT(old_dir_index >= BTRFS_DIR_START_INDEX);7558 7559		ret = fscrypt_setup_filename(&old_dir->vfs_inode,7560					     &old_dentry->d_name, 0, &fname);7561		if (ret)7562			goto out;7563		/*7564		 * We have two inodes to update in the log, the old directory and7565		 * the inode that got renamed, so we must pin the log to prevent7566		 * anyone from syncing the log until we have updated both inodes7567		 * in the log.7568		 */7569		ret = join_running_log_trans(root);7570		/*7571		 * At least one of the inodes was logged before, so this should7572		 * not fail, but if it does, it's not serious, just bail out and7573		 * mark the log for a full commit.7574		 */7575		if (WARN_ON_ONCE(ret < 0)) {7576			fscrypt_free_filename(&fname);7577			goto out;7578		}7579 7580		log_pinned = true;7581 7582		path = btrfs_alloc_path();7583		if (!path) {7584			ret = -ENOMEM;7585			fscrypt_free_filename(&fname);7586			goto out;7587		}7588 7589		/*7590		 * Other concurrent task might be logging the old directory,7591		 * as it can be triggered when logging other inode that had or7592		 * still has a dentry in the old directory. We lock the old7593		 * directory's log_mutex to ensure the deletion of the old7594		 * name is persisted, because during directory logging we7595		 * delete all BTRFS_DIR_LOG_INDEX_KEY keys and the deletion of7596		 * the old name's dir index item is in the delayed items, so7597		 * it could be missed by an in progress directory logging.7598		 */7599		mutex_lock(&old_dir->log_mutex);7600		ret = del_logged_dentry(trans, log, path, btrfs_ino(old_dir),7601					&fname.disk_name, old_dir_index);7602		if (ret > 0) {7603			/*7604			 * The dentry does not exist in the log, so record its7605			 * deletion.7606			 */7607			btrfs_release_path(path);7608			ret = insert_dir_log_key(trans, log, path,7609						 btrfs_ino(old_dir),7610						 old_dir_index, old_dir_index);7611		}7612		mutex_unlock(&old_dir->log_mutex);7613 7614		btrfs_free_path(path);7615		fscrypt_free_filename(&fname);7616		if (ret < 0)7617			goto out;7618	}7619 7620	btrfs_init_log_ctx(&ctx, inode);7621	ctx.logging_new_name = true;7622	btrfs_init_log_ctx_scratch_eb(&ctx);7623	/*7624	 * We don't care about the return value. If we fail to log the new name7625	 * then we know the next attempt to sync the log will fallback to a full7626	 * transaction commit (due to a call to btrfs_set_log_full_commit()), so7627	 * we don't need to worry about getting a log committed that has an7628	 * inconsistent state after a rename operation.7629	 */7630	btrfs_log_inode_parent(trans, inode, parent, LOG_INODE_EXISTS, &ctx);7631	free_extent_buffer(ctx.scratch_eb);7632	ASSERT(list_empty(&ctx.conflict_inodes));7633out:7634	/*7635	 * If an error happened mark the log for a full commit because it's not7636	 * consistent and up to date or we couldn't find out if one of the7637	 * inodes was logged before in this transaction. Do it before unpinning7638	 * the log, to avoid any races with someone else trying to commit it.7639	 */7640	if (ret < 0)7641		btrfs_set_log_full_commit(trans);7642	if (log_pinned)7643		btrfs_end_log_trans(root);7644}7645 7646