From: Kent Overstreet <kent.overstreet@linux.dev>
Date: Fri, 9 Feb 2024 00:52:37 +0000 (-0500)
Subject: bcachefs: Fix path where dirent -> subvol missing and we don't fix
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=f5d58d0c7212adc02b40dc4b7f6c9ebfde685d1c;p=linux.git

bcachefs: Fix path where dirent -> subvol missing and we don't fix

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
---

diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c
index 0d405b960a7c4..27bf07000baa2 100644
--- a/fs/bcachefs/fsck.c
+++ b/fs/bcachefs/fsck.c
@@ -1765,10 +1765,14 @@ static int check_dirent_to_subvol(struct btree_trans *trans, struct btree_iter *
 	if (ret && !bch2_err_matches(ret, ENOENT))
 		return ret;
 
-	if (fsck_err_on(ret, c, dirent_to_missing_subvol,
-			"dirent points to missing subvolume\n%s",
-			(bch2_bkey_val_to_text(&buf, c, d.s_c), buf.buf)))
-		return __remove_dirent(trans, d.k->p);
+	if (ret) {
+		if (fsck_err(c, dirent_to_missing_subvol,
+			     "dirent points to missing subvolume\n%s",
+			     (bch2_bkey_val_to_text(&buf, c, d.s_c), buf.buf)))
+			return __remove_dirent(trans, d.k->p);
+		ret = 0;
+		goto out;
+	}
 
 	ret = lookup_inode(trans, target_inum,
 			   &subvol_root, &target_snapshot);
@@ -1790,6 +1794,7 @@ static int check_dirent_to_subvol(struct btree_trans *trans, struct btree_iter *
 				  target_snapshot);
 	if (ret)
 		return ret;
+out:
 err:
 fsck_err:
 	printbuf_exit(&buf);