diff options
| author | Javier González <javier@javigon.com> | 2018-10-09 07:12:02 -0400 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2018-10-09 10:25:07 -0400 |
| commit | 45dcf29b98377bbdc40aa4a23a79ade60295dbaf (patch) | |
| tree | 2c21e73e66a009ba9ebfb22e425064e952b91571 /drivers/lightnvm/pblk-read.c | |
| parent | 090ee26fd51270cc3bd54a0efbc716ede320ad27 (diff) | |
lightnvm: pblk: encapsulate rqd dma allocations
dma allocations for ppa_list and meta_list in rqd are replicated in
several places across the pblk codebase. Make helpers to encapsulate
creation and deletion to simplify the code.
Signed-off-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <mb@lightnvm.io>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
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 | } |
