diff options
Diffstat (limited to 'drivers/lightnvm/pblk-core.c')
-rw-r--r-- | drivers/lightnvm/pblk-core.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index beae1618483f..29565f89a85e 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c | |||
@@ -564,7 +564,6 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line, | |||
564 | int id = line->id; | 564 | int id = line->id; |
565 | int rq_ppas, rq_len; | 565 | int rq_ppas, rq_len; |
566 | int cmd_op, bio_op; | 566 | int cmd_op, bio_op; |
567 | int flags; | ||
568 | int i, j; | 567 | int i, j; |
569 | int ret; | 568 | int ret; |
570 | DECLARE_COMPLETION_ONSTACK(wait); | 569 | DECLARE_COMPLETION_ONSTACK(wait); |
@@ -572,11 +571,9 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line, | |||
572 | if (dir == WRITE) { | 571 | if (dir == WRITE) { |
573 | bio_op = REQ_OP_WRITE; | 572 | bio_op = REQ_OP_WRITE; |
574 | cmd_op = NVM_OP_PWRITE; | 573 | cmd_op = NVM_OP_PWRITE; |
575 | flags = pblk_set_progr_mode(pblk, WRITE); | ||
576 | } else if (dir == READ) { | 574 | } else if (dir == READ) { |
577 | bio_op = REQ_OP_READ; | 575 | bio_op = REQ_OP_READ; |
578 | cmd_op = NVM_OP_PREAD; | 576 | cmd_op = NVM_OP_PREAD; |
579 | flags = pblk_set_read_mode(pblk); | ||
580 | } else | 577 | } else |
581 | return -EINVAL; | 578 | return -EINVAL; |
582 | 579 | ||
@@ -601,7 +598,6 @@ next_rq: | |||
601 | 598 | ||
602 | rqd.bio = bio; | 599 | rqd.bio = bio; |
603 | rqd.opcode = cmd_op; | 600 | rqd.opcode = cmd_op; |
604 | rqd.flags = flags; | ||
605 | rqd.nr_ppas = rq_ppas; | 601 | rqd.nr_ppas = rq_ppas; |
606 | rqd.ppa_list = ppa_list; | 602 | rqd.ppa_list = ppa_list; |
607 | rqd.dma_ppa_list = dma_ppa_list; | 603 | rqd.dma_ppa_list = dma_ppa_list; |
@@ -609,6 +605,7 @@ next_rq: | |||
609 | rqd.private = &wait; | 605 | rqd.private = &wait; |
610 | 606 | ||
611 | if (dir == WRITE) { | 607 | if (dir == WRITE) { |
608 | rqd.flags = pblk_set_progr_mode(pblk, WRITE); | ||
612 | for (i = 0; i < rqd.nr_ppas; ) { | 609 | for (i = 0; i < rqd.nr_ppas; ) { |
613 | spin_lock(&line->lock); | 610 | spin_lock(&line->lock); |
614 | paddr = __pblk_alloc_page(pblk, line, min); | 611 | paddr = __pblk_alloc_page(pblk, line, min); |
@@ -621,6 +618,11 @@ next_rq: | |||
621 | for (i = 0; i < rqd.nr_ppas; ) { | 618 | for (i = 0; i < rqd.nr_ppas; ) { |
622 | struct ppa_addr ppa = addr_to_gen_ppa(pblk, paddr, id); | 619 | struct ppa_addr ppa = addr_to_gen_ppa(pblk, paddr, id); |
623 | int pos = pblk_dev_ppa_to_pos(geo, ppa); | 620 | int pos = pblk_dev_ppa_to_pos(geo, ppa); |
621 | int read_type = PBLK_READ_RANDOM; | ||
622 | |||
623 | if (pblk_io_aligned(pblk, rq_ppas)) | ||
624 | read_type = PBLK_READ_SEQUENTIAL; | ||
625 | rqd.flags = pblk_set_read_mode(pblk, read_type); | ||
624 | 626 | ||
625 | while (test_bit(pos, line->blk_bitmap)) { | 627 | while (test_bit(pos, line->blk_bitmap)) { |
626 | paddr += min; | 628 | paddr += min; |
@@ -717,7 +719,7 @@ static int pblk_line_submit_smeta_io(struct pblk *pblk, struct pblk_line *line, | |||
717 | } else if (dir == READ) { | 719 | } else if (dir == READ) { |
718 | bio_op = REQ_OP_READ; | 720 | bio_op = REQ_OP_READ; |
719 | cmd_op = NVM_OP_PREAD; | 721 | cmd_op = NVM_OP_PREAD; |
720 | flags = pblk_set_read_mode(pblk); | 722 | flags = pblk_set_read_mode(pblk, PBLK_READ_SEQUENTIAL); |
721 | } else | 723 | } else |
722 | return -EINVAL; | 724 | return -EINVAL; |
723 | 725 | ||