Hi Chao,

I don't see any reason to do this at all.

Thanks,

On 07/26, Chao Yu wrote:
> 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