* [f2fs-dev] [PATCH 1/3] f2fs: clean up check condition for writting beyond EOF @ 2019-11-01 9:53 Chao Yu 2019-11-01 9:53 ` [f2fs-dev] [PATCH 2/3] f2fs: show f2fs instance in printk_ratelimited Chao Yu 2019-11-01 9:53 ` [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" Chao Yu 0 siblings, 2 replies; 9+ messages in thread From: Chao Yu @ 2019-11-01 9:53 UTC (permalink / raw) To: jaegeuk; +Cc: linux-kernel, linux-f2fs-devel Clean up with below codes suggested by Eric: __write_data_page() unsigned nr_pages = DIV_ROUND_UP(i_size, PAGE_SIZE); /* * If the offset is out-of-range of file size, * this page does not have to be written to disk. */ if (page->index >= nr_pages) goto out; Signed-off-by: Chao Yu <yuchao0@huawei.com> --- fs/f2fs/data.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index ba3bcf4c7889..ca7161e38d1f 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -2204,6 +2204,7 @@ static int __write_data_page(struct page *page, bool *submitted, const pgoff_t end_index = ((unsigned long long) i_size) >> PAGE_SHIFT; loff_t psize = (page->index + 1) << PAGE_SHIFT; + unsigned nr_pages = DIV_ROUND_UP(i_size, PAGE_SIZE); unsigned offset = 0; bool need_balance_fs = false; int err = 0; @@ -2248,8 +2249,7 @@ static int __write_data_page(struct page *page, bool *submitted, * If the offset is out-of-range of file size, * this page does not have to be written to disk. */ - offset = i_size & (PAGE_SIZE - 1); - if ((page->index >= end_index + 1) || !offset) + if (page->index >= nr_pages) goto out; zero_user_segment(page, offset, PAGE_SIZE); -- 2.18.0.rc1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [f2fs-dev] [PATCH 2/3] f2fs: show f2fs instance in printk_ratelimited 2019-11-01 9:53 [f2fs-dev] [PATCH 1/3] f2fs: clean up check condition for writting beyond EOF Chao Yu @ 2019-11-01 9:53 ` Chao Yu 2019-11-01 9:53 ` [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" Chao Yu 1 sibling, 0 replies; 9+ messages in thread From: Chao Yu @ 2019-11-01 9:53 UTC (permalink / raw) To: jaegeuk; +Cc: linux-kernel, linux-f2fs-devel As Eric mentioned, bare printk{,_ratelimited} won't show which filesystem instance these message is coming from, this patch tries to show fs instance with sb->s_id field in all places we missed before. Signed-off-by: Chao Yu <yuchao0@huawei.com> --- fs/f2fs/checkpoint.c | 2 +- fs/f2fs/data.c | 9 +++++---- fs/f2fs/dir.c | 7 ++++--- fs/f2fs/f2fs.h | 24 +++++++++++++----------- fs/f2fs/file.c | 2 +- fs/f2fs/gc.c | 2 +- fs/f2fs/inode.c | 2 +- fs/f2fs/node.c | 2 +- fs/f2fs/segment.c | 9 +++++---- 9 files changed, 32 insertions(+), 27 deletions(-) diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index a0eef95b9e0e..ffdaba0c55d2 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -581,7 +581,7 @@ int f2fs_acquire_orphan_inode(struct f2fs_sb_info *sbi) if (time_to_inject(sbi, FAULT_ORPHAN)) { spin_unlock(&im->ino_lock); - f2fs_show_injection_info(FAULT_ORPHAN); + f2fs_show_injection_info(sbi, FAULT_ORPHAN); return -ENOSPC; } diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index ca7161e38d1f..0bcb28d70894 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -168,9 +168,10 @@ static bool f2fs_bio_post_read_required(struct bio *bio) static void f2fs_read_end_io(struct bio *bio) { - if (time_to_inject(F2FS_P_SB(bio_first_page_all(bio)), - FAULT_READ_IO)) { - f2fs_show_injection_info(FAULT_READ_IO); + struct f2fs_sb_info *sbi = F2FS_P_SB(bio_first_page_all(bio)); + + if (time_to_inject(sbi, FAULT_READ_IO)) { + f2fs_show_injection_info(sbi, FAULT_READ_IO); bio->bi_status = BLK_STS_IOERR; } @@ -192,7 +193,7 @@ static void f2fs_write_end_io(struct bio *bio) struct bvec_iter_all iter_all; if (time_to_inject(sbi, FAULT_WRITE_IO)) { - f2fs_show_injection_info(FAULT_WRITE_IO); + f2fs_show_injection_info(sbi, FAULT_WRITE_IO); bio->bi_status = BLK_STS_IOERR; } diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c index 4033778bcbbf..c967cacf979e 100644 --- a/fs/f2fs/dir.c +++ b/fs/f2fs/dir.c @@ -628,7 +628,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name, start: if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) { - f2fs_show_injection_info(FAULT_DIR_DEPTH); + f2fs_show_injection_info(F2FS_I_SB(dir), FAULT_DIR_DEPTH); return -ENOSPC; } @@ -919,8 +919,9 @@ int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d, bit_pos++; ctx->pos = start_pos + bit_pos; printk_ratelimited( - "%s, invalid namelen(0), ino:%u, run fsck to fix.", - KERN_WARNING, le32_to_cpu(de->ino)); + "%sF2FS-fs (%s): invalid namelen(0), ino:%u, run fsck to fix.", + KERN_WARNING, sbi->sb->s_id, + le32_to_cpu(de->ino)); set_sbi_flag(sbi, SBI_NEED_FSCK); continue; } diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index c681f51e351b..3f6204202788 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -1374,9 +1374,10 @@ struct f2fs_private_dio { }; #ifdef CONFIG_F2FS_FAULT_INJECTION -#define f2fs_show_injection_info(type) \ - printk_ratelimited("%sF2FS-fs : inject %s in %s of %pS\n", \ - KERN_INFO, f2fs_fault_name[type], \ +#define f2fs_show_injection_info(sbi, type) \ + printk_ratelimited("%sF2FS-fs (%s) : inject %s in %s of %pS\n", \ + KERN_INFO, sbi->sb->s_id, \ + f2fs_fault_name[type], \ __func__, __builtin_return_address(0)) static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type) { @@ -1396,7 +1397,7 @@ static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type) return false; } #else -#define f2fs_show_injection_info(type) do { } while (0) +#define f2fs_show_injection_info(sbi, type) do { } while (0) static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type) { return false; @@ -1781,7 +1782,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi, return ret; if (time_to_inject(sbi, FAULT_BLOCK)) { - f2fs_show_injection_info(FAULT_BLOCK); + f2fs_show_injection_info(sbi, FAULT_BLOCK); release = *count; goto release_quota; } @@ -2033,7 +2034,7 @@ static inline int inc_valid_node_count(struct f2fs_sb_info *sbi, } if (time_to_inject(sbi, FAULT_BLOCK)) { - f2fs_show_injection_info(FAULT_BLOCK); + f2fs_show_injection_info(sbi, FAULT_BLOCK); goto enospc; } @@ -2148,7 +2149,8 @@ static inline struct page *f2fs_grab_cache_page(struct address_space *mapping, return page; if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_ALLOC)) { - f2fs_show_injection_info(FAULT_PAGE_ALLOC); + f2fs_show_injection_info(F2FS_M_SB(mapping), + FAULT_PAGE_ALLOC); return NULL; } } @@ -2163,7 +2165,7 @@ static inline struct page *f2fs_pagecache_get_page( int fgp_flags, gfp_t gfp_mask) { if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_GET)) { - f2fs_show_injection_info(FAULT_PAGE_GET); + f2fs_show_injection_info(F2FS_M_SB(mapping), FAULT_PAGE_GET); return NULL; } @@ -2232,7 +2234,7 @@ static inline struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, return bio; } if (time_to_inject(sbi, FAULT_ALLOC_BIO)) { - f2fs_show_injection_info(FAULT_ALLOC_BIO); + f2fs_show_injection_info(sbi, FAULT_ALLOC_BIO); return NULL; } @@ -2799,7 +2801,7 @@ static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi, void *ret; if (time_to_inject(sbi, FAULT_KMALLOC)) { - f2fs_show_injection_info(FAULT_KMALLOC); + f2fs_show_injection_info(sbi, FAULT_KMALLOC); return NULL; } @@ -2820,7 +2822,7 @@ static inline void *f2fs_kvmalloc(struct f2fs_sb_info *sbi, size_t size, gfp_t flags) { if (time_to_inject(sbi, FAULT_KVMALLOC)) { - f2fs_show_injection_info(FAULT_KVMALLOC); + f2fs_show_injection_info(sbi, FAULT_KVMALLOC); return NULL; } diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index f6c038e8a6a7..e5ce697c0544 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -681,7 +681,7 @@ int f2fs_truncate(struct inode *inode) trace_f2fs_truncate(inode); if (time_to_inject(F2FS_I_SB(inode), FAULT_TRUNCATE)) { - f2fs_show_injection_info(FAULT_TRUNCATE); + f2fs_show_injection_info(F2FS_I_SB(inode), FAULT_TRUNCATE); return -EIO; } diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index ef7686a82722..24a3b6b52210 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -54,7 +54,7 @@ static int gc_thread_func(void *data) } if (time_to_inject(sbi, FAULT_CHECKPOINT)) { - f2fs_show_injection_info(FAULT_CHECKPOINT); + f2fs_show_injection_info(sbi, FAULT_CHECKPOINT); f2fs_stop_checkpoint(sbi, false); } diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index 386ad54c13c3..502bd491336a 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -681,7 +681,7 @@ void f2fs_evict_inode(struct inode *inode) err = f2fs_truncate(inode); if (time_to_inject(sbi, FAULT_EVICT_INODE)) { - f2fs_show_injection_info(FAULT_EVICT_INODE); + f2fs_show_injection_info(sbi, FAULT_EVICT_INODE); err = -EIO; } diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 8b66bc4c004b..6912faba811e 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -2399,7 +2399,7 @@ bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid) struct free_nid *i = NULL; retry: if (time_to_inject(sbi, FAULT_ALLOC_NID)) { - f2fs_show_injection_info(FAULT_ALLOC_NID); + f2fs_show_injection_info(sbi, FAULT_ALLOC_NID); return false; } diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 253d72c2663c..c525d8c87ddf 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -480,7 +480,7 @@ int f2fs_commit_inmem_pages(struct inode *inode) void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need) { if (time_to_inject(sbi, FAULT_CHECKPOINT)) { - f2fs_show_injection_info(FAULT_CHECKPOINT); + f2fs_show_injection_info(sbi, FAULT_CHECKPOINT); f2fs_stop_checkpoint(sbi, false); } @@ -1008,8 +1008,9 @@ static void __remove_discard_cmd(struct f2fs_sb_info *sbi, if (dc->error) printk_ratelimited( - "%sF2FS-fs: Issue discard(%u, %u, %u) failed, ret: %d", - KERN_INFO, dc->lstart, dc->start, dc->len, dc->error); + "%sF2FS-fs (%s): Issue discard(%u, %u, %u) failed, ret: %d", + KERN_INFO, sbi->sb->s_id, + dc->lstart, dc->start, dc->len, dc->error); __detach_discard_cmd(dcc, dc); } @@ -1149,7 +1150,7 @@ static int __submit_discard_cmd(struct f2fs_sb_info *sbi, dc->len += len; if (time_to_inject(sbi, FAULT_DISCARD)) { - f2fs_show_injection_info(FAULT_DISCARD); + f2fs_show_injection_info(sbi, FAULT_DISCARD); err = -EIO; goto submit; } -- 2.18.0.rc1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" 2019-11-01 9:53 [f2fs-dev] [PATCH 1/3] f2fs: clean up check condition for writting beyond EOF Chao Yu 2019-11-01 9:53 ` [f2fs-dev] [PATCH 2/3] f2fs: show f2fs instance in printk_ratelimited Chao Yu @ 2019-11-01 9:53 ` Chao Yu [not found] ` <201911022233.zTMqGPBr%lkp@intel.com> 2019-11-05 0:02 ` Jaegeuk Kim 1 sibling, 2 replies; 9+ messages in thread From: Chao Yu @ 2019-11-01 9:53 UTC (permalink / raw) To: jaegeuk; +Cc: linux-kernel, linux-f2fs-devel This reverts commit 5222595d093ebe80329d38d255d14316257afb3e. As discussed with Eric, as kvmalloc() will try kmalloc() first, so when we need allocate large size memory, it'd better to use f2fs_kvmalloc() directly rather than adding additional fallback logic to call kvmalloc() after we failed in f2fs_kmalloc(). In order to avoid allocation failure described in original commit, I change to use f2fs_kvmalloc() for .free_nid_bitmap bitmap memory. Signed-off-by: Chao Yu <yuchao0@huawei.com> --- fs/f2fs/acl.c | 6 ++--- fs/f2fs/checkpoint.c | 2 +- fs/f2fs/data.c | 2 +- fs/f2fs/debug.c | 2 +- fs/f2fs/dir.c | 6 ++--- fs/f2fs/f2fs.h | 10 ++----- fs/f2fs/file.c | 2 +- fs/f2fs/gc.c | 4 +-- fs/f2fs/hash.c | 4 +-- fs/f2fs/inline.c | 4 +-- fs/f2fs/namei.c | 2 +- fs/f2fs/node.c | 10 +++---- fs/f2fs/segment.c | 28 +++++++++---------- fs/f2fs/super.c | 64 ++++++++++++++++++++++---------------------- fs/f2fs/xattr.c | 10 +++---- 15 files changed, 75 insertions(+), 81 deletions(-) diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c index 217b290ae3a5..306413589827 100644 --- a/fs/f2fs/acl.c +++ b/fs/f2fs/acl.c @@ -160,7 +160,7 @@ static void *f2fs_acl_to_disk(struct f2fs_sb_info *sbi, return (void *)f2fs_acl; fail: - kvfree(f2fs_acl); + kfree(f2fs_acl); return ERR_PTR(-EINVAL); } @@ -190,7 +190,7 @@ static struct posix_acl *__f2fs_get_acl(struct inode *inode, int type, acl = NULL; else acl = ERR_PTR(retval); - kvfree(value); + kfree(value); return acl; } @@ -240,7 +240,7 @@ static int __f2fs_set_acl(struct inode *inode, int type, error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0); - kvfree(value); + kfree(value); if (!error) set_cached_acl(inode, type, acl); diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index ffdaba0c55d2..b33779822a2c 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -965,7 +965,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi) f2fs_put_page(cp1, 1); f2fs_put_page(cp2, 1); fail_no_cp: - kvfree(sbi->ckpt); + kfree(sbi->ckpt); return err; } diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 0bcb28d70894..58f4bade6c2b 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -2889,7 +2889,7 @@ static void f2fs_dio_end_io(struct bio *bio) bio->bi_private = dio->orig_private; bio->bi_end_io = dio->orig_end_io; - kvfree(dio); + kfree(dio); bio_endio(bio); } diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c index 9b0bedd82581..5abd1d67d8b2 100644 --- a/fs/f2fs/debug.c +++ b/fs/f2fs/debug.c @@ -515,7 +515,7 @@ void f2fs_destroy_stats(struct f2fs_sb_info *sbi) list_del(&si->stat_list); mutex_unlock(&f2fs_stat_mutex); - kvfree(si); + kfree(si); } void __init f2fs_create_root_stats(void) diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c index c967cacf979e..83ca3b721015 100644 --- a/fs/f2fs/dir.c +++ b/fs/f2fs/dir.c @@ -158,7 +158,7 @@ static void f2fs_fname_setup_ci_filename(struct inode *dir, iname, cf_name->name, F2FS_NAME_LEN); if ((int)cf_name->len <= 0) { - kvfree(cf_name->name); + kfree(cf_name->name); cf_name->name = NULL; } } @@ -245,7 +245,7 @@ struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname, *max_slots = max_len; #ifdef CONFIG_UNICODE - kvfree(cf_str.name); + kfree(cf_str.name); #endif return de; } @@ -1101,7 +1101,7 @@ static int f2fs_d_hash(const struct dentry *dentry, struct qstr *str) } str->hash = full_name_hash(dentry, norm, len); out: - kvfree(norm); + kfree(norm); return ret; } diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 3f6204202788..8833e9d32f9d 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -1677,7 +1677,7 @@ static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock) if (lock) spin_unlock_irqrestore(&sbi->cp_lock, flags); - kvfree(nat_bits); + kfree(nat_bits); } static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi, @@ -2798,18 +2798,12 @@ static inline bool f2fs_may_extent_tree(struct inode *inode) static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi, size_t size, gfp_t flags) { - void *ret; - if (time_to_inject(sbi, FAULT_KMALLOC)) { f2fs_show_injection_info(sbi, FAULT_KMALLOC); return NULL; } - ret = kmalloc(size, flags); - if (ret) - return ret; - - return kvmalloc(size, flags); + return kmalloc(size, flags); } static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi, diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index e5ce697c0544..a7d855efc294 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -3220,7 +3220,7 @@ static int f2fs_get_volume_name(struct file *filp, unsigned long arg) min(FSLABEL_MAX, count))) err = -EFAULT; - kvfree(vbuf); + kfree(vbuf); return err; } diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 24a3b6b52210..80b8da471286 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -142,7 +142,7 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi) "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev)); if (IS_ERR(gc_th->f2fs_gc_task)) { err = PTR_ERR(gc_th->f2fs_gc_task); - kvfree(gc_th); + kfree(gc_th); sbi->gc_thread = NULL; } out: @@ -155,7 +155,7 @@ void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi) if (!gc_th) return; kthread_stop(gc_th->f2fs_gc_task); - kvfree(gc_th); + kfree(gc_th); sbi->gc_thread = NULL; } diff --git a/fs/f2fs/hash.c b/fs/f2fs/hash.c index 5bc4dcd8fc03..7d1cc0e3d72c 100644 --- a/fs/f2fs/hash.c +++ b/fs/f2fs/hash.c @@ -124,14 +124,14 @@ f2fs_hash_t f2fs_dentry_hash(const struct inode *dir, dlen = utf8_casefold(um, name_info, buff, PATH_MAX); if (dlen < 0) { - kvfree(buff); + kfree(buff); goto opaque_seq; } folded.name = buff; folded.len = dlen; r = __f2fs_dentry_hash(&folded, fname); - kvfree(buff); + kfree(buff); return r; opaque_seq: diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c index 896db0416f0e..b132568b751d 100644 --- a/fs/f2fs/inline.c +++ b/fs/f2fs/inline.c @@ -515,7 +515,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, !f2fs_has_inline_xattr(dir)) F2FS_I(dir)->i_inline_xattr_size = 0; - kvfree(backup_dentry); + kfree(backup_dentry); return 0; recover: lock_page(ipage); @@ -526,7 +526,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, set_page_dirty(ipage); f2fs_put_page(ipage, 1); - kvfree(backup_dentry); + kfree(backup_dentry); return err; } diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c index 4faf06e8bf89..d8ca896e109b 100644 --- a/fs/f2fs/namei.c +++ b/fs/f2fs/namei.c @@ -655,7 +655,7 @@ static int f2fs_symlink(struct inode *dir, struct dentry *dentry, f2fs_handle_failed_inode(inode); out_free_encrypted_link: if (disk_link.name != (unsigned char *)symname) - kvfree(disk_link.name); + kfree(disk_link.name); return err; } diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 6912faba811e..261798b9a9f7 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -3065,7 +3065,7 @@ static int init_free_nid_cache(struct f2fs_sb_info *sbi) int i; nm_i->free_nid_bitmap = - f2fs_kzalloc(sbi, array_size(sizeof(unsigned char *), + f2fs_kvzalloc(sbi, array_size(sizeof(unsigned char *), nm_i->nat_blocks), GFP_KERNEL); if (!nm_i->free_nid_bitmap) @@ -3183,13 +3183,13 @@ void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi) } kvfree(nm_i->free_nid_count); - kvfree(nm_i->nat_bitmap); - kvfree(nm_i->nat_bits); + kfree(nm_i->nat_bitmap); + kfree(nm_i->nat_bits); #ifdef CONFIG_F2FS_CHECK_FS - kvfree(nm_i->nat_bitmap_mir); + kfree(nm_i->nat_bitmap_mir); #endif sbi->nm_info = NULL; - kvfree(nm_i); + kfree(nm_i); } int __init f2fs_create_node_manager_caches(void) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index c525d8c87ddf..8c96d6008e20 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -718,7 +718,7 @@ int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi) "f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev)); if (IS_ERR(fcc->f2fs_issue_flush)) { err = PTR_ERR(fcc->f2fs_issue_flush); - kvfree(fcc); + kfree(fcc); SM_I(sbi)->fcc_info = NULL; return err; } @@ -737,7 +737,7 @@ void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free) kthread_stop(flush_thread); } if (free) { - kvfree(fcc); + kfree(fcc); SM_I(sbi)->fcc_info = NULL; } } @@ -2059,7 +2059,7 @@ static int create_discard_cmd_control(struct f2fs_sb_info *sbi) "f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev)); if (IS_ERR(dcc->f2fs_issue_discard)) { err = PTR_ERR(dcc->f2fs_issue_discard); - kvfree(dcc); + kfree(dcc); SM_I(sbi)->dcc_info = NULL; return err; } @@ -2083,7 +2083,7 @@ static void destroy_discard_cmd_control(struct f2fs_sb_info *sbi) if (unlikely(atomic_read(&dcc->discard_cmd_cnt))) f2fs_issue_discard_timeout(sbi); - kvfree(dcc); + kfree(dcc); SM_I(sbi)->dcc_info = NULL; } @@ -4488,7 +4488,7 @@ static void destroy_dirty_segmap(struct f2fs_sb_info *sbi) destroy_victim_secmap(sbi); SM_I(sbi)->dirty_info = NULL; - kvfree(dirty_i); + kfree(dirty_i); } static void destroy_curseg(struct f2fs_sb_info *sbi) @@ -4500,10 +4500,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++) { - kvfree(array[i].sum_blk); - kvfree(array[i].journal); + kfree(array[i].sum_blk); + kfree(array[i].journal); } - kvfree(array); + kfree(array); } static void destroy_free_segmap(struct f2fs_sb_info *sbi) @@ -4514,7 +4514,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); - kvfree(free_i); + kfree(free_i); } static void destroy_sit_info(struct f2fs_sb_info *sbi) @@ -4526,19 +4526,19 @@ static void destroy_sit_info(struct f2fs_sb_info *sbi) if (sit_i->sentries) kvfree(sit_i->bitmap); - kvfree(sit_i->tmp_map); + kfree(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; - kvfree(sit_i->sit_bitmap); + kfree(sit_i->sit_bitmap); #ifdef CONFIG_F2FS_CHECK_FS - kvfree(sit_i->sit_bitmap_mir); + kfree(sit_i->sit_bitmap_mir); kvfree(sit_i->invalid_segmap); #endif - kvfree(sit_i); + kfree(sit_i); } void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi) @@ -4554,7 +4554,7 @@ void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi) destroy_free_segmap(sbi); destroy_sit_info(sbi); sbi->sm_info = NULL; - kvfree(sm_info); + kfree(sm_info); } int __init f2fs_create_segment_manager_caches(void) diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index c02a47ce551b..b72d071aedd8 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -324,7 +324,7 @@ static int f2fs_set_qf_name(struct super_block *sb, int qtype, set_opt(sbi, QUOTA); return 0; errout: - kvfree(qname); + kfree(qname); return ret; } @@ -336,7 +336,7 @@ static int f2fs_clear_qf_name(struct super_block *sb, int qtype) f2fs_err(sbi, "Cannot change journaled quota options when quota turned on"); return -EINVAL; } - kvfree(F2FS_OPTION(sbi).s_qf_names[qtype]); + kfree(F2FS_OPTION(sbi).s_qf_names[qtype]); F2FS_OPTION(sbi).s_qf_names[qtype] = NULL; return 0; } @@ -429,10 +429,10 @@ static int parse_options(struct super_block *sb, char *options) set_opt(sbi, BG_GC); set_opt(sbi, FORCE_FG_GC); } else { - kvfree(name); + kfree(name); return -EINVAL; } - kvfree(name); + kfree(name); break; case Opt_disable_roll_forward: set_opt(sbi, DISABLE_ROLL_FORWARD); @@ -590,7 +590,7 @@ static int parse_options(struct super_block *sb, char *options) !strncmp(name, "adaptive", 8)) { if (f2fs_sb_has_blkzoned(sbi)) { f2fs_warn(sbi, "adaptive mode is not allowed with zoned block device feature"); - kvfree(name); + kfree(name); return -EINVAL; } set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE); @@ -598,10 +598,10 @@ static int parse_options(struct super_block *sb, char *options) !strncmp(name, "lfs", 3)) { set_opt_mode(sbi, F2FS_MOUNT_LFS); } else { - kvfree(name); + kfree(name); return -EINVAL; } - kvfree(name); + kfree(name); break; case Opt_io_size_bits: if (args->from && match_int(args, &arg)) @@ -730,10 +730,10 @@ static int parse_options(struct super_block *sb, char *options) !strncmp(name, "fs-based", 8)) { F2FS_OPTION(sbi).whint_mode = WHINT_MODE_FS; } else { - kvfree(name); + kfree(name); return -EINVAL; } - kvfree(name); + kfree(name); break; case Opt_alloc: name = match_strdup(&args[0]); @@ -747,10 +747,10 @@ static int parse_options(struct super_block *sb, char *options) !strncmp(name, "reuse", 5)) { F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE; } else { - kvfree(name); + kfree(name); return -EINVAL; } - kvfree(name); + kfree(name); break; case Opt_fsync: name = match_strdup(&args[0]); @@ -767,10 +767,10 @@ static int parse_options(struct super_block *sb, char *options) F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_NOBARRIER; } else { - kvfree(name); + kfree(name); return -EINVAL; } - kvfree(name); + kfree(name); break; case Opt_test_dummy_encryption: #ifdef CONFIG_FS_ENCRYPTION @@ -1052,10 +1052,10 @@ static void destroy_device_list(struct f2fs_sb_info *sbi) for (i = 0; i < sbi->s_ndevs; i++) { blkdev_put(FDEV(i).bdev, FMODE_EXCL); #ifdef CONFIG_BLK_DEV_ZONED - kvfree(FDEV(i).blkz_seq); + kfree(FDEV(i).blkz_type); #endif } - kvfree(sbi->devs); + kfree(sbi->devs); } static void f2fs_put_super(struct super_block *sb) @@ -1125,28 +1125,28 @@ static void f2fs_put_super(struct super_block *sb) f2fs_destroy_node_manager(sbi); f2fs_destroy_segment_manager(sbi); - kvfree(sbi->ckpt); + kfree(sbi->ckpt); f2fs_unregister_sysfs(sbi); sb->s_fs_info = NULL; if (sbi->s_chksum_driver) crypto_free_shash(sbi->s_chksum_driver); - kvfree(sbi->raw_super); + kfree(sbi->raw_super); destroy_device_list(sbi); mempool_destroy(sbi->write_io_dummy); #ifdef CONFIG_QUOTA for (i = 0; i < MAXQUOTAS; i++) - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); + kfree(F2FS_OPTION(sbi).s_qf_names[i]); #endif destroy_percpu_info(sbi); for (i = 0; i < NR_PAGE_TYPE; i++) - kvfree(sbi->write_io[i]); + kfree(sbi->write_io[i]); #ifdef CONFIG_UNICODE utf8_unload(sbi->s_encoding); #endif - kvfree(sbi); + kfree(sbi); } int f2fs_sync_fs(struct super_block *sb, int sync) @@ -1600,7 +1600,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) GFP_KERNEL); if (!org_mount_opt.s_qf_names[i]) { for (j = 0; j < i; j++) - kvfree(org_mount_opt.s_qf_names[j]); + kfree(org_mount_opt.s_qf_names[j]); return -ENOMEM; } } else { @@ -1724,7 +1724,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) #ifdef CONFIG_QUOTA /* Release old quota file names */ for (i = 0; i < MAXQUOTAS; i++) - kvfree(org_mount_opt.s_qf_names[i]); + kfree(org_mount_opt.s_qf_names[i]); #endif /* Update the POSIXACL Flag */ sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | @@ -1744,7 +1744,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) #ifdef CONFIG_QUOTA F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt; for (i = 0; i < MAXQUOTAS; i++) { - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); + kfree(F2FS_OPTION(sbi).s_qf_names[i]); F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i]; } #endif @@ -2935,7 +2935,7 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi) } } - kvfree(zones); + kfree(zones); return err; } @@ -2992,7 +2992,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi, /* No valid superblock */ if (!*raw_super) - kvfree(super); + kfree(super); else err = 0; @@ -3563,7 +3563,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) if (err) goto sync_free_meta; } - kvfree(options); + kfree(options); /* recover broken superblock */ if (recovery) { @@ -3620,7 +3620,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) f2fs_destroy_segment_manager(sbi); free_devices: destroy_device_list(sbi); - kvfree(sbi->ckpt); + kfree(sbi->ckpt); free_meta_inode: make_bad_inode(sbi->meta_inode); iput(sbi->meta_inode); @@ -3631,7 +3631,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) destroy_percpu_info(sbi); free_bio_info: for (i = 0; i < NR_PAGE_TYPE; i++) - kvfree(sbi->write_io[i]); + kfree(sbi->write_io[i]); #ifdef CONFIG_UNICODE utf8_unload(sbi->s_encoding); @@ -3639,15 +3639,15 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) free_options: #ifdef CONFIG_QUOTA for (i = 0; i < MAXQUOTAS; i++) - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); + kfree(F2FS_OPTION(sbi).s_qf_names[i]); #endif - kvfree(options); + kfree(options); free_sb_buf: - kvfree(raw_super); + kfree(raw_super); free_sbi: if (sbi->s_chksum_driver) crypto_free_shash(sbi->s_chksum_driver); - kvfree(sbi); + kfree(sbi); /* give only one another chance */ if (retry_cnt > 0 && skip_recovery) { diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c index 296b3189448a..ff2455b4ad14 100644 --- a/fs/f2fs/xattr.c +++ b/fs/f2fs/xattr.c @@ -362,7 +362,7 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage, *base_addr = txattr_addr; return 0; out: - kvfree(txattr_addr); + kfree(txattr_addr); return err; } @@ -405,7 +405,7 @@ static int read_all_xattrs(struct inode *inode, struct page *ipage, *base_addr = txattr_addr; return 0; fail: - kvfree(txattr_addr); + kfree(txattr_addr); return err; } @@ -532,7 +532,7 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name, } error = size; out: - kvfree(base_addr); + kfree(base_addr); return error; } @@ -590,7 +590,7 @@ ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size) } error = buffer_size - rest; cleanup: - kvfree(base_addr); + kfree(base_addr); return error; } @@ -731,7 +731,7 @@ static int __f2fs_setxattr(struct inode *inode, int index, if (!error && S_ISDIR(inode->i_mode)) set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP); exit: - kvfree(base_addr); + kfree(base_addr); return error; } -- 2.18.0.rc1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply related [flat|nested] 9+ messages in thread
[parent not found: <201911022233.zTMqGPBr%lkp@intel.com>]
* Re: [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" [not found] ` <201911022233.zTMqGPBr%lkp@intel.com> @ 2019-11-04 8:03 ` Chao Yu 0 siblings, 0 replies; 9+ messages in thread From: Chao Yu @ 2019-11-04 8:03 UTC (permalink / raw) To: kbuild test robot; +Cc: jaegeuk, kbuild-all, linux-kernel, linux-f2fs-devel Hello, Thanks for the report, I've fixed this. Thanks, On 2019/11/2 22:17, kbuild test robot wrote: > Hi Chao, > > I love your patch! Yet something to improve: > > [auto build test ERROR on f2fs/dev-test] > [cannot apply to v5.4-rc5 next-20191031] > [if your patch is applied to the wrong git tree, please drop us a note to help > improve the system. BTW, we also suggest to use '--base' option to specify the > base tree in git format-patch, please see https://stackoverflow.com/a/37406982] > > url: https://github.com/0day-ci/linux/commits/Chao-Yu/f2fs-clean-up-check-condition-for-writting-beyond-EOF/20191102-212408 > base: https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git dev-test > config: sparc64-allmodconfig (attached as .config) > compiler: sparc64-linux-gcc (GCC) 7.4.0 > reproduce: > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # save the attached .config to linux build tree > GCC_VERSION=7.4.0 make.cross ARCH=sparc64 > > If you fix the issue, kindly add following tag > Reported-by: kbuild test robot <lkp@intel.com> > > All errors (new ones prefixed by >>): > > fs/f2fs/super.c: In function 'destroy_device_list': >>> fs/f2fs/super.c:1055:17: error: 'struct f2fs_dev_info' has no member named 'blkz_type'; did you mean 'blkz_seq'? > kfree(FDEV(i).blkz_type); > ^~~~~~~~~ > blkz_seq > > vim +1055 fs/f2fs/super.c > > 1047 > 1048 static void destroy_device_list(struct f2fs_sb_info *sbi) > 1049 { > 1050 int i; > 1051 > 1052 for (i = 0; i < sbi->s_ndevs; i++) { > 1053 blkdev_put(FDEV(i).bdev, FMODE_EXCL); > 1054 #ifdef CONFIG_BLK_DEV_ZONED >> 1055 kfree(FDEV(i).blkz_type); > 1056 #endif > 1057 } > 1058 kfree(sbi->devs); > 1059 } > 1060 > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" 2019-11-01 9:53 ` [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" Chao Yu [not found] ` <201911022233.zTMqGPBr%lkp@intel.com> @ 2019-11-05 0:02 ` Jaegeuk Kim 2019-11-05 2:17 ` Chao Yu 1 sibling, 1 reply; 9+ messages in thread From: Jaegeuk Kim @ 2019-11-05 0:02 UTC (permalink / raw) To: Chao Yu; +Cc: linux-kernel, linux-f2fs-devel On 11/01, Chao Yu wrote: > This reverts commit 5222595d093ebe80329d38d255d14316257afb3e. > > As discussed with Eric, as kvmalloc() will try kmalloc() first, so > when we need allocate large size memory, it'd better to use > f2fs_kvmalloc() directly rather than adding additional fallback > logic to call kvmalloc() after we failed in f2fs_kmalloc(). > > In order to avoid allocation failure described in original commit, > I change to use f2fs_kvmalloc() for .free_nid_bitmap bitmap memory. Is there any problem in the previous flow? > > Signed-off-by: Chao Yu <yuchao0@huawei.com> > --- > fs/f2fs/acl.c | 6 ++--- > fs/f2fs/checkpoint.c | 2 +- > fs/f2fs/data.c | 2 +- > fs/f2fs/debug.c | 2 +- > fs/f2fs/dir.c | 6 ++--- > fs/f2fs/f2fs.h | 10 ++----- > fs/f2fs/file.c | 2 +- > fs/f2fs/gc.c | 4 +-- > fs/f2fs/hash.c | 4 +-- > fs/f2fs/inline.c | 4 +-- > fs/f2fs/namei.c | 2 +- > fs/f2fs/node.c | 10 +++---- > fs/f2fs/segment.c | 28 +++++++++---------- > fs/f2fs/super.c | 64 ++++++++++++++++++++++---------------------- > fs/f2fs/xattr.c | 10 +++---- > 15 files changed, 75 insertions(+), 81 deletions(-) > > diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c > index 217b290ae3a5..306413589827 100644 > --- a/fs/f2fs/acl.c > +++ b/fs/f2fs/acl.c > @@ -160,7 +160,7 @@ static void *f2fs_acl_to_disk(struct f2fs_sb_info *sbi, > return (void *)f2fs_acl; > > fail: > - kvfree(f2fs_acl); > + kfree(f2fs_acl); > return ERR_PTR(-EINVAL); > } > > @@ -190,7 +190,7 @@ static struct posix_acl *__f2fs_get_acl(struct inode *inode, int type, > acl = NULL; > else > acl = ERR_PTR(retval); > - kvfree(value); > + kfree(value); > > return acl; > } > @@ -240,7 +240,7 @@ static int __f2fs_set_acl(struct inode *inode, int type, > > error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0); > > - kvfree(value); > + kfree(value); > if (!error) > set_cached_acl(inode, type, acl); > > diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c > index ffdaba0c55d2..b33779822a2c 100644 > --- a/fs/f2fs/checkpoint.c > +++ b/fs/f2fs/checkpoint.c > @@ -965,7 +965,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi) > f2fs_put_page(cp1, 1); > f2fs_put_page(cp2, 1); > fail_no_cp: > - kvfree(sbi->ckpt); > + kfree(sbi->ckpt); > return err; > } > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index 0bcb28d70894..58f4bade6c2b 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -2889,7 +2889,7 @@ static void f2fs_dio_end_io(struct bio *bio) > bio->bi_private = dio->orig_private; > bio->bi_end_io = dio->orig_end_io; > > - kvfree(dio); > + kfree(dio); > > bio_endio(bio); > } > diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c > index 9b0bedd82581..5abd1d67d8b2 100644 > --- a/fs/f2fs/debug.c > +++ b/fs/f2fs/debug.c > @@ -515,7 +515,7 @@ void f2fs_destroy_stats(struct f2fs_sb_info *sbi) > list_del(&si->stat_list); > mutex_unlock(&f2fs_stat_mutex); > > - kvfree(si); > + kfree(si); > } > > void __init f2fs_create_root_stats(void) > diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c > index c967cacf979e..83ca3b721015 100644 > --- a/fs/f2fs/dir.c > +++ b/fs/f2fs/dir.c > @@ -158,7 +158,7 @@ static void f2fs_fname_setup_ci_filename(struct inode *dir, > iname, cf_name->name, > F2FS_NAME_LEN); > if ((int)cf_name->len <= 0) { > - kvfree(cf_name->name); > + kfree(cf_name->name); > cf_name->name = NULL; > } > } > @@ -245,7 +245,7 @@ struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname, > *max_slots = max_len; > > #ifdef CONFIG_UNICODE > - kvfree(cf_str.name); > + kfree(cf_str.name); > #endif > return de; > } > @@ -1101,7 +1101,7 @@ static int f2fs_d_hash(const struct dentry *dentry, struct qstr *str) > } > str->hash = full_name_hash(dentry, norm, len); > out: > - kvfree(norm); > + kfree(norm); > return ret; > } > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index 3f6204202788..8833e9d32f9d 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -1677,7 +1677,7 @@ static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock) > if (lock) > spin_unlock_irqrestore(&sbi->cp_lock, flags); > > - kvfree(nat_bits); > + kfree(nat_bits); > } > > static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi, > @@ -2798,18 +2798,12 @@ static inline bool f2fs_may_extent_tree(struct inode *inode) > static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi, > size_t size, gfp_t flags) > { > - void *ret; > - > if (time_to_inject(sbi, FAULT_KMALLOC)) { > f2fs_show_injection_info(sbi, FAULT_KMALLOC); > return NULL; > } > > - ret = kmalloc(size, flags); > - if (ret) > - return ret; > - > - return kvmalloc(size, flags); > + return kmalloc(size, flags); > } > > static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi, > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index e5ce697c0544..a7d855efc294 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -3220,7 +3220,7 @@ static int f2fs_get_volume_name(struct file *filp, unsigned long arg) > min(FSLABEL_MAX, count))) > err = -EFAULT; > > - kvfree(vbuf); > + kfree(vbuf); > return err; > } > > diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c > index 24a3b6b52210..80b8da471286 100644 > --- a/fs/f2fs/gc.c > +++ b/fs/f2fs/gc.c > @@ -142,7 +142,7 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi) > "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev)); > if (IS_ERR(gc_th->f2fs_gc_task)) { > err = PTR_ERR(gc_th->f2fs_gc_task); > - kvfree(gc_th); > + kfree(gc_th); > sbi->gc_thread = NULL; > } > out: > @@ -155,7 +155,7 @@ void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi) > if (!gc_th) > return; > kthread_stop(gc_th->f2fs_gc_task); > - kvfree(gc_th); > + kfree(gc_th); > sbi->gc_thread = NULL; > } > > diff --git a/fs/f2fs/hash.c b/fs/f2fs/hash.c > index 5bc4dcd8fc03..7d1cc0e3d72c 100644 > --- a/fs/f2fs/hash.c > +++ b/fs/f2fs/hash.c > @@ -124,14 +124,14 @@ f2fs_hash_t f2fs_dentry_hash(const struct inode *dir, > > dlen = utf8_casefold(um, name_info, buff, PATH_MAX); > if (dlen < 0) { > - kvfree(buff); > + kfree(buff); > goto opaque_seq; > } > folded.name = buff; > folded.len = dlen; > r = __f2fs_dentry_hash(&folded, fname); > > - kvfree(buff); > + kfree(buff); > return r; > > opaque_seq: > diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c > index 896db0416f0e..b132568b751d 100644 > --- a/fs/f2fs/inline.c > +++ b/fs/f2fs/inline.c > @@ -515,7 +515,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, > !f2fs_has_inline_xattr(dir)) > F2FS_I(dir)->i_inline_xattr_size = 0; > > - kvfree(backup_dentry); > + kfree(backup_dentry); > return 0; > recover: > lock_page(ipage); > @@ -526,7 +526,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, > set_page_dirty(ipage); > f2fs_put_page(ipage, 1); > > - kvfree(backup_dentry); > + kfree(backup_dentry); > return err; > } > > diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c > index 4faf06e8bf89..d8ca896e109b 100644 > --- a/fs/f2fs/namei.c > +++ b/fs/f2fs/namei.c > @@ -655,7 +655,7 @@ static int f2fs_symlink(struct inode *dir, struct dentry *dentry, > f2fs_handle_failed_inode(inode); > out_free_encrypted_link: > if (disk_link.name != (unsigned char *)symname) > - kvfree(disk_link.name); > + kfree(disk_link.name); > return err; > } > > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c > index 6912faba811e..261798b9a9f7 100644 > --- a/fs/f2fs/node.c > +++ b/fs/f2fs/node.c > @@ -3065,7 +3065,7 @@ static int init_free_nid_cache(struct f2fs_sb_info *sbi) > int i; > > nm_i->free_nid_bitmap = > - f2fs_kzalloc(sbi, array_size(sizeof(unsigned char *), > + f2fs_kvzalloc(sbi, array_size(sizeof(unsigned char *), > nm_i->nat_blocks), > GFP_KERNEL); > if (!nm_i->free_nid_bitmap) > @@ -3183,13 +3183,13 @@ void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi) > } > kvfree(nm_i->free_nid_count); > > - kvfree(nm_i->nat_bitmap); > - kvfree(nm_i->nat_bits); > + kfree(nm_i->nat_bitmap); > + kfree(nm_i->nat_bits); > #ifdef CONFIG_F2FS_CHECK_FS > - kvfree(nm_i->nat_bitmap_mir); > + kfree(nm_i->nat_bitmap_mir); > #endif > sbi->nm_info = NULL; > - kvfree(nm_i); > + kfree(nm_i); > } > > int __init f2fs_create_node_manager_caches(void) > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > index c525d8c87ddf..8c96d6008e20 100644 > --- a/fs/f2fs/segment.c > +++ b/fs/f2fs/segment.c > @@ -718,7 +718,7 @@ int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi) > "f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev)); > if (IS_ERR(fcc->f2fs_issue_flush)) { > err = PTR_ERR(fcc->f2fs_issue_flush); > - kvfree(fcc); > + kfree(fcc); > SM_I(sbi)->fcc_info = NULL; > return err; > } > @@ -737,7 +737,7 @@ void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free) > kthread_stop(flush_thread); > } > if (free) { > - kvfree(fcc); > + kfree(fcc); > SM_I(sbi)->fcc_info = NULL; > } > } > @@ -2059,7 +2059,7 @@ static int create_discard_cmd_control(struct f2fs_sb_info *sbi) > "f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev)); > if (IS_ERR(dcc->f2fs_issue_discard)) { > err = PTR_ERR(dcc->f2fs_issue_discard); > - kvfree(dcc); > + kfree(dcc); > SM_I(sbi)->dcc_info = NULL; > return err; > } > @@ -2083,7 +2083,7 @@ static void destroy_discard_cmd_control(struct f2fs_sb_info *sbi) > if (unlikely(atomic_read(&dcc->discard_cmd_cnt))) > f2fs_issue_discard_timeout(sbi); > > - kvfree(dcc); > + kfree(dcc); > SM_I(sbi)->dcc_info = NULL; > } > > @@ -4488,7 +4488,7 @@ static void destroy_dirty_segmap(struct f2fs_sb_info *sbi) > > destroy_victim_secmap(sbi); > SM_I(sbi)->dirty_info = NULL; > - kvfree(dirty_i); > + kfree(dirty_i); > } > > static void destroy_curseg(struct f2fs_sb_info *sbi) > @@ -4500,10 +4500,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++) { > - kvfree(array[i].sum_blk); > - kvfree(array[i].journal); > + kfree(array[i].sum_blk); > + kfree(array[i].journal); > } > - kvfree(array); > + kfree(array); > } > > static void destroy_free_segmap(struct f2fs_sb_info *sbi) > @@ -4514,7 +4514,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); > - kvfree(free_i); > + kfree(free_i); > } > > static void destroy_sit_info(struct f2fs_sb_info *sbi) > @@ -4526,19 +4526,19 @@ static void destroy_sit_info(struct f2fs_sb_info *sbi) > > if (sit_i->sentries) > kvfree(sit_i->bitmap); > - kvfree(sit_i->tmp_map); > + kfree(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; > - kvfree(sit_i->sit_bitmap); > + kfree(sit_i->sit_bitmap); > #ifdef CONFIG_F2FS_CHECK_FS > - kvfree(sit_i->sit_bitmap_mir); > + kfree(sit_i->sit_bitmap_mir); > kvfree(sit_i->invalid_segmap); > #endif > - kvfree(sit_i); > + kfree(sit_i); > } > > void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi) > @@ -4554,7 +4554,7 @@ void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi) > destroy_free_segmap(sbi); > destroy_sit_info(sbi); > sbi->sm_info = NULL; > - kvfree(sm_info); > + kfree(sm_info); > } > > int __init f2fs_create_segment_manager_caches(void) > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > index c02a47ce551b..b72d071aedd8 100644 > --- a/fs/f2fs/super.c > +++ b/fs/f2fs/super.c > @@ -324,7 +324,7 @@ static int f2fs_set_qf_name(struct super_block *sb, int qtype, > set_opt(sbi, QUOTA); > return 0; > errout: > - kvfree(qname); > + kfree(qname); > return ret; > } > > @@ -336,7 +336,7 @@ static int f2fs_clear_qf_name(struct super_block *sb, int qtype) > f2fs_err(sbi, "Cannot change journaled quota options when quota turned on"); > return -EINVAL; > } > - kvfree(F2FS_OPTION(sbi).s_qf_names[qtype]); > + kfree(F2FS_OPTION(sbi).s_qf_names[qtype]); > F2FS_OPTION(sbi).s_qf_names[qtype] = NULL; > return 0; > } > @@ -429,10 +429,10 @@ static int parse_options(struct super_block *sb, char *options) > set_opt(sbi, BG_GC); > set_opt(sbi, FORCE_FG_GC); > } else { > - kvfree(name); > + kfree(name); > return -EINVAL; > } > - kvfree(name); > + kfree(name); > break; > case Opt_disable_roll_forward: > set_opt(sbi, DISABLE_ROLL_FORWARD); > @@ -590,7 +590,7 @@ static int parse_options(struct super_block *sb, char *options) > !strncmp(name, "adaptive", 8)) { > if (f2fs_sb_has_blkzoned(sbi)) { > f2fs_warn(sbi, "adaptive mode is not allowed with zoned block device feature"); > - kvfree(name); > + kfree(name); > return -EINVAL; > } > set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE); > @@ -598,10 +598,10 @@ static int parse_options(struct super_block *sb, char *options) > !strncmp(name, "lfs", 3)) { > set_opt_mode(sbi, F2FS_MOUNT_LFS); > } else { > - kvfree(name); > + kfree(name); > return -EINVAL; > } > - kvfree(name); > + kfree(name); > break; > case Opt_io_size_bits: > if (args->from && match_int(args, &arg)) > @@ -730,10 +730,10 @@ static int parse_options(struct super_block *sb, char *options) > !strncmp(name, "fs-based", 8)) { > F2FS_OPTION(sbi).whint_mode = WHINT_MODE_FS; > } else { > - kvfree(name); > + kfree(name); > return -EINVAL; > } > - kvfree(name); > + kfree(name); > break; > case Opt_alloc: > name = match_strdup(&args[0]); > @@ -747,10 +747,10 @@ static int parse_options(struct super_block *sb, char *options) > !strncmp(name, "reuse", 5)) { > F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE; > } else { > - kvfree(name); > + kfree(name); > return -EINVAL; > } > - kvfree(name); > + kfree(name); > break; > case Opt_fsync: > name = match_strdup(&args[0]); > @@ -767,10 +767,10 @@ static int parse_options(struct super_block *sb, char *options) > F2FS_OPTION(sbi).fsync_mode = > FSYNC_MODE_NOBARRIER; > } else { > - kvfree(name); > + kfree(name); > return -EINVAL; > } > - kvfree(name); > + kfree(name); > break; > case Opt_test_dummy_encryption: > #ifdef CONFIG_FS_ENCRYPTION > @@ -1052,10 +1052,10 @@ static void destroy_device_list(struct f2fs_sb_info *sbi) > for (i = 0; i < sbi->s_ndevs; i++) { > blkdev_put(FDEV(i).bdev, FMODE_EXCL); > #ifdef CONFIG_BLK_DEV_ZONED > - kvfree(FDEV(i).blkz_seq); > + kfree(FDEV(i).blkz_type); > #endif > } > - kvfree(sbi->devs); > + kfree(sbi->devs); > } > > static void f2fs_put_super(struct super_block *sb) > @@ -1125,28 +1125,28 @@ static void f2fs_put_super(struct super_block *sb) > f2fs_destroy_node_manager(sbi); > f2fs_destroy_segment_manager(sbi); > > - kvfree(sbi->ckpt); > + kfree(sbi->ckpt); > > f2fs_unregister_sysfs(sbi); > > sb->s_fs_info = NULL; > if (sbi->s_chksum_driver) > crypto_free_shash(sbi->s_chksum_driver); > - kvfree(sbi->raw_super); > + kfree(sbi->raw_super); > > destroy_device_list(sbi); > mempool_destroy(sbi->write_io_dummy); > #ifdef CONFIG_QUOTA > for (i = 0; i < MAXQUOTAS; i++) > - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); > + kfree(F2FS_OPTION(sbi).s_qf_names[i]); > #endif > destroy_percpu_info(sbi); > for (i = 0; i < NR_PAGE_TYPE; i++) > - kvfree(sbi->write_io[i]); > + kfree(sbi->write_io[i]); > #ifdef CONFIG_UNICODE > utf8_unload(sbi->s_encoding); > #endif > - kvfree(sbi); > + kfree(sbi); > } > > int f2fs_sync_fs(struct super_block *sb, int sync) > @@ -1600,7 +1600,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) > GFP_KERNEL); > if (!org_mount_opt.s_qf_names[i]) { > for (j = 0; j < i; j++) > - kvfree(org_mount_opt.s_qf_names[j]); > + kfree(org_mount_opt.s_qf_names[j]); > return -ENOMEM; > } > } else { > @@ -1724,7 +1724,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) > #ifdef CONFIG_QUOTA > /* Release old quota file names */ > for (i = 0; i < MAXQUOTAS; i++) > - kvfree(org_mount_opt.s_qf_names[i]); > + kfree(org_mount_opt.s_qf_names[i]); > #endif > /* Update the POSIXACL Flag */ > sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | > @@ -1744,7 +1744,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) > #ifdef CONFIG_QUOTA > F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt; > for (i = 0; i < MAXQUOTAS; i++) { > - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); > + kfree(F2FS_OPTION(sbi).s_qf_names[i]); > F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i]; > } > #endif > @@ -2935,7 +2935,7 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi) > } > } > > - kvfree(zones); > + kfree(zones); > > return err; > } > @@ -2992,7 +2992,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi, > > /* No valid superblock */ > if (!*raw_super) > - kvfree(super); > + kfree(super); > else > err = 0; > > @@ -3563,7 +3563,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) > if (err) > goto sync_free_meta; > } > - kvfree(options); > + kfree(options); > > /* recover broken superblock */ > if (recovery) { > @@ -3620,7 +3620,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) > f2fs_destroy_segment_manager(sbi); > free_devices: > destroy_device_list(sbi); > - kvfree(sbi->ckpt); > + kfree(sbi->ckpt); > free_meta_inode: > make_bad_inode(sbi->meta_inode); > iput(sbi->meta_inode); > @@ -3631,7 +3631,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) > destroy_percpu_info(sbi); > free_bio_info: > for (i = 0; i < NR_PAGE_TYPE; i++) > - kvfree(sbi->write_io[i]); > + kfree(sbi->write_io[i]); > > #ifdef CONFIG_UNICODE > utf8_unload(sbi->s_encoding); > @@ -3639,15 +3639,15 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) > free_options: > #ifdef CONFIG_QUOTA > for (i = 0; i < MAXQUOTAS; i++) > - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); > + kfree(F2FS_OPTION(sbi).s_qf_names[i]); > #endif > - kvfree(options); > + kfree(options); > free_sb_buf: > - kvfree(raw_super); > + kfree(raw_super); > free_sbi: > if (sbi->s_chksum_driver) > crypto_free_shash(sbi->s_chksum_driver); > - kvfree(sbi); > + kfree(sbi); > > /* give only one another chance */ > if (retry_cnt > 0 && skip_recovery) { > diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c > index 296b3189448a..ff2455b4ad14 100644 > --- a/fs/f2fs/xattr.c > +++ b/fs/f2fs/xattr.c > @@ -362,7 +362,7 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage, > *base_addr = txattr_addr; > return 0; > out: > - kvfree(txattr_addr); > + kfree(txattr_addr); > return err; > } > > @@ -405,7 +405,7 @@ static int read_all_xattrs(struct inode *inode, struct page *ipage, > *base_addr = txattr_addr; > return 0; > fail: > - kvfree(txattr_addr); > + kfree(txattr_addr); > return err; > } > > @@ -532,7 +532,7 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name, > } > error = size; > out: > - kvfree(base_addr); > + kfree(base_addr); > return error; > } > > @@ -590,7 +590,7 @@ ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size) > } > error = buffer_size - rest; > cleanup: > - kvfree(base_addr); > + kfree(base_addr); > return error; > } > > @@ -731,7 +731,7 @@ static int __f2fs_setxattr(struct inode *inode, int index, > if (!error && S_ISDIR(inode->i_mode)) > set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP); > exit: > - kvfree(base_addr); > + kfree(base_addr); > return error; > } > > -- > 2.18.0.rc1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" 2019-11-05 0:02 ` Jaegeuk Kim @ 2019-11-05 2:17 ` Chao Yu 2019-11-05 2:38 ` Eric Biggers 0 siblings, 1 reply; 9+ messages in thread From: Chao Yu @ 2019-11-05 2:17 UTC (permalink / raw) To: Jaegeuk Kim; +Cc: linux-kernel, linux-f2fs-devel On 2019/11/5 8:02, Jaegeuk Kim wrote: > On 11/01, Chao Yu wrote: >> This reverts commit 5222595d093ebe80329d38d255d14316257afb3e. >> >> As discussed with Eric, as kvmalloc() will try kmalloc() first, so >> when we need allocate large size memory, it'd better to use >> f2fs_kvmalloc() directly rather than adding additional fallback >> logic to call kvmalloc() after we failed in f2fs_kmalloc(). >> >> In order to avoid allocation failure described in original commit, >> I change to use f2fs_kvmalloc() for .free_nid_bitmap bitmap memory. > > Is there any problem in the previous flow? No existing problem, however, it's redundant to introduce fallback flow in f2fs_kmalloc() like vmalloc() did, since we can call f2fs_vmalloc() directly in places where we need large memory. Thanks, > >> >> Signed-off-by: Chao Yu <yuchao0@huawei.com> >> --- >> fs/f2fs/acl.c | 6 ++--- >> fs/f2fs/checkpoint.c | 2 +- >> fs/f2fs/data.c | 2 +- >> fs/f2fs/debug.c | 2 +- >> fs/f2fs/dir.c | 6 ++--- >> fs/f2fs/f2fs.h | 10 ++----- >> fs/f2fs/file.c | 2 +- >> fs/f2fs/gc.c | 4 +-- >> fs/f2fs/hash.c | 4 +-- >> fs/f2fs/inline.c | 4 +-- >> fs/f2fs/namei.c | 2 +- >> fs/f2fs/node.c | 10 +++---- >> fs/f2fs/segment.c | 28 +++++++++---------- >> fs/f2fs/super.c | 64 ++++++++++++++++++++++---------------------- >> fs/f2fs/xattr.c | 10 +++---- >> 15 files changed, 75 insertions(+), 81 deletions(-) >> >> diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c >> index 217b290ae3a5..306413589827 100644 >> --- a/fs/f2fs/acl.c >> +++ b/fs/f2fs/acl.c >> @@ -160,7 +160,7 @@ static void *f2fs_acl_to_disk(struct f2fs_sb_info *sbi, >> return (void *)f2fs_acl; >> >> fail: >> - kvfree(f2fs_acl); >> + kfree(f2fs_acl); >> return ERR_PTR(-EINVAL); >> } >> >> @@ -190,7 +190,7 @@ static struct posix_acl *__f2fs_get_acl(struct inode *inode, int type, >> acl = NULL; >> else >> acl = ERR_PTR(retval); >> - kvfree(value); >> + kfree(value); >> >> return acl; >> } >> @@ -240,7 +240,7 @@ static int __f2fs_set_acl(struct inode *inode, int type, >> >> error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0); >> >> - kvfree(value); >> + kfree(value); >> if (!error) >> set_cached_acl(inode, type, acl); >> >> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c >> index ffdaba0c55d2..b33779822a2c 100644 >> --- a/fs/f2fs/checkpoint.c >> +++ b/fs/f2fs/checkpoint.c >> @@ -965,7 +965,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi) >> f2fs_put_page(cp1, 1); >> f2fs_put_page(cp2, 1); >> fail_no_cp: >> - kvfree(sbi->ckpt); >> + kfree(sbi->ckpt); >> return err; >> } >> >> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c >> index 0bcb28d70894..58f4bade6c2b 100644 >> --- a/fs/f2fs/data.c >> +++ b/fs/f2fs/data.c >> @@ -2889,7 +2889,7 @@ static void f2fs_dio_end_io(struct bio *bio) >> bio->bi_private = dio->orig_private; >> bio->bi_end_io = dio->orig_end_io; >> >> - kvfree(dio); >> + kfree(dio); >> >> bio_endio(bio); >> } >> diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c >> index 9b0bedd82581..5abd1d67d8b2 100644 >> --- a/fs/f2fs/debug.c >> +++ b/fs/f2fs/debug.c >> @@ -515,7 +515,7 @@ void f2fs_destroy_stats(struct f2fs_sb_info *sbi) >> list_del(&si->stat_list); >> mutex_unlock(&f2fs_stat_mutex); >> >> - kvfree(si); >> + kfree(si); >> } >> >> void __init f2fs_create_root_stats(void) >> diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c >> index c967cacf979e..83ca3b721015 100644 >> --- a/fs/f2fs/dir.c >> +++ b/fs/f2fs/dir.c >> @@ -158,7 +158,7 @@ static void f2fs_fname_setup_ci_filename(struct inode *dir, >> iname, cf_name->name, >> F2FS_NAME_LEN); >> if ((int)cf_name->len <= 0) { >> - kvfree(cf_name->name); >> + kfree(cf_name->name); >> cf_name->name = NULL; >> } >> } >> @@ -245,7 +245,7 @@ struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname, >> *max_slots = max_len; >> >> #ifdef CONFIG_UNICODE >> - kvfree(cf_str.name); >> + kfree(cf_str.name); >> #endif >> return de; >> } >> @@ -1101,7 +1101,7 @@ static int f2fs_d_hash(const struct dentry *dentry, struct qstr *str) >> } >> str->hash = full_name_hash(dentry, norm, len); >> out: >> - kvfree(norm); >> + kfree(norm); >> return ret; >> } >> >> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h >> index 3f6204202788..8833e9d32f9d 100644 >> --- a/fs/f2fs/f2fs.h >> +++ b/fs/f2fs/f2fs.h >> @@ -1677,7 +1677,7 @@ static inline void disable_nat_bits(struct f2fs_sb_info *sbi, bool lock) >> if (lock) >> spin_unlock_irqrestore(&sbi->cp_lock, flags); >> >> - kvfree(nat_bits); >> + kfree(nat_bits); >> } >> >> static inline bool enabled_nat_bits(struct f2fs_sb_info *sbi, >> @@ -2798,18 +2798,12 @@ static inline bool f2fs_may_extent_tree(struct inode *inode) >> static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi, >> size_t size, gfp_t flags) >> { >> - void *ret; >> - >> if (time_to_inject(sbi, FAULT_KMALLOC)) { >> f2fs_show_injection_info(sbi, FAULT_KMALLOC); >> return NULL; >> } >> >> - ret = kmalloc(size, flags); >> - if (ret) >> - return ret; >> - >> - return kvmalloc(size, flags); >> + return kmalloc(size, flags); >> } >> >> static inline void *f2fs_kzalloc(struct f2fs_sb_info *sbi, >> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c >> index e5ce697c0544..a7d855efc294 100644 >> --- a/fs/f2fs/file.c >> +++ b/fs/f2fs/file.c >> @@ -3220,7 +3220,7 @@ static int f2fs_get_volume_name(struct file *filp, unsigned long arg) >> min(FSLABEL_MAX, count))) >> err = -EFAULT; >> >> - kvfree(vbuf); >> + kfree(vbuf); >> return err; >> } >> >> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c >> index 24a3b6b52210..80b8da471286 100644 >> --- a/fs/f2fs/gc.c >> +++ b/fs/f2fs/gc.c >> @@ -142,7 +142,7 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi) >> "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev)); >> if (IS_ERR(gc_th->f2fs_gc_task)) { >> err = PTR_ERR(gc_th->f2fs_gc_task); >> - kvfree(gc_th); >> + kfree(gc_th); >> sbi->gc_thread = NULL; >> } >> out: >> @@ -155,7 +155,7 @@ void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi) >> if (!gc_th) >> return; >> kthread_stop(gc_th->f2fs_gc_task); >> - kvfree(gc_th); >> + kfree(gc_th); >> sbi->gc_thread = NULL; >> } >> >> diff --git a/fs/f2fs/hash.c b/fs/f2fs/hash.c >> index 5bc4dcd8fc03..7d1cc0e3d72c 100644 >> --- a/fs/f2fs/hash.c >> +++ b/fs/f2fs/hash.c >> @@ -124,14 +124,14 @@ f2fs_hash_t f2fs_dentry_hash(const struct inode *dir, >> >> dlen = utf8_casefold(um, name_info, buff, PATH_MAX); >> if (dlen < 0) { >> - kvfree(buff); >> + kfree(buff); >> goto opaque_seq; >> } >> folded.name = buff; >> folded.len = dlen; >> r = __f2fs_dentry_hash(&folded, fname); >> >> - kvfree(buff); >> + kfree(buff); >> return r; >> >> opaque_seq: >> diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c >> index 896db0416f0e..b132568b751d 100644 >> --- a/fs/f2fs/inline.c >> +++ b/fs/f2fs/inline.c >> @@ -515,7 +515,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, >> !f2fs_has_inline_xattr(dir)) >> F2FS_I(dir)->i_inline_xattr_size = 0; >> >> - kvfree(backup_dentry); >> + kfree(backup_dentry); >> return 0; >> recover: >> lock_page(ipage); >> @@ -526,7 +526,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, >> set_page_dirty(ipage); >> f2fs_put_page(ipage, 1); >> >> - kvfree(backup_dentry); >> + kfree(backup_dentry); >> return err; >> } >> >> diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c >> index 4faf06e8bf89..d8ca896e109b 100644 >> --- a/fs/f2fs/namei.c >> +++ b/fs/f2fs/namei.c >> @@ -655,7 +655,7 @@ static int f2fs_symlink(struct inode *dir, struct dentry *dentry, >> f2fs_handle_failed_inode(inode); >> out_free_encrypted_link: >> if (disk_link.name != (unsigned char *)symname) >> - kvfree(disk_link.name); >> + kfree(disk_link.name); >> return err; >> } >> >> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c >> index 6912faba811e..261798b9a9f7 100644 >> --- a/fs/f2fs/node.c >> +++ b/fs/f2fs/node.c >> @@ -3065,7 +3065,7 @@ static int init_free_nid_cache(struct f2fs_sb_info *sbi) >> int i; >> >> nm_i->free_nid_bitmap = >> - f2fs_kzalloc(sbi, array_size(sizeof(unsigned char *), >> + f2fs_kvzalloc(sbi, array_size(sizeof(unsigned char *), >> nm_i->nat_blocks), >> GFP_KERNEL); >> if (!nm_i->free_nid_bitmap) >> @@ -3183,13 +3183,13 @@ void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi) >> } >> kvfree(nm_i->free_nid_count); >> >> - kvfree(nm_i->nat_bitmap); >> - kvfree(nm_i->nat_bits); >> + kfree(nm_i->nat_bitmap); >> + kfree(nm_i->nat_bits); >> #ifdef CONFIG_F2FS_CHECK_FS >> - kvfree(nm_i->nat_bitmap_mir); >> + kfree(nm_i->nat_bitmap_mir); >> #endif >> sbi->nm_info = NULL; >> - kvfree(nm_i); >> + kfree(nm_i); >> } >> >> int __init f2fs_create_node_manager_caches(void) >> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >> index c525d8c87ddf..8c96d6008e20 100644 >> --- a/fs/f2fs/segment.c >> +++ b/fs/f2fs/segment.c >> @@ -718,7 +718,7 @@ int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi) >> "f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev)); >> if (IS_ERR(fcc->f2fs_issue_flush)) { >> err = PTR_ERR(fcc->f2fs_issue_flush); >> - kvfree(fcc); >> + kfree(fcc); >> SM_I(sbi)->fcc_info = NULL; >> return err; >> } >> @@ -737,7 +737,7 @@ void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free) >> kthread_stop(flush_thread); >> } >> if (free) { >> - kvfree(fcc); >> + kfree(fcc); >> SM_I(sbi)->fcc_info = NULL; >> } >> } >> @@ -2059,7 +2059,7 @@ static int create_discard_cmd_control(struct f2fs_sb_info *sbi) >> "f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev)); >> if (IS_ERR(dcc->f2fs_issue_discard)) { >> err = PTR_ERR(dcc->f2fs_issue_discard); >> - kvfree(dcc); >> + kfree(dcc); >> SM_I(sbi)->dcc_info = NULL; >> return err; >> } >> @@ -2083,7 +2083,7 @@ static void destroy_discard_cmd_control(struct f2fs_sb_info *sbi) >> if (unlikely(atomic_read(&dcc->discard_cmd_cnt))) >> f2fs_issue_discard_timeout(sbi); >> >> - kvfree(dcc); >> + kfree(dcc); >> SM_I(sbi)->dcc_info = NULL; >> } >> >> @@ -4488,7 +4488,7 @@ static void destroy_dirty_segmap(struct f2fs_sb_info *sbi) >> >> destroy_victim_secmap(sbi); >> SM_I(sbi)->dirty_info = NULL; >> - kvfree(dirty_i); >> + kfree(dirty_i); >> } >> >> static void destroy_curseg(struct f2fs_sb_info *sbi) >> @@ -4500,10 +4500,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++) { >> - kvfree(array[i].sum_blk); >> - kvfree(array[i].journal); >> + kfree(array[i].sum_blk); >> + kfree(array[i].journal); >> } >> - kvfree(array); >> + kfree(array); >> } >> >> static void destroy_free_segmap(struct f2fs_sb_info *sbi) >> @@ -4514,7 +4514,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); >> - kvfree(free_i); >> + kfree(free_i); >> } >> >> static void destroy_sit_info(struct f2fs_sb_info *sbi) >> @@ -4526,19 +4526,19 @@ static void destroy_sit_info(struct f2fs_sb_info *sbi) >> >> if (sit_i->sentries) >> kvfree(sit_i->bitmap); >> - kvfree(sit_i->tmp_map); >> + kfree(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; >> - kvfree(sit_i->sit_bitmap); >> + kfree(sit_i->sit_bitmap); >> #ifdef CONFIG_F2FS_CHECK_FS >> - kvfree(sit_i->sit_bitmap_mir); >> + kfree(sit_i->sit_bitmap_mir); >> kvfree(sit_i->invalid_segmap); >> #endif >> - kvfree(sit_i); >> + kfree(sit_i); >> } >> >> void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi) >> @@ -4554,7 +4554,7 @@ void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi) >> destroy_free_segmap(sbi); >> destroy_sit_info(sbi); >> sbi->sm_info = NULL; >> - kvfree(sm_info); >> + kfree(sm_info); >> } >> >> int __init f2fs_create_segment_manager_caches(void) >> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c >> index c02a47ce551b..b72d071aedd8 100644 >> --- a/fs/f2fs/super.c >> +++ b/fs/f2fs/super.c >> @@ -324,7 +324,7 @@ static int f2fs_set_qf_name(struct super_block *sb, int qtype, >> set_opt(sbi, QUOTA); >> return 0; >> errout: >> - kvfree(qname); >> + kfree(qname); >> return ret; >> } >> >> @@ -336,7 +336,7 @@ static int f2fs_clear_qf_name(struct super_block *sb, int qtype) >> f2fs_err(sbi, "Cannot change journaled quota options when quota turned on"); >> return -EINVAL; >> } >> - kvfree(F2FS_OPTION(sbi).s_qf_names[qtype]); >> + kfree(F2FS_OPTION(sbi).s_qf_names[qtype]); >> F2FS_OPTION(sbi).s_qf_names[qtype] = NULL; >> return 0; >> } >> @@ -429,10 +429,10 @@ static int parse_options(struct super_block *sb, char *options) >> set_opt(sbi, BG_GC); >> set_opt(sbi, FORCE_FG_GC); >> } else { >> - kvfree(name); >> + kfree(name); >> return -EINVAL; >> } >> - kvfree(name); >> + kfree(name); >> break; >> case Opt_disable_roll_forward: >> set_opt(sbi, DISABLE_ROLL_FORWARD); >> @@ -590,7 +590,7 @@ static int parse_options(struct super_block *sb, char *options) >> !strncmp(name, "adaptive", 8)) { >> if (f2fs_sb_has_blkzoned(sbi)) { >> f2fs_warn(sbi, "adaptive mode is not allowed with zoned block device feature"); >> - kvfree(name); >> + kfree(name); >> return -EINVAL; >> } >> set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE); >> @@ -598,10 +598,10 @@ static int parse_options(struct super_block *sb, char *options) >> !strncmp(name, "lfs", 3)) { >> set_opt_mode(sbi, F2FS_MOUNT_LFS); >> } else { >> - kvfree(name); >> + kfree(name); >> return -EINVAL; >> } >> - kvfree(name); >> + kfree(name); >> break; >> case Opt_io_size_bits: >> if (args->from && match_int(args, &arg)) >> @@ -730,10 +730,10 @@ static int parse_options(struct super_block *sb, char *options) >> !strncmp(name, "fs-based", 8)) { >> F2FS_OPTION(sbi).whint_mode = WHINT_MODE_FS; >> } else { >> - kvfree(name); >> + kfree(name); >> return -EINVAL; >> } >> - kvfree(name); >> + kfree(name); >> break; >> case Opt_alloc: >> name = match_strdup(&args[0]); >> @@ -747,10 +747,10 @@ static int parse_options(struct super_block *sb, char *options) >> !strncmp(name, "reuse", 5)) { >> F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE; >> } else { >> - kvfree(name); >> + kfree(name); >> return -EINVAL; >> } >> - kvfree(name); >> + kfree(name); >> break; >> case Opt_fsync: >> name = match_strdup(&args[0]); >> @@ -767,10 +767,10 @@ static int parse_options(struct super_block *sb, char *options) >> F2FS_OPTION(sbi).fsync_mode = >> FSYNC_MODE_NOBARRIER; >> } else { >> - kvfree(name); >> + kfree(name); >> return -EINVAL; >> } >> - kvfree(name); >> + kfree(name); >> break; >> case Opt_test_dummy_encryption: >> #ifdef CONFIG_FS_ENCRYPTION >> @@ -1052,10 +1052,10 @@ static void destroy_device_list(struct f2fs_sb_info *sbi) >> for (i = 0; i < sbi->s_ndevs; i++) { >> blkdev_put(FDEV(i).bdev, FMODE_EXCL); >> #ifdef CONFIG_BLK_DEV_ZONED >> - kvfree(FDEV(i).blkz_seq); >> + kfree(FDEV(i).blkz_type); >> #endif >> } >> - kvfree(sbi->devs); >> + kfree(sbi->devs); >> } >> >> static void f2fs_put_super(struct super_block *sb) >> @@ -1125,28 +1125,28 @@ static void f2fs_put_super(struct super_block *sb) >> f2fs_destroy_node_manager(sbi); >> f2fs_destroy_segment_manager(sbi); >> >> - kvfree(sbi->ckpt); >> + kfree(sbi->ckpt); >> >> f2fs_unregister_sysfs(sbi); >> >> sb->s_fs_info = NULL; >> if (sbi->s_chksum_driver) >> crypto_free_shash(sbi->s_chksum_driver); >> - kvfree(sbi->raw_super); >> + kfree(sbi->raw_super); >> >> destroy_device_list(sbi); >> mempool_destroy(sbi->write_io_dummy); >> #ifdef CONFIG_QUOTA >> for (i = 0; i < MAXQUOTAS; i++) >> - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); >> + kfree(F2FS_OPTION(sbi).s_qf_names[i]); >> #endif >> destroy_percpu_info(sbi); >> for (i = 0; i < NR_PAGE_TYPE; i++) >> - kvfree(sbi->write_io[i]); >> + kfree(sbi->write_io[i]); >> #ifdef CONFIG_UNICODE >> utf8_unload(sbi->s_encoding); >> #endif >> - kvfree(sbi); >> + kfree(sbi); >> } >> >> int f2fs_sync_fs(struct super_block *sb, int sync) >> @@ -1600,7 +1600,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) >> GFP_KERNEL); >> if (!org_mount_opt.s_qf_names[i]) { >> for (j = 0; j < i; j++) >> - kvfree(org_mount_opt.s_qf_names[j]); >> + kfree(org_mount_opt.s_qf_names[j]); >> return -ENOMEM; >> } >> } else { >> @@ -1724,7 +1724,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) >> #ifdef CONFIG_QUOTA >> /* Release old quota file names */ >> for (i = 0; i < MAXQUOTAS; i++) >> - kvfree(org_mount_opt.s_qf_names[i]); >> + kfree(org_mount_opt.s_qf_names[i]); >> #endif >> /* Update the POSIXACL Flag */ >> sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | >> @@ -1744,7 +1744,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data) >> #ifdef CONFIG_QUOTA >> F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt; >> for (i = 0; i < MAXQUOTAS; i++) { >> - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); >> + kfree(F2FS_OPTION(sbi).s_qf_names[i]); >> F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i]; >> } >> #endif >> @@ -2935,7 +2935,7 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi) >> } >> } >> >> - kvfree(zones); >> + kfree(zones); >> >> return err; >> } >> @@ -2992,7 +2992,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi, >> >> /* No valid superblock */ >> if (!*raw_super) >> - kvfree(super); >> + kfree(super); >> else >> err = 0; >> >> @@ -3563,7 +3563,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) >> if (err) >> goto sync_free_meta; >> } >> - kvfree(options); >> + kfree(options); >> >> /* recover broken superblock */ >> if (recovery) { >> @@ -3620,7 +3620,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) >> f2fs_destroy_segment_manager(sbi); >> free_devices: >> destroy_device_list(sbi); >> - kvfree(sbi->ckpt); >> + kfree(sbi->ckpt); >> free_meta_inode: >> make_bad_inode(sbi->meta_inode); >> iput(sbi->meta_inode); >> @@ -3631,7 +3631,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) >> destroy_percpu_info(sbi); >> free_bio_info: >> for (i = 0; i < NR_PAGE_TYPE; i++) >> - kvfree(sbi->write_io[i]); >> + kfree(sbi->write_io[i]); >> >> #ifdef CONFIG_UNICODE >> utf8_unload(sbi->s_encoding); >> @@ -3639,15 +3639,15 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent) >> free_options: >> #ifdef CONFIG_QUOTA >> for (i = 0; i < MAXQUOTAS; i++) >> - kvfree(F2FS_OPTION(sbi).s_qf_names[i]); >> + kfree(F2FS_OPTION(sbi).s_qf_names[i]); >> #endif >> - kvfree(options); >> + kfree(options); >> free_sb_buf: >> - kvfree(raw_super); >> + kfree(raw_super); >> free_sbi: >> if (sbi->s_chksum_driver) >> crypto_free_shash(sbi->s_chksum_driver); >> - kvfree(sbi); >> + kfree(sbi); >> >> /* give only one another chance */ >> if (retry_cnt > 0 && skip_recovery) { >> diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c >> index 296b3189448a..ff2455b4ad14 100644 >> --- a/fs/f2fs/xattr.c >> +++ b/fs/f2fs/xattr.c >> @@ -362,7 +362,7 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage, >> *base_addr = txattr_addr; >> return 0; >> out: >> - kvfree(txattr_addr); >> + kfree(txattr_addr); >> return err; >> } >> >> @@ -405,7 +405,7 @@ static int read_all_xattrs(struct inode *inode, struct page *ipage, >> *base_addr = txattr_addr; >> return 0; >> fail: >> - kvfree(txattr_addr); >> + kfree(txattr_addr); >> return err; >> } >> >> @@ -532,7 +532,7 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name, >> } >> error = size; >> out: >> - kvfree(base_addr); >> + kfree(base_addr); >> return error; >> } >> >> @@ -590,7 +590,7 @@ ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size) >> } >> error = buffer_size - rest; >> cleanup: >> - kvfree(base_addr); >> + kfree(base_addr); >> return error; >> } >> >> @@ -731,7 +731,7 @@ static int __f2fs_setxattr(struct inode *inode, int index, >> if (!error && S_ISDIR(inode->i_mode)) >> set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP); >> exit: >> - kvfree(base_addr); >> + kfree(base_addr); >> return error; >> } >> >> -- >> 2.18.0.rc1 > . > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" 2019-11-05 2:17 ` Chao Yu @ 2019-11-05 2:38 ` Eric Biggers 2019-11-05 2:49 ` Chao Yu 0 siblings, 1 reply; 9+ messages in thread From: Eric Biggers @ 2019-11-05 2:38 UTC (permalink / raw) To: Chao Yu; +Cc: Jaegeuk Kim, linux-kernel, linux-f2fs-devel On Tue, Nov 05, 2019 at 10:17:41AM +0800, Chao Yu wrote: > On 2019/11/5 8:02, Jaegeuk Kim wrote: > > On 11/01, Chao Yu wrote: > >> This reverts commit 5222595d093ebe80329d38d255d14316257afb3e. > >> > >> As discussed with Eric, as kvmalloc() will try kmalloc() first, so > >> when we need allocate large size memory, it'd better to use > >> f2fs_kvmalloc() directly rather than adding additional fallback > >> logic to call kvmalloc() after we failed in f2fs_kmalloc(). > >> > >> In order to avoid allocation failure described in original commit, > >> I change to use f2fs_kvmalloc() for .free_nid_bitmap bitmap memory. > > > > Is there any problem in the previous flow? > > No existing problem, however, it's redundant to introduce fallback flow in > f2fs_kmalloc() like vmalloc() did, since we can call f2fs_vmalloc() directly in > places where we need large memory. > > Thanks, > f2fs_kmalloc() also violated the naming convention used everywhere else in the kernel since it could return both kmalloc and vmalloc memory, not just kmalloc memory. That's really error-prone since people would naturally assume it's safe to free the *_kmalloc()-ed memory with kfree(). - Eric _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" 2019-11-05 2:38 ` Eric Biggers @ 2019-11-05 2:49 ` Chao Yu 2019-11-05 3:04 ` Jaegeuk Kim 0 siblings, 1 reply; 9+ messages in thread From: Chao Yu @ 2019-11-05 2:49 UTC (permalink / raw) To: Jaegeuk Kim, linux-kernel, linux-f2fs-devel On 2019/11/5 10:38, Eric Biggers wrote: > On Tue, Nov 05, 2019 at 10:17:41AM +0800, Chao Yu wrote: >> On 2019/11/5 8:02, Jaegeuk Kim wrote: >>> On 11/01, Chao Yu wrote: >>>> This reverts commit 5222595d093ebe80329d38d255d14316257afb3e. >>>> >>>> As discussed with Eric, as kvmalloc() will try kmalloc() first, so >>>> when we need allocate large size memory, it'd better to use >>>> f2fs_kvmalloc() directly rather than adding additional fallback >>>> logic to call kvmalloc() after we failed in f2fs_kmalloc(). >>>> >>>> In order to avoid allocation failure described in original commit, >>>> I change to use f2fs_kvmalloc() for .free_nid_bitmap bitmap memory. >>> >>> Is there any problem in the previous flow? >> >> No existing problem, however, it's redundant to introduce fallback flow in >> f2fs_kmalloc() like vmalloc() did, since we can call f2fs_vmalloc() directly in >> places where we need large memory. >> >> Thanks, >> > > f2fs_kmalloc() also violated the naming convention used everywhere else in the > kernel since it could return both kmalloc and vmalloc memory, not just kmalloc > memory. That's really error-prone since people would naturally assume it's safe > to free the *_kmalloc()-ed memory with kfree(). Agreed. Thanks, > > - Eric > . > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" 2019-11-05 2:49 ` Chao Yu @ 2019-11-05 3:04 ` Jaegeuk Kim 0 siblings, 0 replies; 9+ messages in thread From: Jaegeuk Kim @ 2019-11-05 3:04 UTC (permalink / raw) To: Chao Yu; +Cc: linux-kernel, linux-f2fs-devel On 11/05, Chao Yu wrote: > On 2019/11/5 10:38, Eric Biggers wrote: > > On Tue, Nov 05, 2019 at 10:17:41AM +0800, Chao Yu wrote: > >> On 2019/11/5 8:02, Jaegeuk Kim wrote: > >>> On 11/01, Chao Yu wrote: > >>>> This reverts commit 5222595d093ebe80329d38d255d14316257afb3e. > >>>> > >>>> As discussed with Eric, as kvmalloc() will try kmalloc() first, so > >>>> when we need allocate large size memory, it'd better to use > >>>> f2fs_kvmalloc() directly rather than adding additional fallback > >>>> logic to call kvmalloc() after we failed in f2fs_kmalloc(). > >>>> > >>>> In order to avoid allocation failure described in original commit, > >>>> I change to use f2fs_kvmalloc() for .free_nid_bitmap bitmap memory. > >>> > >>> Is there any problem in the previous flow? > >> > >> No existing problem, however, it's redundant to introduce fallback flow in > >> f2fs_kmalloc() like vmalloc() did, since we can call f2fs_vmalloc() directly in > >> places where we need large memory. > >> > >> Thanks, > >> > > > > f2fs_kmalloc() also violated the naming convention used everywhere else in the > > kernel since it could return both kmalloc and vmalloc memory, not just kmalloc > > memory. That's really error-prone since people would naturally assume it's safe > > to free the *_kmalloc()-ed memory with kfree(). > > Agreed. Then, why not just keeping f2fs_kvmalloc() and replace all f2fs_kmalloc() with f2fs_kvmalloc()? f2fs_kvmalloc() - call kmalloc() - vmalloc(), if failed I'd like to keep the allocation behavior first. Thanks, _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2019-11-05 3:05 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-11-01 9:53 [f2fs-dev] [PATCH 1/3] f2fs: clean up check condition for writting beyond EOF Chao Yu 2019-11-01 9:53 ` [f2fs-dev] [PATCH 2/3] f2fs: show f2fs instance in printk_ratelimited Chao Yu 2019-11-01 9:53 ` [f2fs-dev] [PATCH 3/3] Revert "f2fs: use kvmalloc, if kmalloc is failed" Chao Yu [not found] ` <201911022233.zTMqGPBr%lkp@intel.com> 2019-11-04 8:03 ` Chao Yu 2019-11-05 0:02 ` Jaegeuk Kim 2019-11-05 2:17 ` Chao Yu 2019-11-05 2:38 ` Eric Biggers 2019-11-05 2:49 ` Chao Yu 2019-11-05 3:04 ` Jaegeuk Kim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).