mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-04 08:17:46 +00:00
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: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
38ced43bb0
commit
002c76dcf6
2 changed files with 3 additions and 9 deletions
|
@ -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 @@ fsck_err:
|
|||
/* 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;
|
||||
|
|
|
@ -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) \
|
||||
|
|
Loading…
Add table
Reference in a new issue