diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c index b882771e4699..19467c5d612a 100644 --- a/fs/f2fs/namei.c +++ b/fs/f2fs/namei.c @@ -577,6 +577,14 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry) f2fs_folio_put(folio, false); goto fail; } + else if (unlikely(S_ISDIR(inode->i_mode) && inode->i_nlink == 1)) { + f2fs_warn(F2FS_I_SB(inode), "%s: directory inode (ino=%lx) has one i_nlink", + __func__, inode->i_ino); + err = -EFSCORRUPTED; + set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK); + f2fs_folio_put(folio, false); + goto fail; + } f2fs_balance_fs(sbi, true);