summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/lightnvm/pblk-core.c16
-rw-r--r--drivers/lightnvm/pblk.h1
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
560int 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
560static void pblk_bio_map_addr_endio(struct bio *bio) 574static 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);
792void pblk_log_read_err(struct pblk *pblk, struct nvm_rq *rqd); 792void pblk_log_read_err(struct pblk *pblk, struct nvm_rq *rqd);
793int pblk_submit_io(struct pblk *pblk, struct nvm_rq *rqd); 793int pblk_submit_io(struct pblk *pblk, struct nvm_rq *rqd);
794int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd); 794int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd);
795int pblk_submit_io_sync_sem(struct pblk *pblk, struct nvm_rq *rqd);
795int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line); 796int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line);
796void pblk_check_chunk_state_update(struct pblk *pblk, struct nvm_rq *rqd); 797void pblk_check_chunk_state_update(struct pblk *pblk, struct nvm_rq *rqd);
797struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, 798struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data,