bcachefs: fsck: check_subdir_count logs path
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 16 Jun 2025 20:15:41 +0000 (16:15 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 16 Jun 2025 23:05:02 +0000 (19:05 -0400)
We can easily go from inode number -> path now, which makes for more
useful log messages.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fsck.c

index f2c8e904acab2bbb6cc5b5f861b3318f2fca1b30..96b9ea58705fa1113ee4e0665b366d6802da3e47 100644 (file)
@@ -2066,14 +2066,22 @@ static int check_subdir_count_notnested(struct btree_trans *trans, struct inode_
                                continue;
                }
 
-               if (fsck_err_on(i->inode.bi_nlink != i->count,
-                               trans, inode_dir_wrong_nlink,
-                               "directory %llu:%u with wrong i_nlink: got %u, should be %llu",
-                               w->last_pos.inode, i->inode.bi_snapshot, i->inode.bi_nlink, i->count)) {
-                       i->inode.bi_nlink = i->count;
-                       ret = bch2_fsck_write_inode(trans, &i->inode);
-                       if (ret)
-                               break;
+               if (i->inode.bi_nlink != i->count) {
+                       CLASS(printbuf, buf)();
+
+                       lockrestart_do(trans,
+                                      bch2_inum_snapshot_to_path(trans, w->last_pos.inode,
+                                                                 i->inode.bi_snapshot, NULL, &buf));
+
+                       if (fsck_err_on(i->inode.bi_nlink != i->count,
+                                       trans, inode_dir_wrong_nlink,
+                                       "directory with wrong i_nlink: got %u, should be %llu\n%s",
+                                       i->inode.bi_nlink, i->count, buf.buf)) {
+                               i->inode.bi_nlink = i->count;
+                               ret = bch2_fsck_write_inode(trans, &i->inode);
+                               if (ret)
+                                       break;
+                       }
                }
        }
 fsck_err: