diff options
| -rw-r--r-- | drivers/lightnvm/pblk-core.c | 16 | ||||
| -rw-r--r-- | drivers/lightnvm/pblk.h | 1 |
2 files changed, 16 insertions, 1 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index 49cef93e328e..a3ce4a36dd33 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c | |||
| @@ -557,6 +557,20 @@ int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd) | |||
| 557 | return ret; | 557 | return ret; |
| 558 | } | 558 | } |
| 559 | 559 | ||
| 560 | int pblk_submit_io_sync_sem(struct pblk *pblk, struct nvm_rq *rqd) | ||
| 561 | { | ||
| 562 | struct ppa_addr *ppa_list; | ||
| 563 | int ret; | ||
| 564 | |||
| 565 | ppa_list = (rqd->nr_ppas > 1) ? rqd->ppa_list : &rqd->ppa_addr; | ||
| 566 | |||
| 567 | pblk_down_chunk(pblk, ppa_list[0]); | ||
| 568 | ret = pblk_submit_io_sync(pblk, rqd); | ||
| 569 | pblk_up_chunk(pblk, ppa_list[0]); | ||
| 570 | |||
| 571 | return ret; | ||
| 572 | } | ||
| 573 | |||
| 560 | static void pblk_bio_map_addr_endio(struct bio *bio) | 574 | static void pblk_bio_map_addr_endio(struct bio *bio) |
| 561 | { | 575 | { |
| 562 | bio_put(bio); | 576 | bio_put(bio); |
| @@ -787,7 +801,7 @@ static int pblk_line_smeta_write(struct pblk *pblk, struct pblk_line *line, | |||
| 787 | meta_list[i].lba = lba_list[paddr] = addr_empty; | 801 | meta_list[i].lba = lba_list[paddr] = addr_empty; |
| 788 | } | 802 | } |
| 789 | 803 | ||
| 790 | ret = pblk_submit_io_sync(pblk, &rqd); | 804 | ret = pblk_submit_io_sync_sem(pblk, &rqd); |
| 791 | if (ret) { | 805 | if (ret) { |
| 792 | pblk_err(pblk, "smeta I/O submission failed: %d\n", ret); | 806 | pblk_err(pblk, "smeta I/O submission failed: %d\n", ret); |
| 793 | bio_put(bio); | 807 | bio_put(bio); |
diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h index 02e2c02b0cf4..4c015c457197 100644 --- a/drivers/lightnvm/pblk.h +++ b/drivers/lightnvm/pblk.h | |||
| @@ -792,6 +792,7 @@ void pblk_log_write_err(struct pblk *pblk, struct nvm_rq *rqd); | |||
| 792 | void pblk_log_read_err(struct pblk *pblk, struct nvm_rq *rqd); | 792 | void pblk_log_read_err(struct pblk *pblk, struct nvm_rq *rqd); |
| 793 | int pblk_submit_io(struct pblk *pblk, struct nvm_rq *rqd); | 793 | int pblk_submit_io(struct pblk *pblk, struct nvm_rq *rqd); |
| 794 | int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd); | 794 | int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd); |
| 795 | int pblk_submit_io_sync_sem(struct pblk *pblk, struct nvm_rq *rqd); | ||
| 795 | int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line); | 796 | int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line); |
| 796 | void pblk_check_chunk_state_update(struct pblk *pblk, struct nvm_rq *rqd); | 797 | void pblk_check_chunk_state_update(struct pblk *pblk, struct nvm_rq *rqd); |
| 797 | struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, | 798 | struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, |
