mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
f2fs: use kvmalloc, if kmalloc is failed
One report says memalloc failure during mount. (unwind_backtrace) from [<c010cd4c>] (show_stack+0x10/0x14) (show_stack) from [<c049c6b8>] (dump_stack+0x8c/0xa0) (dump_stack) from [<c024fcf0>] (warn_alloc+0xc4/0x160) (warn_alloc) from [<c0250218>] (__alloc_pages_nodemask+0x3f4/0x10d0) (__alloc_pages_nodemask) from [<c0270450>] (kmalloc_order_trace+0x2c/0x120) (kmalloc_order_trace) from [<c03fa748>] (build_node_manager+0x35c/0x688) (build_node_manager) from [<c03de494>] (f2fs_fill_super+0xf0c/0x16cc) (f2fs_fill_super) from [<c02a5864>] (mount_bdev+0x15c/0x188) (mount_bdev) from [<c03da624>] (f2fs_mount+0x18/0x20) (f2fs_mount) from [<c02a68b8>] (mount_fs+0x158/0x19c) (mount_fs) from [<c02c3c9c>] (vfs_kern_mount+0x78/0x134) (vfs_kern_mount) from [<c02c76ac>] (do_mount+0x474/0xca4) (do_mount) from [<c02c8264>] (SyS_mount+0x94/0xbc) (SyS_mount) from [<c0108180>] (ret_fast_syscall+0x0/0x48) Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
af56b48708
commit
5222595d09
11 changed files with 76 additions and 70 deletions
|
@ -706,7 +706,7 @@ init_thread:
|
|||
"f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev));
|
||||
if (IS_ERR(fcc->f2fs_issue_flush)) {
|
||||
err = PTR_ERR(fcc->f2fs_issue_flush);
|
||||
kfree(fcc);
|
||||
kvfree(fcc);
|
||||
SM_I(sbi)->fcc_info = NULL;
|
||||
return err;
|
||||
}
|
||||
|
@ -725,7 +725,7 @@ void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free)
|
|||
kthread_stop(flush_thread);
|
||||
}
|
||||
if (free) {
|
||||
kfree(fcc);
|
||||
kvfree(fcc);
|
||||
SM_I(sbi)->fcc_info = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -2013,7 +2013,7 @@ init_thread:
|
|||
"f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev));
|
||||
if (IS_ERR(dcc->f2fs_issue_discard)) {
|
||||
err = PTR_ERR(dcc->f2fs_issue_discard);
|
||||
kfree(dcc);
|
||||
kvfree(dcc);
|
||||
SM_I(sbi)->dcc_info = NULL;
|
||||
return err;
|
||||
}
|
||||
|
@ -2030,7 +2030,7 @@ static void destroy_discard_cmd_control(struct f2fs_sb_info *sbi)
|
|||
|
||||
f2fs_stop_discard_thread(sbi);
|
||||
|
||||
kfree(dcc);
|
||||
kvfree(dcc);
|
||||
SM_I(sbi)->dcc_info = NULL;
|
||||
}
|
||||
|
||||
|
@ -4317,7 +4317,7 @@ static void destroy_dirty_segmap(struct f2fs_sb_info *sbi)
|
|||
|
||||
destroy_victim_secmap(sbi);
|
||||
SM_I(sbi)->dirty_info = NULL;
|
||||
kfree(dirty_i);
|
||||
kvfree(dirty_i);
|
||||
}
|
||||
|
||||
static void destroy_curseg(struct f2fs_sb_info *sbi)
|
||||
|
@ -4329,10 +4329,10 @@ static void destroy_curseg(struct f2fs_sb_info *sbi)
|
|||
return;
|
||||
SM_I(sbi)->curseg_array = NULL;
|
||||
for (i = 0; i < NR_CURSEG_TYPE; i++) {
|
||||
kfree(array[i].sum_blk);
|
||||
kfree(array[i].journal);
|
||||
kvfree(array[i].sum_blk);
|
||||
kvfree(array[i].journal);
|
||||
}
|
||||
kfree(array);
|
||||
kvfree(array);
|
||||
}
|
||||
|
||||
static void destroy_free_segmap(struct f2fs_sb_info *sbi)
|
||||
|
@ -4343,7 +4343,7 @@ static void destroy_free_segmap(struct f2fs_sb_info *sbi)
|
|||
SM_I(sbi)->free_info = NULL;
|
||||
kvfree(free_i->free_segmap);
|
||||
kvfree(free_i->free_secmap);
|
||||
kfree(free_i);
|
||||
kvfree(free_i);
|
||||
}
|
||||
|
||||
static void destroy_sit_info(struct f2fs_sb_info *sbi)
|
||||
|
@ -4356,26 +4356,26 @@ static void destroy_sit_info(struct f2fs_sb_info *sbi)
|
|||
|
||||
if (sit_i->sentries) {
|
||||
for (start = 0; start < MAIN_SEGS(sbi); start++) {
|
||||
kfree(sit_i->sentries[start].cur_valid_map);
|
||||
kvfree(sit_i->sentries[start].cur_valid_map);
|
||||
#ifdef CONFIG_F2FS_CHECK_FS
|
||||
kfree(sit_i->sentries[start].cur_valid_map_mir);
|
||||
kvfree(sit_i->sentries[start].cur_valid_map_mir);
|
||||
#endif
|
||||
kfree(sit_i->sentries[start].ckpt_valid_map);
|
||||
kfree(sit_i->sentries[start].discard_map);
|
||||
kvfree(sit_i->sentries[start].ckpt_valid_map);
|
||||
kvfree(sit_i->sentries[start].discard_map);
|
||||
}
|
||||
}
|
||||
kfree(sit_i->tmp_map);
|
||||
kvfree(sit_i->tmp_map);
|
||||
|
||||
kvfree(sit_i->sentries);
|
||||
kvfree(sit_i->sec_entries);
|
||||
kvfree(sit_i->dirty_sentries_bitmap);
|
||||
|
||||
SM_I(sbi)->sit_info = NULL;
|
||||
kfree(sit_i->sit_bitmap);
|
||||
kvfree(sit_i->sit_bitmap);
|
||||
#ifdef CONFIG_F2FS_CHECK_FS
|
||||
kfree(sit_i->sit_bitmap_mir);
|
||||
kvfree(sit_i->sit_bitmap_mir);
|
||||
#endif
|
||||
kfree(sit_i);
|
||||
kvfree(sit_i);
|
||||
}
|
||||
|
||||
void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
|
||||
|
@ -4391,7 +4391,7 @@ void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
|
|||
destroy_free_segmap(sbi);
|
||||
destroy_sit_info(sbi);
|
||||
sbi->sm_info = NULL;
|
||||
kfree(sm_info);
|
||||
kvfree(sm_info);
|
||||
}
|
||||
|
||||
int __init f2fs_create_segment_manager_caches(void)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue