After commit
0b6d4ca04a86 ("f2fs: don't return vmalloc() memory from
f2fs_kmalloc()"), f2fs_k{m,z}alloc() will not return vmalloc()'ed
memory, so clean up to use kfree() instead of kvfree() to free
vmalloc()'ed memory.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
return (void *)f2fs_acl;
fail:
return (void *)f2fs_acl;
fail:
return ERR_PTR(-EINVAL);
}
return ERR_PTR(-EINVAL);
}
acl = NULL;
else
acl = ERR_PTR(retval);
acl = NULL;
else
acl = ERR_PTR(retval);
error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0);
error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0);
if (!error)
set_cached_acl(inode, type, acl);
if (!error)
set_cached_acl(inode, type, acl);
bio->bi_private = dio->orig_private;
bio->bi_end_io = dio->orig_end_io;
bio->bi_private = dio->orig_private;
bio->bi_end_io = dio->orig_end_io;
list_del(&si->stat_list);
mutex_unlock(&f2fs_stat_mutex);
list_del(&si->stat_list);
mutex_unlock(&f2fs_stat_mutex);
}
void __init f2fs_create_root_stats(void)
}
void __init f2fs_create_root_stats(void)
min(FSLABEL_MAX, count)))
err = -EFAULT;
min(FSLABEL_MAX, count)))
err = -EFAULT;
"f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
if (IS_ERR(gc_th->f2fs_gc_task)) {
err = PTR_ERR(gc_th->f2fs_gc_task);
"f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
if (IS_ERR(gc_th->f2fs_gc_task)) {
err = PTR_ERR(gc_th->f2fs_gc_task);
sbi->gc_thread = NULL;
}
out:
sbi->gc_thread = NULL;
}
out:
if (!gc_th)
return;
kthread_stop(gc_th->f2fs_gc_task);
if (!gc_th)
return;
kthread_stop(gc_th->f2fs_gc_task);
!f2fs_has_inline_xattr(dir))
F2FS_I(dir)->i_inline_xattr_size = 0;
!f2fs_has_inline_xattr(dir))
F2FS_I(dir)->i_inline_xattr_size = 0;
return 0;
recover:
lock_page(ipage);
return 0;
recover:
lock_page(ipage);
set_page_dirty(ipage);
f2fs_put_page(ipage, 1);
set_page_dirty(ipage);
f2fs_put_page(ipage, 1);
f2fs_handle_failed_inode(inode);
out_free_encrypted_link:
if (disk_link.name != (unsigned char *)symname)
f2fs_handle_failed_inode(inode);
out_free_encrypted_link:
if (disk_link.name != (unsigned char *)symname)
- kvfree(disk_link.name);
kvfree(nm_i->nat_bitmap_mir);
#endif
sbi->nm_info = NULL;
kvfree(nm_i->nat_bitmap_mir);
#endif
sbi->nm_info = NULL;
}
int __init f2fs_create_node_manager_caches(void)
}
int __init f2fs_create_node_manager_caches(void)
"f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev));
if (IS_ERR(fcc->f2fs_issue_flush)) {
err = PTR_ERR(fcc->f2fs_issue_flush);
"f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev));
if (IS_ERR(fcc->f2fs_issue_flush)) {
err = PTR_ERR(fcc->f2fs_issue_flush);
SM_I(sbi)->fcc_info = NULL;
return err;
}
SM_I(sbi)->fcc_info = NULL;
return err;
}
kthread_stop(flush_thread);
}
if (free) {
kthread_stop(flush_thread);
}
if (free) {
SM_I(sbi)->fcc_info = NULL;
}
}
SM_I(sbi)->fcc_info = NULL;
}
}
"f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev));
if (IS_ERR(dcc->f2fs_issue_discard)) {
err = PTR_ERR(dcc->f2fs_issue_discard);
"f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev));
if (IS_ERR(dcc->f2fs_issue_discard)) {
err = PTR_ERR(dcc->f2fs_issue_discard);
SM_I(sbi)->dcc_info = NULL;
return err;
}
SM_I(sbi)->dcc_info = NULL;
return err;
}
if (unlikely(atomic_read(&dcc->discard_cmd_cnt)))
f2fs_issue_discard_timeout(sbi);
if (unlikely(atomic_read(&dcc->discard_cmd_cnt)))
f2fs_issue_discard_timeout(sbi);
SM_I(sbi)->dcc_info = NULL;
}
SM_I(sbi)->dcc_info = NULL;
}
destroy_victim_secmap(sbi);
SM_I(sbi)->dirty_info = NULL;
destroy_victim_secmap(sbi);
SM_I(sbi)->dirty_info = NULL;
}
static void destroy_curseg(struct f2fs_sb_info *sbi)
}
static void destroy_curseg(struct f2fs_sb_info *sbi)
return;
SM_I(sbi)->curseg_array = NULL;
for (i = 0; i < NR_CURSEG_TYPE; i++) {
return;
SM_I(sbi)->curseg_array = NULL;
for (i = 0; i < NR_CURSEG_TYPE; i++) {
- kvfree(array[i].sum_blk);
- kvfree(array[i].journal);
+ kfree(array[i].sum_blk);
+ kfree(array[i].journal);
}
static void destroy_free_segmap(struct f2fs_sb_info *sbi)
}
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);
SM_I(sbi)->free_info = NULL;
kvfree(free_i->free_segmap);
kvfree(free_i->free_secmap);
}
static void destroy_sit_info(struct f2fs_sb_info *sbi)
}
static void destroy_sit_info(struct f2fs_sb_info *sbi)
if (sit_i->sentries)
kvfree(sit_i->bitmap);
if (sit_i->sentries)
kvfree(sit_i->bitmap);
- kvfree(sit_i->tmp_map);
kvfree(sit_i->sentries);
kvfree(sit_i->sec_entries);
kvfree(sit_i->sentries);
kvfree(sit_i->sec_entries);
kvfree(sit_i->sit_bitmap_mir);
kvfree(sit_i->invalid_segmap);
#endif
kvfree(sit_i->sit_bitmap_mir);
kvfree(sit_i->invalid_segmap);
#endif
}
void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
}
void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
destroy_free_segmap(sbi);
destroy_sit_info(sbi);
sbi->sm_info = NULL;
destroy_free_segmap(sbi);
destroy_sit_info(sbi);
sbi->sm_info = NULL;
}
int __init f2fs_create_segment_manager_caches(void)
}
int __init f2fs_create_segment_manager_caches(void)
if (is_inline)
kmem_cache_free(sbi->inline_xattr_slab, xattr_addr);
else
if (is_inline)
kmem_cache_free(sbi->inline_xattr_slab, xattr_addr);
else
}
static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
}
static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
*base_addr = txattr_addr;
return 0;
fail:
*base_addr = txattr_addr;
return 0;
fail:
}
error = buffer_size - rest;
cleanup:
}
error = buffer_size - rest;
cleanup:
if (!error && S_ISDIR(inode->i_mode))
set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP);
exit:
if (!error && S_ISDIR(inode->i_mode))
set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP);
exit: