diff options
Diffstat (limited to 'drivers/lightnvm/pblk-core.c')
| -rw-r--r-- | drivers/lightnvm/pblk-core.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index 6dd4866e579c..3d27d24baa0b 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c | |||
| @@ -417,6 +417,11 @@ int pblk_submit_io(struct pblk *pblk, struct nvm_rq *rqd) | |||
| 417 | return nvm_submit_io(dev, rqd); | 417 | return nvm_submit_io(dev, rqd); |
| 418 | } | 418 | } |
| 419 | 419 | ||
| 420 | static void pblk_bio_map_addr_endio(struct bio *bio) | ||
| 421 | { | ||
| 422 | bio_put(bio); | ||
| 423 | } | ||
| 424 | |||
| 420 | struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, | 425 | struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, |
| 421 | unsigned int nr_secs, unsigned int len, | 426 | unsigned int nr_secs, unsigned int len, |
| 422 | int alloc_type, gfp_t gfp_mask) | 427 | int alloc_type, gfp_t gfp_mask) |
| @@ -453,6 +458,8 @@ struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, | |||
| 453 | 458 | ||
| 454 | kaddr += PAGE_SIZE; | 459 | kaddr += PAGE_SIZE; |
| 455 | } | 460 | } |
| 461 | |||
| 462 | bio->bi_end_io = pblk_bio_map_addr_endio; | ||
| 456 | out: | 463 | out: |
| 457 | return bio; | 464 | return bio; |
| 458 | } | 465 | } |
| @@ -671,9 +678,6 @@ next_rq: | |||
| 671 | atomic_dec(&pblk->inflight_io); | 678 | atomic_dec(&pblk->inflight_io); |
| 672 | reinit_completion(&wait); | 679 | reinit_completion(&wait); |
| 673 | 680 | ||
| 674 | if (likely(pblk->l_mg.emeta_alloc_type == PBLK_VMALLOC_META)) | ||
| 675 | bio_put(bio); | ||
| 676 | |||
| 677 | if (rqd.error) { | 681 | if (rqd.error) { |
| 678 | if (dir == WRITE) | 682 | if (dir == WRITE) |
| 679 | pblk_log_write_err(pblk, &rqd); | 683 | pblk_log_write_err(pblk, &rqd); |
