Mounting f2fs with following issue:
sanity_check_inode: inode (ino=4827) has unsupported log cluster size: 0, run 
fsck to fix

->find_fsync_dnodes
 ->add_fsync_inode
  ->f2fs_iget_retry
   ->f2fs_iget
    ->do_read_inode
     ->sanity_check_inode

It is triggered when entering recovery mode after a system crash.
The root cause is 'i_log_cluster_size' is zero in f2fs inode with
F2FS_COMPR_FL flag. It will resulted in mounting failed, and the
filesystem need to be fscked.

We fix it by adding copying compresion information to f2fs inode
page when recover inode page in f2fs_recover_inode_page().

Cc: sta...@vger.kernel.org
Fixes: 4c8ff7095bef ("f2fs: support data compression")
Signed-off-by: Zhang Qilong <zhangqilo...@huawei.com>
---
 fs/f2fs/node.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 83cc8a9e4982..2c4031ed71c9 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -2799,6 +2799,14 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, 
struct page *page)
                        dst->i_crtime = src->i_crtime;
                        dst->i_crtime_nsec = src->i_crtime_nsec;
                }
+               if (f2fs_sb_has_compression(sbi) &&
+                       F2FS_FITS_IN_INODE(src, le16_to_cpu(src->i_extra_isize),
+                                               i_log_cluster_size)) {
+                       dst->i_compr_blocks = src->i_compr_blocks;
+                       dst->i_compress_algorithm = src->i_compress_algorithm;
+                       dst->i_log_cluster_size = src->i_log_cluster_size;
+                       dst->i_compress_flag = src->i_compress_flag;
+               }
        }
 
        new_ni = old_ni;
-- 
2.25.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to