struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
        struct sit_info *sit_i;
        unsigned int sit_segs, start;
-       char *src_bitmap;
+       char *src_bitmap, *bitmap;
        unsigned int bitmap_size;
 
        /* allocate memory for SIT information */
        if (!sit_i->dirty_sentries_bitmap)
                return -ENOMEM;
 
+#ifdef CONFIG_F2FS_CHECK_FS
+       bitmap_size = MAIN_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE * 4;
+#else
+       bitmap_size = MAIN_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE * 3;
+#endif
+       sit_i->bitmap = f2fs_kvzalloc(sbi, bitmap_size, GFP_KERNEL);
+       if (!sit_i->bitmap)
+               return -ENOMEM;
+
+       bitmap = sit_i->bitmap;
+
        for (start = 0; start < MAIN_SEGS(sbi); start++) {
-               sit_i->sentries[start].cur_valid_map
-                       = f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
-               sit_i->sentries[start].ckpt_valid_map
-                       = f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
-               if (!sit_i->sentries[start].cur_valid_map ||
-                               !sit_i->sentries[start].ckpt_valid_map)
-                       return -ENOMEM;
+               sit_i->sentries[start].cur_valid_map = bitmap;
+               bitmap += SIT_VBLOCK_MAP_SIZE;
+
+               sit_i->sentries[start].ckpt_valid_map = bitmap;
+               bitmap += SIT_VBLOCK_MAP_SIZE;
 
 #ifdef CONFIG_F2FS_CHECK_FS
-               sit_i->sentries[start].cur_valid_map_mir
-                       = f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
-               if (!sit_i->sentries[start].cur_valid_map_mir)
-                       return -ENOMEM;
+               sit_i->sentries[start].cur_valid_map_mir = bitmap;
+               bitmap += SIT_VBLOCK_MAP_SIZE;
 #endif
 
-               sit_i->sentries[start].discard_map
-                       = f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE,
-                                                       GFP_KERNEL);
-               if (!sit_i->sentries[start].discard_map)
-                       return -ENOMEM;
+               sit_i->sentries[start].discard_map = bitmap;
+               bitmap += SIT_VBLOCK_MAP_SIZE;
        }
 
        sit_i->tmp_map = f2fs_kzalloc(sbi, SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
 static void destroy_sit_info(struct f2fs_sb_info *sbi)
 {
        struct sit_info *sit_i = SIT_I(sbi);
-       unsigned int start;
 
        if (!sit_i)
                return;
 
-       if (sit_i->sentries) {
-               for (start = 0; start < MAIN_SEGS(sbi); start++) {
-                       kvfree(sit_i->sentries[start].cur_valid_map);
-#ifdef CONFIG_F2FS_CHECK_FS
-                       kvfree(sit_i->sentries[start].cur_valid_map_mir);
-#endif
-                       kvfree(sit_i->sentries[start].ckpt_valid_map);
-                       kvfree(sit_i->sentries[start].discard_map);
-               }
-       }
+       if (sit_i->sentries)
+               kvfree(sit_i->bitmap);
        kvfree(sit_i->tmp_map);
 
        kvfree(sit_i->sentries);