unsigned int i, start, end;
        unsigned int readed, start_blk = 0;
        int err = 0;
-       block_t total_node_blocks = 0;
+       block_t sit_valid_blocks[2] = {0, 0};
 
        do {
                readed = f2fs_ra_meta_pages(sbi, start_blk, BIO_MAX_VECS,
                        if (err)
                                return err;
                        seg_info_from_raw_sit(se, &sit);
-                       if (IS_NODESEG(se->type))
-                               total_node_blocks += se->valid_blocks;
+
+                       sit_valid_blocks[SE_PAGETYPE(se)] += se->valid_blocks;
 
                        if (f2fs_block_unit_discard(sbi)) {
                                /* build discard map only one time */
                sit = sit_in_journal(journal, i);
 
                old_valid_blocks = se->valid_blocks;
-               if (IS_NODESEG(se->type))
-                       total_node_blocks -= old_valid_blocks;
+
+               sit_valid_blocks[SE_PAGETYPE(se)] -= old_valid_blocks;
 
                err = check_block_count(sbi, start, &sit);
                if (err)
                        break;
                seg_info_from_raw_sit(se, &sit);
-               if (IS_NODESEG(se->type))
-                       total_node_blocks += se->valid_blocks;
+
+               sit_valid_blocks[SE_PAGETYPE(se)] += se->valid_blocks;
 
                if (f2fs_block_unit_discard(sbi)) {
                        if (is_set_ckpt_flags(sbi, CP_TRIMMED_FLAG)) {
        }
        up_read(&curseg->journal_rwsem);
 
-       if (!err && total_node_blocks != valid_node_count(sbi)) {
+       if (err)
+               return err;
+
+       if (sit_valid_blocks[NODE] != valid_node_count(sbi)) {
                f2fs_err(sbi, "SIT is corrupted node# %u vs %u",
-                        total_node_blocks, valid_node_count(sbi));
-               err = -EFSCORRUPTED;
+                        sit_valid_blocks[NODE], valid_node_count(sbi));
+               return -EFSCORRUPTED;
        }
 
-       return err;
+       if (sit_valid_blocks[DATA] + sit_valid_blocks[NODE] >
+                               valid_user_blocks(sbi)) {
+               f2fs_err(sbi, "SIT is corrupted data# %u %u vs %u",
+                        sit_valid_blocks[DATA], sit_valid_blocks[NODE],
+                        valid_user_blocks(sbi));
+               return -EFSCORRUPTED;
+       }
+
+       return 0;
 }
 
 static void init_free_segmap(struct f2fs_sb_info *sbi)