Signed-off-by: Chao Yu <yuch...@huawei.com>
---
 fs/f2fs/checkpoint.c | 93 +++++++++++++++++++++++++++++++++++++++++++-
 fs/f2fs/f2fs.h       |  1 -
 fs/f2fs/super.c      | 91 -------------------------------------------
 3 files changed, 92 insertions(+), 93 deletions(-)

diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index e010fecce097..7d16cb36be47 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -833,6 +833,97 @@ static struct page *validate_checkpoint(struct 
f2fs_sb_info *sbi,
        return NULL;
 }
 
+static int sanity_check_ckpt(struct f2fs_sb_info *sbi)
+{
+       unsigned int total, fsmeta;
+       struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
+       struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
+       unsigned int ovp_segments, reserved_segments;
+       unsigned int main_segs, blocks_per_seg;
+       unsigned int sit_segs, nat_segs;
+       unsigned int sit_bitmap_size, nat_bitmap_size;
+       unsigned int log_blocks_per_seg;
+       unsigned int user_block_count;
+       unsigned int segment_count_main;
+       unsigned int cp_pack_start_sum, cp_blkaddr, cp_payload;
+       int i;
+
+       total = le32_to_cpu(raw_super->segment_count);
+       fsmeta = le32_to_cpu(raw_super->segment_count_ckpt);
+       sit_segs = le32_to_cpu(raw_super->segment_count_sit);
+       fsmeta += sit_segs;
+       nat_segs = le32_to_cpu(raw_super->segment_count_nat);
+       fsmeta += nat_segs;
+       fsmeta += le32_to_cpu(ckpt->rsvd_segment_count);
+       fsmeta += le32_to_cpu(raw_super->segment_count_ssa);
+
+       if (unlikely(fsmeta >= total))
+               return 1;
+
+       ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
+       reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
+
+       if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
+                       ovp_segments == 0 || reserved_segments == 0)) {
+               f2fs_msg(sbi->sb, KERN_ERR,
+                       "Wrong layout: check mkfs.f2fs version");
+               return 1;
+       }
+
+       user_block_count = le32_to_cpu(ckpt->user_block_count);
+       segment_count_main = le32_to_cpu(raw_super->segment_count_main);
+       log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
+       if (!user_block_count || user_block_count >=
+                       segment_count_main << log_blocks_per_seg) {
+               f2fs_msg(sbi->sb, KERN_ERR,
+                       "Wrong user_block_count: %u", user_block_count);
+               return 1;
+       }
+
+       main_segs = le32_to_cpu(raw_super->segment_count_main);
+       blocks_per_seg = sbi->blocks_per_seg;
+
+       for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
+               if (le32_to_cpu(ckpt->cur_node_segno[i]) >= main_segs ||
+                       le16_to_cpu(ckpt->cur_node_blkoff[i]) >= blocks_per_seg)
+                       return 1;
+       }
+       for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
+               if (le32_to_cpu(ckpt->cur_data_segno[i]) >= main_segs ||
+                       le16_to_cpu(ckpt->cur_data_blkoff[i]) >= blocks_per_seg)
+                       return 1;
+       }
+
+       sit_bitmap_size = le32_to_cpu(ckpt->sit_ver_bitmap_bytesize);
+       nat_bitmap_size = le32_to_cpu(ckpt->nat_ver_bitmap_bytesize);
+
+       if (sit_bitmap_size != ((sit_segs / 2) << log_blocks_per_seg) / 8 ||
+               nat_bitmap_size != ((nat_segs / 2) << log_blocks_per_seg) / 8) {
+               f2fs_msg(sbi->sb, KERN_ERR,
+                       "Wrong bitmap size: sit: %u, nat:%u",
+                       sit_bitmap_size, nat_bitmap_size);
+               return 1;
+       }
+
+       cp_pack_start_sum = __start_sum_addr(sbi);
+       cp_blkaddr = __start_cp_addr(sbi);
+       cp_payload = __cp_payload(sbi);
+       if (cp_pack_start_sum < cp_payload + 1 ||
+               cp_pack_start_sum > blocks_per_seg - 1 -
+                       NR_CURSEG_TYPE) {
+               f2fs_msg(sbi->sb, KERN_ERR,
+                       "Wrong cp_pack_start_sum: %u",
+                       cp_pack_start_sum);
+               return 1;
+       }
+
+       if (unlikely(f2fs_cp_error(sbi))) {
+               f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck");
+               return 1;
+       }
+       return 0;
+}
+
 int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
 {
        struct f2fs_checkpoint *cp_block;
@@ -883,7 +974,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
                sbi->cur_cp_pack = 2;
 
        /* Sanity checking of checkpoint */
-       if (f2fs_sanity_check_ckpt(sbi))
+       if (sanity_check_ckpt(sbi))
                goto free_fail_no_cp;
 
        if (cp_blks <= 1)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index adee43288593..fa5d0ebf8998 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2817,7 +2817,6 @@ int f2fs_commit_super(struct f2fs_sb_info *sbi, bool 
recover);
 int f2fs_sync_fs(struct super_block *sb, int sync);
 extern __printf(3, 4)
 void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...);
