diff options
Diffstat (limited to 'drivers/lightnvm/pblk-read.c')
-rw-r--r-- | drivers/lightnvm/pblk-read.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/lightnvm/pblk-read.c b/drivers/lightnvm/pblk-read.c index 829e92857289..f5fe01d3a07f 100644 --- a/drivers/lightnvm/pblk-read.c +++ b/drivers/lightnvm/pblk-read.c | |||
@@ -453,21 +453,13 @@ int pblk_submit_read(struct pblk *pblk, struct bio *bio) | |||
453 | */ | 453 | */ |
454 | bio_init_idx = pblk_get_bi_idx(bio); | 454 | bio_init_idx = pblk_get_bi_idx(bio); |
455 | 455 | ||
456 | rqd->meta_list = nvm_dev_dma_alloc(dev->parent, GFP_KERNEL, | 456 | if (pblk_alloc_rqd_meta(pblk, rqd)) |
457 | &rqd->dma_meta_list); | ||
458 | if (!rqd->meta_list) { | ||
459 | pblk_err(pblk, "not able to allocate ppa list\n"); | ||
460 | goto fail_rqd_free; | 457 | goto fail_rqd_free; |
461 | } | ||
462 | |||
463 | if (nr_secs > 1) { | ||
464 | rqd->ppa_list = rqd->meta_list + pblk_dma_meta_size; | ||
465 | rqd->dma_ppa_list = rqd->dma_meta_list + pblk_dma_meta_size; | ||
466 | 458 | ||
459 | if (nr_secs > 1) | ||
467 | pblk_read_ppalist_rq(pblk, rqd, bio, blba, read_bitmap); | 460 | pblk_read_ppalist_rq(pblk, rqd, bio, blba, read_bitmap); |
468 | } else { | 461 | else |
469 | pblk_read_rq(pblk, rqd, bio, blba, read_bitmap); | 462 | pblk_read_rq(pblk, rqd, bio, blba, read_bitmap); |
470 | } | ||
471 | 463 | ||
472 | if (bitmap_full(read_bitmap, nr_secs)) { | 464 | if (bitmap_full(read_bitmap, nr_secs)) { |
473 | atomic_inc(&pblk->inflight_io); | 465 | atomic_inc(&pblk->inflight_io); |
@@ -594,15 +586,11 @@ int pblk_submit_read_gc(struct pblk *pblk, struct pblk_gc_rq *gc_rq) | |||
594 | 586 | ||
595 | memset(&rqd, 0, sizeof(struct nvm_rq)); | 587 | memset(&rqd, 0, sizeof(struct nvm_rq)); |
596 | 588 | ||
597 | rqd.meta_list = nvm_dev_dma_alloc(dev->parent, GFP_KERNEL, | 589 | ret = pblk_alloc_rqd_meta(pblk, &rqd); |
598 | &rqd.dma_meta_list); | 590 | if (ret) |
599 | if (!rqd.meta_list) | 591 | return ret; |
600 | return -ENOMEM; | ||
601 | 592 | ||
602 | if (gc_rq->nr_secs > 1) { | 593 | if (gc_rq->nr_secs > 1) { |
603 | rqd.ppa_list = rqd.meta_list + pblk_dma_meta_size; | ||
604 | rqd.dma_ppa_list = rqd.dma_meta_list + pblk_dma_meta_size; | ||
605 | |||
606 | gc_rq->secs_to_gc = read_ppalist_rq_gc(pblk, &rqd, gc_rq->line, | 594 | gc_rq->secs_to_gc = read_ppalist_rq_gc(pblk, &rqd, gc_rq->line, |
607 | gc_rq->lba_list, | 595 | gc_rq->lba_list, |
608 | gc_rq->paddr_list, | 596 | gc_rq->paddr_list, |
@@ -623,7 +611,8 @@ int pblk_submit_read_gc(struct pblk *pblk, struct pblk_gc_rq *gc_rq) | |||
623 | PBLK_VMALLOC_META, GFP_KERNEL); | 611 | PBLK_VMALLOC_META, GFP_KERNEL); |
624 | if (IS_ERR(bio)) { | 612 | if (IS_ERR(bio)) { |
625 | pblk_err(pblk, "could not allocate GC bio (%lu)\n", | 613 | pblk_err(pblk, "could not allocate GC bio (%lu)\n", |
626 | PTR_ERR(bio)); | 614 | PTR_ERR(bio)); |
615 | ret = PTR_ERR(bio); | ||
627 | goto err_free_dma; | 616 | goto err_free_dma; |
628 | } | 617 | } |
629 | 618 | ||
@@ -658,12 +647,12 @@ int pblk_submit_read_gc(struct pblk *pblk, struct pblk_gc_rq *gc_rq) | |||
658 | #endif | 647 | #endif |
659 | 648 | ||
660 | out: | 649 | out: |
661 | nvm_dev_dma_free(dev->parent, rqd.meta_list, rqd.dma_meta_list); | 650 | pblk_free_rqd_meta(pblk, &rqd); |
662 | return ret; | 651 | return ret; |
663 | 652 | ||
664 | err_free_bio: | 653 | err_free_bio: |
665 | bio_put(bio); | 654 | bio_put(bio); |
666 | err_free_dma: | 655 | err_free_dma: |
667 | nvm_dev_dma_free(dev->parent, rqd.meta_list, rqd.dma_meta_list); | 656 | pblk_free_rqd_meta(pblk, &rqd); |
668 | return ret; | 657 | return ret; |
669 | } | 658 | } |