Skip to content

Commit 0b0f0ad

Browse files
author
Kent Overstreet
committed
bcachefs: remove_backpointer() now checks if dirent points to inode
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
1 parent a650807 commit 0b0f0ad

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

fs/bcachefs/fsck.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -389,14 +389,17 @@ static int reattach_inode(struct btree_trans *trans,
389389
static int remove_backpointer(struct btree_trans *trans,
390390
struct bch_inode_unpacked *inode)
391391
{
392-
struct btree_iter iter;
393-
struct bkey_s_c_dirent d;
394-
int ret;
392+
if (!inode->bi_dir)
393+
return 0;
395394

396-
d = bch2_bkey_get_iter_typed(trans, &iter, BTREE_ID_dirents,
397-
POS(inode->bi_dir, inode->bi_dir_offset), 0,
395+
struct bch_fs *c = trans->c;
396+
struct btree_iter iter;
397+
struct bkey_s_c_dirent d =
398+
bch2_bkey_get_iter_typed(trans, &iter, BTREE_ID_dirents,
399+
SPOS(inode->bi_dir, inode->bi_dir_offset, inode->bi_snapshot), 0,
398400
dirent);
399-
ret = bkey_err(d) ?:
401+
int ret = bkey_err(d) ?:
402+
dirent_points_to_inode(c, d, inode) ?:
400403
__remove_dirent(trans, d.k->p);
401404
bch2_trans_iter_exit(trans, &iter);
402405
return ret;

0 commit comments

Comments
 (0)