-int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
 
 /*
  * hash.c
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 622acaab46b2..0eb5c9b659f7 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -2295,97 +2295,6 @@ static int sanity_check_raw_super(struct f2fs_sb_info 
*sbi,
        return 0;
 }
 
-int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
-{
-       unsigned int total, fsmeta;
-       struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
-       struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
-       unsigned int ovp_segments, reserved_segments;
-       unsigned int main_segs, blocks_per_seg;
-       unsigned int sit_segs, nat_segs;
-       unsigned int sit_bitmap_size, nat_bitmap_size;
-       unsigned int log_blocks_per_seg;
-       unsigned int user_block_count;
-       unsigned int segment_count_main;
-       unsigned int cp_pack_start_sum, cp_blkaddr, cp_payload;
-       int i;
-
-       total = le32_to_cpu(raw_super->segment_count);
-       fsmeta = le32_to_cpu(raw_super->segment_count_ckpt);
-       sit_segs = le32_to_cpu(raw_super->segment_count_sit);
-       fsmeta += sit_segs;
-       nat_segs = le32_to_cpu(raw_super->segment_count_nat);
-       fsmeta += nat_segs;
-       fsmeta += le32_to_cpu(ckpt->rsvd_segment_count);
-       fsmeta += le32_to_cpu(raw_super->segment_count_ssa);
-
-       if (unlikely(fsmeta >= total))
-               return 1;
-
-       ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
-       reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
-
-       if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
-                       ovp_segments == 0 || reserved_segments == 0)) {
-               f2fs_msg(sbi->sb, KERN_ERR,
-                       "Wrong layout: check mkfs.f2fs version");
-               return 1;
-       }
-
-       user_block_count = le32_to_cpu(ckpt->user_block_count);
-       segment_count_main = le32_to_cpu(raw_super->segment_count_main);
-       log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
-       if (!user_block_count || user_block_count >=
-                       segment_count_main << log_blocks_per_seg) {
-               f2fs_msg(sbi->sb, KERN_ERR,
-                       "Wrong user_block_count: %u", user_block_count);
-               return 1;
-       }
-
-       main_segs = le32_to_cpu(raw_super->segment_count_main);
-       blocks_per_seg = sbi->blocks_per_seg;
-
-       for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
-               if (le32_to_cpu(ckpt->cur_node_segno[i]) >= main_segs ||
-                       le16_to_cpu(ckpt->cur_node_blkoff[i]) >= blocks_per_seg)
-                       return 1;
-       }
-       for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
-               if (le32_to_cpu(ckpt->cur_data_segno[i]) >= main_segs ||
-                       le16_to_cpu(ckpt->cur_data_blkoff[i]) >= blocks_per_seg)
-                       return 1;
-       }
-
-       sit_bitmap_size = le32_to_cpu(ckpt->sit_ver_bitmap_bytesize);
-       nat_bitmap_size = le32_to_cpu(ckpt->nat_ver_bitmap_bytesize);
-
-       if (sit_bitmap_size != ((sit_segs / 2) << log_blocks_per_seg) / 8 ||
-               nat_bitmap_size != ((nat_segs / 2) << log_blocks_per_seg) / 8) {
-               f2fs_msg(sbi->sb, KERN_ERR,
-                       "Wrong bitmap size: sit: %u, nat:%u",
-                       sit_bitmap_size, nat_bitmap_size);
-               return 1;
-       }
-
-       cp_pack_start_sum = __start_sum_addr(sbi);
-       cp_blkaddr = __start_cp_addr(sbi);
-       cp_payload = __cp_payload(sbi);
-       if (cp_pack_start_sum < cp_payload + 1 ||
-               cp_pack_start_sum > blocks_per_seg - 1 -
-                       NR_CURSEG_TYPE) {
-               f2fs_msg(sbi->sb, KERN_ERR,
-                       "Wrong cp_pack_start_sum: %u",
-                       cp_pack_start_sum);
-               return 1;
-       }
-
-       if (unlikely(f2fs_cp_error(sbi))) {
-               f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck");
-               return 1;
-       }
-       return 0;
-}
-
 static void init_sb_info(struct f2fs_sb_info *sbi)
 {
        struct f2fs_super_block *raw_super = sbi->raw_super;
-- 
2.18.0.rc1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to