Commit 002c76dc authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: check_root() can now be run online



check_root() is simple enough to run as one single transaction, so is
trivial to run online.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 38ced43b
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -1950,14 +1950,10 @@ static int check_root_trans(struct btree_trans *trans)
		root_subvol.v.flags	= 0;
		root_subvol.v.snapshot	= cpu_to_le32(snapshot);
		root_subvol.v.inode	= cpu_to_le64(inum);
		ret = commit_do(trans, NULL, NULL,
				      BCH_TRANS_COMMIT_no_enospc,
			bch2_btree_insert_trans(trans, BTREE_ID_subvolumes,
					    &root_subvol.k_i, 0));
		ret = bch2_btree_insert_trans(trans, BTREE_ID_subvolumes, &root_subvol.k_i, 0);
		bch_err_msg(c, ret, "writing root subvol");
		if (ret)
			goto err;

	}

	ret = __lookup_inode(trans, BCACHEFS_ROOT_INO, &root_inode, &snapshot);
@@ -1984,9 +1980,7 @@ static int check_root_trans(struct btree_trans *trans)
/* Get root directory, create if it doesn't exist: */
int bch2_check_root(struct bch_fs *c)
{
	int ret;

	ret = bch2_trans_do(c, NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
	int ret = bch2_trans_do(c, NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
		check_root_trans(trans));
	bch_err_fn(c, ret);
	return ret;
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@
	x(check_indirect_extents,		26, PASS_FSCK)			\
	x(check_dirents,			27, PASS_FSCK)			\
	x(check_xattrs,				28, PASS_FSCK)			\
	x(check_root,				29, PASS_FSCK)			\
	x(check_root,				29, PASS_ONLINE|PASS_FSCK)	\
	x(check_directory_structure,		30, PASS_FSCK)			\
	x(check_nlinks,				31, PASS_FSCK)			\
	x(delete_dead_inodes,			32, PASS_FSCK|PASS_UNCLEAN)	\