From 9abf628c701ad92670d697624f674cc01d42705e Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Fri, 1 Jun 2018 16:45:36 -0400 Subject: bcachefs: Fix a spurious error in fsck If fsck finds an unreachable directory, it could just be because we crashed between deleting the dirent and deleting the inode, since that isn't done atomically yet - it's only a real error if the directory isn't empty --- fs/bcachefs/fsck.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c index c554a987f3aa..048b5c103eb0 100644 --- a/fs/bcachefs/fsck.c +++ b/fs/bcachefs/fsck.c @@ -747,8 +747,13 @@ up: } for_each_btree_key(&iter, c, BTREE_ID_INODES, POS_MIN, 0, k) { - if (k.k->type != BCH_INODE_FS || - !S_ISDIR(le16_to_cpu(bkey_s_c_to_inode(k).v->bi_mode))) + if (k.k->type != BCH_INODE_FS) + continue; + + if (!S_ISDIR(le16_to_cpu(bkey_s_c_to_inode(k).v->bi_mode))) + continue; + + if (!bch2_empty_dir(c, k.k->p.inode)) continue; if (fsck_err_on(!inode_bitmap_test(&dirs_done, k.k->p.inode), c, -- cgit v1.2.3