[bug report] lightnvm: core on-disk initialization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
--
To unsubscribe from this list: send the line "unsubscribe linux-block" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux