@@ -562,11 +562,9 @@ int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd)
562
562
563
563
int pblk_submit_io_sync_sem (struct pblk * pblk , struct nvm_rq * rqd )
564
564
{
565
- struct ppa_addr * ppa_list ;
565
+ struct ppa_addr * ppa_list = nvm_rq_to_ppa_list ( rqd ) ;
566
566
int ret ;
567
567
568
- ppa_list = (rqd -> nr_ppas > 1 ) ? rqd -> ppa_list : & rqd -> ppa_addr ;
569
-
570
568
pblk_down_chunk (pblk , ppa_list [0 ]);
571
569
ret = pblk_submit_io_sync (pblk , rqd );
572
570
pblk_up_chunk (pblk , ppa_list [0 ]);
@@ -725,6 +723,7 @@ int pblk_line_smeta_read(struct pblk *pblk, struct pblk_line *line)
725
723
struct nvm_tgt_dev * dev = pblk -> dev ;
726
724
struct pblk_line_meta * lm = & pblk -> lm ;
727
725
struct bio * bio ;
726
+ struct ppa_addr * ppa_list ;
728
727
struct nvm_rq rqd ;
729
728
u64 paddr = pblk_line_smeta_start (pblk , line );
730
729
int i , ret ;
@@ -748,9 +747,10 @@ int pblk_line_smeta_read(struct pblk *pblk, struct pblk_line *line)
748
747
rqd .opcode = NVM_OP_PREAD ;
749
748
rqd .nr_ppas = lm -> smeta_sec ;
750
749
rqd .is_seq = 1 ;
750
+ ppa_list = nvm_rq_to_ppa_list (& rqd );
751
751
752
752
for (i = 0 ; i < lm -> smeta_sec ; i ++ , paddr ++ )
753
- rqd . ppa_list [i ] = addr_to_gen_ppa (pblk , paddr , line -> id );
753
+ ppa_list [i ] = addr_to_gen_ppa (pblk , paddr , line -> id );
754
754
755
755
ret = pblk_submit_io_sync (pblk , & rqd );
756
756
if (ret ) {
@@ -777,6 +777,7 @@ static int pblk_line_smeta_write(struct pblk *pblk, struct pblk_line *line,
777
777
struct nvm_tgt_dev * dev = pblk -> dev ;
778
778
struct pblk_line_meta * lm = & pblk -> lm ;
779
779
struct bio * bio ;
780
+ struct ppa_addr * ppa_list ;
780
781
struct nvm_rq rqd ;
781
782
__le64 * lba_list = emeta_to_lbas (pblk , line -> emeta -> buf );
782
783
__le64 addr_empty = cpu_to_le64 (ADDR_EMPTY );
@@ -801,12 +802,13 @@ static int pblk_line_smeta_write(struct pblk *pblk, struct pblk_line *line,
801
802
rqd .opcode = NVM_OP_PWRITE ;
802
803
rqd .nr_ppas = lm -> smeta_sec ;
803
804
rqd .is_seq = 1 ;
805
+ ppa_list = nvm_rq_to_ppa_list (& rqd );
804
806
805
807
for (i = 0 ; i < lm -> smeta_sec ; i ++ , paddr ++ ) {
806
808
struct pblk_sec_meta * meta = pblk_get_meta (pblk ,
807
809
rqd .meta_list , i );
808
810
809
- rqd . ppa_list [i ] = addr_to_gen_ppa (pblk , paddr , line -> id );
811
+ ppa_list [i ] = addr_to_gen_ppa (pblk , paddr , line -> id );
810
812
meta -> lba = lba_list [paddr ] = addr_empty ;
811
813
}
812
814
@@ -836,8 +838,9 @@ int pblk_line_emeta_read(struct pblk *pblk, struct pblk_line *line,
836
838
struct nvm_geo * geo = & dev -> geo ;
837
839
struct pblk_line_mgmt * l_mg = & pblk -> l_mg ;
838
840
struct pblk_line_meta * lm = & pblk -> lm ;
839
- void * ppa_list , * meta_list ;
841
+ void * ppa_list_buf , * meta_list ;
840
842
struct bio * bio ;
843
+ struct ppa_addr * ppa_list ;
841
844
struct nvm_rq rqd ;
842
845
u64 paddr = line -> emeta_ssec ;
843
846
dma_addr_t dma_ppa_list , dma_meta_list ;
@@ -853,7 +856,7 @@ int pblk_line_emeta_read(struct pblk *pblk, struct pblk_line *line,
853
856
if (!meta_list )
854
857
return - ENOMEM ;
855
858
856
- ppa_list = meta_list + pblk_dma_meta_size (pblk );
859
+ ppa_list_buf = meta_list + pblk_dma_meta_size (pblk );
857
860
dma_ppa_list = dma_meta_list + pblk_dma_meta_size (pblk );
858
861
859
862
next_rq :
@@ -874,11 +877,12 @@ int pblk_line_emeta_read(struct pblk *pblk, struct pblk_line *line,
874
877
875
878
rqd .bio = bio ;
876
879
rqd .meta_list = meta_list ;
877
- rqd .ppa_list = ppa_list ;
880
+ rqd .ppa_list = ppa_list_buf ;
878
881
rqd .dma_meta_list = dma_meta_list ;
879
882
rqd .dma_ppa_list = dma_ppa_list ;
880
883
rqd .opcode = NVM_OP_PREAD ;
881
884
rqd .nr_ppas = rq_ppas ;
885
+ ppa_list = nvm_rq_to_ppa_list (& rqd );
882
886
883
887
for (i = 0 ; i < rqd .nr_ppas ; ) {
884
888
struct ppa_addr ppa = addr_to_gen_ppa (pblk , paddr , line_id );
@@ -906,7 +910,7 @@ int pblk_line_emeta_read(struct pblk *pblk, struct pblk_line *line,
906
910
}
907
911
908
912
for (j = 0 ; j < min ; j ++ , i ++ , paddr ++ )
909
- rqd . ppa_list [i ] = addr_to_gen_ppa (pblk , paddr , line_id );
913
+ ppa_list [i ] = addr_to_gen_ppa (pblk , paddr , line_id );
910
914
}
911
915
912
916
ret = pblk_submit_io_sync (pblk , & rqd );
@@ -1525,11 +1529,9 @@ void pblk_ppa_to_line_put(struct pblk *pblk, struct ppa_addr ppa)
1525
1529
1526
1530
void pblk_rq_to_line_put (struct pblk * pblk , struct nvm_rq * rqd )
1527
1531
{
1528
- struct ppa_addr * ppa_list ;
1532
+ struct ppa_addr * ppa_list = nvm_rq_to_ppa_list ( rqd ) ;
1529
1533
int i ;
1530
1534
1531
- ppa_list = (rqd -> nr_ppas > 1 ) ? rqd -> ppa_list : & rqd -> ppa_addr ;
1532
-
1533
1535
for (i = 0 ; i < rqd -> nr_ppas ; i ++ )
1534
1536
pblk_ppa_to_line_put (pblk , ppa_list [i ]);
1535
1537
}
0 commit comments