linux-block.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [bug report] lightnvm: core on-disk initialization
@ 2016-12-08 10:47 Dan Carpenter
  2016-12-08 12:06 ` Matias Bjørling
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2016-12-08 10:47 UTC (permalink / raw)
  To: m; +Cc: linux-block

Hello Matias Bj�rling,

The patch e3eb3799f7e0: "lightnvm: core on-disk initialization" from
Jan 12, 2016, leads to the following static checker warning:

	drivers/lightnvm/sysblk.c:409 nvm_get_sysblock()
	warn: missing error code here? 'kzalloc()' failed.

drivers/lightnvm/sysblk.c
   398          mutex_lock(&dev->mlock);
   399          ret = nvm_get_all_sysblks(dev, &s, sysblk_ppas, 0);
   400          if (ret)
   401                  goto err_sysblk;
   402  
   403          /* no sysblocks initialized */
   404          if (!s.nr_ppas)
   405                  goto err_sysblk;

Do we want to return 0 or an error code here?  I'm not sure.

   406  
   407          cur = kzalloc(sizeof(struct nvm_system_block), GFP_KERNEL);
   408          if (!cur)
   409                  goto err_sysblk;

We should set "ret = -ENOMEM;" before the goto.

   410  
   411          /* find the latest block across all sysblocks */
   412          for (i = 0; i < s.nr_rows; i++) {
   413                  for (j = 0; j < MAX_BLKS_PR_SYSBLK; j++) {
   414                          struct ppa_addr ppa = s.ppas[scan_ppa_idx(i, j)];
   415  
   416                          ret = nvm_scan_block(dev, &ppa, cur);
   417                          if (ret > 0)
   418                                  found = 1;
   419                          else if (ret < 0)
   420                                  break;
   421                  }
   422          }
   423  
   424          nvm_sysblk_to_cpu(info, cur);
   425  
   426          kfree(cur);
   427  err_sysblk:
   428          mutex_unlock(&dev->mlock);
   429  
   430          if (found)
   431                  return 1;
   432          return ret;
   433  }
   434  
   435  int nvm_update_sysblock(struct nvm_dev *dev, struct nvm_sb_info *new)
   436  {
   437          /* 1. for each latest superblock
   438           * 2. if room
   439           *    a. write new flash page entry with the updated information
   440           * 3. if no room
   441           *    a. find next available block on lun (linear search)
   442           *       if none, continue to next lun
   443           *       if none at all, report error. also report that it wasn't
   444           *       possible to write to all superblocks.
   445           *    c. write data to block.
   446           */
   447          struct ppa_addr sysblk_ppas[MAX_SYSBLKS];
   448          struct sysblk_scan s;
   449          struct nvm_system_block *cur;
   450          int i, j, ppaidx, found = 0;
   451          int ret = -ENOMEM;
   452  
   453          if (!dev->ops->get_bb_tbl)
   454                  return -EINVAL;
   455  
   456          nvm_setup_sysblk_scan(dev, &s, sysblk_ppas);
   457  
   458          mutex_lock(&dev->mlock);
   459          ret = nvm_get_all_sysblks(dev, &s, sysblk_ppas, 0);
   460          if (ret)
   461                  goto err_sysblk;
   462  
   463          cur = kzalloc(sizeof(struct nvm_system_block), GFP_KERNEL);
   464          if (!cur)
   465                  goto err_sysblk;

Same here as well.

   466  

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [bug report] lightnvm: core on-disk initialization
  2016-12-08 10:47 [bug report] lightnvm: core on-disk initialization Dan Carpenter
@ 2016-12-08 12:06 ` Matias Bjørling
  0 siblings, 0 replies; 2+ messages in thread
From: Matias Bjørling @ 2016-12-08 12:06 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-block

On 12/08/2016 11:47 AM, Dan Carpenter wrote:
> Hello Matias Bj�rling,
> 
> The patch e3eb3799f7e0: "lightnvm: core on-disk initialization" from
> Jan 12, 2016, leads to the following static checker warning:
> 
> 	drivers/lightnvm/sysblk.c:409 nvm_get_sysblock()
> 	warn: missing error code here? 'kzalloc()' failed.
> 
> drivers/lightnvm/sysblk.c
>    398          mutex_lock(&dev->mlock);
>    399          ret = nvm_get_all_sysblks(dev, &s, sysblk_ppas, 0);
>    400          if (ret)
>    401                  goto err_sysblk;
>    402  
>    403          /* no sysblocks initialized */
>    404          if (!s.nr_ppas)
>    405                  goto err_sysblk;
> 
> Do we want to return 0 or an error code here?  I'm not sure.
> 
>    406  
>    407          cur = kzalloc(sizeof(struct nvm_system_block), GFP_KERNEL);
>    408          if (!cur)
>    409                  goto err_sysblk;
> 
> We should set "ret = -ENOMEM;" before the goto.
> 
>    410  
>    411          /* find the latest block across all sysblocks */
>    412          for (i = 0; i < s.nr_rows; i++) {
>    413                  for (j = 0; j < MAX_BLKS_PR_SYSBLK; j++) {
>    414                          struct ppa_addr ppa = s.ppas[scan_ppa_idx(i, j)];
>    415  
>    416                          ret = nvm_scan_block(dev, &ppa, cur);
>    417                          if (ret > 0)
>    418                                  found = 1;
>    419                          else if (ret < 0)
>    420                                  break;
>    421                  }
>    422          }
>    423  
>    424          nvm_sysblk_to_cpu(info, cur);
>    425  
>    426          kfree(cur);
>    427  err_sysblk:
>    428          mutex_unlock(&dev->mlock);
>    429  
>    430          if (found)
>    431                  return 1;
>    432          return ret;
>    433  }
>    434  
>    435  int nvm_update_sysblock(struct nvm_dev *dev, struct nvm_sb_info *new)
>    436  {
>    437          /* 1. for each latest superblock
>    438           * 2. if room
>    439           *    a. write new flash page entry with the updated information
>    440           * 3. if no room
>    441           *    a. find next available block on lun (linear search)
>    442           *       if none, continue to next lun
>    443           *       if none at all, report error. also report that it wasn't
>    444           *       possible to write to all superblocks.
>    445           *    c. write data to block.
>    446           */
>    447          struct ppa_addr sysblk_ppas[MAX_SYSBLKS];
>    448          struct sysblk_scan s;
>    449          struct nvm_system_block *cur;
>    450          int i, j, ppaidx, found = 0;
>    451          int ret = -ENOMEM;
>    452  
>    453          if (!dev->ops->get_bb_tbl)
>    454                  return -EINVAL;
>    455  
>    456          nvm_setup_sysblk_scan(dev, &s, sysblk_ppas);
>    457  
>    458          mutex_lock(&dev->mlock);
>    459          ret = nvm_get_all_sysblks(dev, &s, sysblk_ppas, 0);
>    460          if (ret)
>    461                  goto err_sysblk;
>    462  
>    463          cur = kzalloc(sizeof(struct nvm_system_block), GFP_KERNEL);
>    464          if (!cur)
>    465                  goto err_sysblk;
> 
> Same here as well.
> 
>    466  
> 
> regards,
> dan carpenter
> 

Great catch! Thanks for taking the time to find it. The return value
should be set. I'm planning to remove the sysblk code for 4.11. That'll
remove this code.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-12-08 12:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-12-08 10:47 [bug report] lightnvm: core on-disk initialization Dan Carpenter
2016-12-08 12:06 ` Matias Bjørling

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).