diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 3e4874b0c55c97d32d4df0c5f197a792512afa37..fb594edc0837c672c0b49a8dc83b9fcd81c0c54d 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c @@ -459,6 +459,8 @@ int nilfs_read_inode_common(struct inode *inode, inode->i_atime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec); inode->i_ctime.tv_nsec = le32_to_cpu(raw_inode->i_ctime_nsec); inode->i_mtime.tv_nsec = le32_to_cpu(raw_inode->i_mtime_nsec); + if (nilfs_is_metadata_file_inode(inode) && !S_ISREG(inode->i_mode)) + return -EIO; /* this inode is for metadata and corrupted */ if (inode->i_nlink == 0) return -ESTALE; /* this inode is deleted */