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 <yuch...@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

Reply via email to