diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-04-25 22:11:49 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-05-08 17:29:21 -0400 |
commit | 4da1713a8db5b6d5e421b20687ecde9354ee85cf (patch) | |
tree | 02b9f3a8b20b09851973725f095703364d5fcc11 /fs/bcachefs/fsck.c | |
parent | 45150765d307c1043baa68aff53cb6fa5ba34603 (diff) | |
download | lwn-4da1713a8db5b6d5e421b20687ecde9354ee85cf.tar.gz lwn-4da1713a8db5b6d5e421b20687ecde9354ee85cf.zip |
bcachefs: check for inodes that should have backpointers in fsck
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/fsck.c')
-rw-r--r-- | fs/bcachefs/fsck.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c index 4adb96965e11..c8f57465131c 100644 --- a/fs/bcachefs/fsck.c +++ b/fs/bcachefs/fsck.c @@ -1713,6 +1713,15 @@ static int check_dirent_inode_dirent(struct btree_trans *trans, if (inode_points_to_dirent(target, d)) return 0; + if (bch2_inode_should_have_bp(target) && + !fsck_err(c, inode_wrong_backpointer, + "dirent points to inode that does not point back:\n %s", + (bch2_bkey_val_to_text(&buf, c, d.s_c), + prt_printf(&buf, "\n "), + bch2_inode_unpacked_to_text(&buf, target), + buf.buf))) + goto out_noiter; + if (!target->bi_dir && !target->bi_dir_offset) { target->bi_dir = d.k->p.inode; @@ -1781,6 +1790,7 @@ out: err: fsck_err: bch2_trans_iter_exit(trans, &bp_iter); +out_noiter: printbuf_exit(&buf); bch_err_fn(c, ret); return ret; |