mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
bcachefs: check_subvol_path() now prints subvol root inode
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
0b0f0ad93c
commit
3a5895e3ac
@ -2371,22 +2371,6 @@ static bool darray_u32_has(darray_u32 *d, u32 v)
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* We've checked that inode backpointers point to valid dirents; here, it's
|
||||
* sufficient to check that the subvolume root has a dirent:
|
||||
*/
|
||||
static int subvol_has_dirent(struct btree_trans *trans, struct bkey_s_c_subvolume s)
|
||||
{
|
||||
struct bch_inode_unpacked inode;
|
||||
int ret = bch2_inode_find_by_inum_trans(trans,
|
||||
(subvol_inum) { s.k->p.offset, le64_to_cpu(s.v->inode) },
|
||||
&inode);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return inode.bi_dir != 0;
|
||||
}
|
||||
|
||||
static int check_subvol_path(struct btree_trans *trans, struct btree_iter *iter, struct bkey_s_c k)
|
||||
{
|
||||
struct bch_fs *c = trans->c;
|
||||
@ -2405,14 +2389,24 @@ static int check_subvol_path(struct btree_trans *trans, struct btree_iter *iter,
|
||||
|
||||
struct bkey_s_c_subvolume s = bkey_s_c_to_subvolume(k);
|
||||
|
||||
ret = subvol_has_dirent(trans, s);
|
||||
if (ret < 0)
|
||||
struct bch_inode_unpacked subvol_root;
|
||||
ret = bch2_inode_find_by_inum_trans(trans,
|
||||
(subvol_inum) { s.k->p.offset, le64_to_cpu(s.v->inode) },
|
||||
&subvol_root);
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
if (fsck_err_on(!ret,
|
||||
/*
|
||||
* We've checked that inode backpointers point to valid dirents;
|
||||
* here, it's sufficient to check that the subvolume root has a
|
||||
* dirent:
|
||||
*/
|
||||
if (fsck_err_on(!subvol_root.bi_dir,
|
||||
trans, subvol_unreachable,
|
||||
"unreachable subvolume %s",
|
||||
(bch2_bkey_val_to_text(&buf, c, s.s_c),
|
||||
prt_newline(&buf),
|
||||
bch2_inode_unpacked_to_text(&buf, &subvol_root),
|
||||
buf.buf))) {
|
||||
ret = reattach_subvol(trans, s);
|
||||
break;
|
||||
|
@ -271,7 +271,7 @@ enum bch_fsck_flags {
|
||||
x(subvol_children_not_set, 256, 0) \
|
||||
x(subvol_children_bad, 257, 0) \
|
||||
x(subvol_loop, 258, 0) \
|
||||
x(subvol_unreachable, 259, 0) \
|
||||
x(subvol_unreachable, 259, FSCK_AUTOFIX) \
|
||||
x(btree_node_bkey_bad_u64s, 260, 0) \
|
||||
x(btree_node_topology_empty_interior_node, 261, 0) \
|
||||
x(btree_ptr_v2_min_key_bad, 262, 0) \
|
||||
|
Loading…
Reference in New Issue
Block a user