|
@@ -505,7 +505,7 @@ static void add_discard_addrs(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
|
struct seg_entry *se = get_seg_entry(sbi, cpc->trim_start);
|
|
|
unsigned long *cur_map = (unsigned long *)se->cur_valid_map;
|
|
|
unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map;
|
|
|
- unsigned long dmap[entries];
|
|
|
+ unsigned long *dmap = SIT_I(sbi)->tmp_map;
|
|
|
unsigned int start = 0, end = -1;
|
|
|
bool force = (cpc->reason == CP_DISCARD);
|
|
|
int i;
|
|
@@ -924,7 +924,7 @@ static void __next_free_blkoff(struct f2fs_sb_info *sbi,
|
|
|
{
|
|
|
struct seg_entry *se = get_seg_entry(sbi, seg->segno);
|
|
|
int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long);
|
|
|
- unsigned long target_map[entries];
|
|
|
+ unsigned long *target_map = SIT_I(sbi)->tmp_map;
|
|
|
unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map;
|
|
|
unsigned long *cur_map = (unsigned long *)se->cur_valid_map;
|
|
|
int i, pos;
|
|
@@ -1855,6 +1855,10 @@ static int build_sit_info(struct f2fs_sb_info *sbi)
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
+ sit_i->tmp_map = kzalloc(SIT_VBLOCK_MAP_SIZE, GFP_KERNEL);
|
|
|
+ if (!sit_i->tmp_map)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
if (sbi->segs_per_sec > 1) {
|
|
|
sit_i->sec_entries = vzalloc(MAIN_SECS(sbi) *
|
|
|
sizeof(struct sec_entry));
|
|
@@ -2236,6 +2240,8 @@ static void destroy_sit_info(struct f2fs_sb_info *sbi)
|
|
|
kfree(sit_i->sentries[start].ckpt_valid_map);
|
|
|
}
|
|
|
}
|
|
|
+ kfree(sit_i->tmp_map);
|
|
|
+
|
|
|
vfree(sit_i->sentries);
|
|
|
vfree(sit_i->sec_entries);
|
|
|
kfree(sit_i->dirty_sentries_bitmap);
|