| From 3a22012def3e2faef6cc0b80fd1f0a46a0eca91b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 9 Oct 2020 10:40:48 +0800 |
| Subject: f2fs: fix to set SBI_NEED_FSCK flag for inconsistent inode |
| |
| From: Chao Yu <yuchao0@huawei.com> |
| |
| [ Upstream commit d662fad143c0470ad7f46ea7b02da539f613d7d7 ] |
| |
| If compressed inode has inconsistent fields on i_compress_algorithm, |
| i_compr_blocks and i_log_cluster_size, we missed to set SBI_NEED_FSCK |
| to notice fsck to repair the inode, fix it. |
| |
| Signed-off-by: Chao Yu <yuchao0@huawei.com> |
| Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/f2fs/inode.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c |
| index 5195e083fc1e6..12c7fa1631935 100644 |
| --- a/fs/f2fs/inode.c |
| +++ b/fs/f2fs/inode.c |
| @@ -299,6 +299,7 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page) |
| F2FS_FITS_IN_INODE(ri, fi->i_extra_isize, |
| i_log_cluster_size)) { |
| if (ri->i_compress_algorithm >= COMPRESS_MAX) { |
| + set_sbi_flag(sbi, SBI_NEED_FSCK); |
| f2fs_warn(sbi, "%s: inode (ino=%lx) has unsupported " |
| "compress algorithm: %u, run fsck to fix", |
| __func__, inode->i_ino, |
| @@ -307,6 +308,7 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page) |
| } |
| if (le64_to_cpu(ri->i_compr_blocks) > |
| SECTOR_TO_BLOCK(inode->i_blocks)) { |
| + set_sbi_flag(sbi, SBI_NEED_FSCK); |
| f2fs_warn(sbi, "%s: inode (ino=%lx) has inconsistent " |
| "i_compr_blocks:%llu, i_blocks:%llu, run fsck to fix", |
| __func__, inode->i_ino, |
| @@ -316,6 +318,7 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page) |
| } |
| if (ri->i_log_cluster_size < MIN_COMPRESS_LOG_SIZE || |
| ri->i_log_cluster_size > MAX_COMPRESS_LOG_SIZE) { |
| + set_sbi_flag(sbi, SBI_NEED_FSCK); |
| f2fs_warn(sbi, "%s: inode (ino=%lx) has unsupported " |
| "log cluster size: %u, run fsck to fix", |
| __func__, inode->i_ino, |
| -- |
| 2.27.0 |
| |