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