]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/nvme/host/lightnvm.c
nvme-lightnvm: add missing endianess conversion in nvme_nvm_end_io
[karo-tx-linux.git] / drivers / nvme / host / lightnvm.c
index 4b78090518e1c659ea02a4dee97d047bdef5ca0c..e4e4e60b1224f770ab89d0a4f0cde4e86d6eea42 100644 (file)
@@ -483,8 +483,8 @@ static void nvme_nvm_end_io(struct request *rq, int error)
 {
        struct nvm_rq *rqd = rq->end_io_data;
 
-       rqd->ppa_status = nvme_req(rq)->result.u64;
-       rqd->error = error;
+       rqd->ppa_status = le64_to_cpu(nvme_req(rq)->result.u64);
+       rqd->error = nvme_req(rq)->status;
        nvm_end_io(rqd);
 
        kfree(nvme_req(rq)->cmd);
@@ -511,11 +511,7 @@ static int nvme_nvm_submit_io(struct nvm_dev *dev, struct nvm_rq *rqd)
        rq->cmd_flags &= ~REQ_FAILFAST_DRIVER;
 
        if (bio) {
-               rq->ioprio = bio_prio(bio);
-               rq->__data_len = bio->bi_iter.bi_size;
-               rq->bio = rq->biotail = bio;
-               if (bio_has_data(bio))
-                       rq->nr_phys_segments = bio_phys_segments(q, bio);
+               blk_init_request_from_bio(rq, bio);
        } else {
                rq->ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_NORM);
                rq->__data_len = 0;
@@ -599,7 +595,7 @@ static int nvme_nvm_submit_user_cmd(struct request_queue *q,
        __le64 *metadata = NULL;
        dma_addr_t metadata_dma;
        DECLARE_COMPLETION_ONSTACK(wait);
-       int ret;
+       int ret = 0;
 
        rq = nvme_alloc_request(q, (struct nvme_command *)vcmd, 0,
                        NVME_QID_ANY);
@@ -669,9 +665,12 @@ submit:
 
        wait_for_completion_io(&wait);
 
-       ret = nvme_error_status(rq->errors);
+       if (nvme_req(rq)->flags & NVME_REQ_CANCELLED)
+               ret = -EINTR;
+       else if (nvme_req(rq)->status & 0x7ff)
+               ret = -EIO;
        if (result)
-               *result = rq->errors & 0x7ff;
+               *result = nvme_req(rq)->status & 0x7ff;
        if (status)
                *status = le64_to_cpu(nvme_req(rq)->result.u64);