]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/lightnvm/pblk-core.c
lightnvm: pblk: fix rqd.error return value in pblk_blk_erase_sync
[linux.git] / drivers / lightnvm / pblk-core.c
index 00984b486fea72a953652385c6133468f6f96810..72de7456845bde61a3c9b284cbdee4d388254d32 100644 (file)
@@ -688,7 +688,7 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line,
        if (dir == PBLK_WRITE) {
                struct pblk_sec_meta *meta_list = rqd.meta_list;
 
-               rqd.flags = pblk_set_progr_mode(pblk, PBLK_WRITE);
+               rqd.is_seq = 1;
                for (i = 0; i < rqd.nr_ppas; ) {
                        spin_lock(&line->lock);
                        paddr = __pblk_alloc_page(pblk, line, min);
@@ -703,11 +703,9 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line,
                for (i = 0; i < rqd.nr_ppas; ) {
                        struct ppa_addr ppa = addr_to_gen_ppa(pblk, paddr, id);
                        int pos = pblk_ppa_to_pos(geo, ppa);
-                       int read_type = PBLK_READ_RANDOM;
 
                        if (pblk_io_aligned(pblk, rq_ppas))
-                               read_type = PBLK_READ_SEQUENTIAL;
-                       rqd.flags = pblk_set_read_mode(pblk, read_type);
+                               rqd.is_seq = 1;
 
                        while (test_bit(pos, line->blk_bitmap)) {
                                paddr += min;
@@ -787,17 +785,14 @@ static int pblk_line_submit_smeta_io(struct pblk *pblk, struct pblk_line *line,
        __le64 *lba_list = NULL;
        int i, ret;
        int cmd_op, bio_op;
-       int flags;
 
        if (dir == PBLK_WRITE) {
                bio_op = REQ_OP_WRITE;
                cmd_op = NVM_OP_PWRITE;
-               flags = pblk_set_progr_mode(pblk, PBLK_WRITE);
                lba_list = emeta_to_lbas(pblk, line->emeta->buf);
        } else if (dir == PBLK_READ_RECOV || dir == PBLK_READ) {
                bio_op = REQ_OP_READ;
                cmd_op = NVM_OP_PREAD;
-               flags = pblk_set_read_mode(pblk, PBLK_READ_SEQUENTIAL);
        } else
                return -EINVAL;
 
@@ -822,7 +817,7 @@ static int pblk_line_submit_smeta_io(struct pblk *pblk, struct pblk_line *line,
 
        rqd.bio = bio;
        rqd.opcode = cmd_op;
-       rqd.flags = flags;
+       rqd.is_seq = 1;
        rqd.nr_ppas = lm->smeta_sec;
 
        for (i = 0; i < lm->smeta_sec; i++, paddr++) {
@@ -885,16 +880,14 @@ static void pblk_setup_e_rq(struct pblk *pblk, struct nvm_rq *rqd,
        rqd->opcode = NVM_OP_ERASE;
        rqd->ppa_addr = ppa;
        rqd->nr_ppas = 1;
-       rqd->flags = pblk_set_progr_mode(pblk, PBLK_ERASE);
+       rqd->is_seq = 1;
        rqd->bio = NULL;
 }
 
 static int pblk_blk_erase_sync(struct pblk *pblk, struct ppa_addr ppa)
 {
-       struct nvm_rq rqd;
-       int ret = 0;
-
-       memset(&rqd, 0, sizeof(struct nvm_rq));
+       struct nvm_rq rqd = {NULL};
+       int ret;
 
        pblk_setup_e_rq(pblk, &rqd, ppa);
 
@@ -902,19 +895,6 @@ static int pblk_blk_erase_sync(struct pblk *pblk, struct ppa_addr ppa)
         * with writes. Thus, there is no need to take the LUN semaphore.
         */
        ret = pblk_submit_io_sync(pblk, &rqd);
-       if (ret) {
-               struct nvm_tgt_dev *dev = pblk->dev;
-               struct nvm_geo *geo = &dev->geo;
-
-               pblk_err(pblk, "could not sync erase line:%d,blk:%d\n",
-                                       pblk_ppa_to_line(ppa),
-                                       pblk_ppa_to_pos(geo, ppa));
-
-               rqd.error = ret;
-               goto out;
-       }
-
-out:
        rqd.private = pblk;
        __pblk_end_io_erase(pblk, &rqd);