diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-01 16:45:36 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-01 17:28:35 -0400 |
commit | 9abf628c701ad92670d697624f674cc01d42705e (patch) | |
tree | c6a6e4280969eff8baea236f048691adc2c9213f | |
parent | 1612f56f71e46ea3a4922bf74cf43df9ab612247 (diff) |
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
-rw-r--r-- | fs/bcachefs/fsck.c | 9 |
1 files 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, |