Hi Xidong,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on mmotm/master]
[also build test WARNING on v4.16 next-20180405]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Xidong-Wang/z3fold-fix-memory-leak/20180404-114952
base:   git://git.cmpxchg.org/linux-mmotm.git master

smatch warnings:
mm/z3fold.c:493 z3fold_create_pool() error: potential null dereference 'pool'.  
(kzalloc returns null)
mm/z3fold.c:493 z3fold_create_pool() error: we previously assumed 'pool' could 
be null (see line 465)

vim +/pool +493 mm/z3fold.c

   443  
   444  
   445  /*
   446   * API Functions
   447   */
   448  
   449  /**
   450   * z3fold_create_pool() - create a new z3fold pool
   451   * @name:       pool name
   452   * @gfp:        gfp flags when allocating the z3fold pool structure
   453   * @ops:        user-defined operations for the z3fold pool
   454   *
   455   * Return: pointer to the new z3fold pool or NULL if the metadata 
allocation
   456   * failed.
   457   */
   458  static struct z3fold_pool *z3fold_create_pool(const char *name, gfp_t 
gfp,
   459                  const struct z3fold_ops *ops)
   460  {
   461          struct z3fold_pool *pool = NULL;
   462          int i, cpu;
   463  
   464          pool = kzalloc(sizeof(struct z3fold_pool), gfp);
 > 465          if (!pool)
   466                  goto out;
   467          spin_lock_init(&pool->lock);
   468          spin_lock_init(&pool->stale_lock);
   469          pool->unbuddied = __alloc_percpu(sizeof(struct 
list_head)*NCHUNKS, 2);
   470          for_each_possible_cpu(cpu) {
   471                  struct list_head *unbuddied =
   472                                  per_cpu_ptr(pool->unbuddied, cpu);
   473                  for_each_unbuddied_list(i, 0)
   474                          INIT_LIST_HEAD(&unbuddied[i]);
   475          }
   476          INIT_LIST_HEAD(&pool->lru);
   477          INIT_LIST_HEAD(&pool->stale);
   478          atomic64_set(&pool->pages_nr, 0);
   479          pool->name = name;
   480          pool->compact_wq = create_singlethread_workqueue(pool->name);
   481          if (!pool->compact_wq)
   482                  goto out;
   483          pool->release_wq = create_singlethread_workqueue(pool->name);
   484          if (!pool->release_wq)
   485                  goto out_wq;
   486          INIT_WORK(&pool->work, free_pages_work);
   487          pool->ops = ops;
   488          return pool;
   489  
   490  out_wq:
   491          destroy_workqueue(pool->compact_wq);
   492  out:
 > 493          free_percpu(pool->unbuddied);
   494          kfree(pool);
   495          return NULL;
   496  }
   497  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Reply via email to