aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Konopko <igor.j.konopko@intel.com>2019-05-04 14:38:02 -0400
committerJens Axboe <axboe@kernel.dk>2019-05-06 12:19:18 -0400
commitd165a7a6f5aa05dfdfc164e24c11b6458a523ff7 (patch)
treea02eedc457fb198b506e305b1b28951a7234e2fe
parent2b0ae81e2a6f2114a68bdcc410bd1d72bacc97ad (diff)
lightnvm: pblk: propagate errors when reading meta
Read errors are not correctly propagated. Errors are cleared before returning control to the io submitter. Change the behaviour such that all read errors exept high ecc read warning status is returned appropriately. Signed-off-by: Igor Konopko <igor.j.konopko@intel.com> Reviewed-by: Javier González <javier@javigon.com> Reviewed-by: Hans Holmberg <hans.holmberg@cnexlabs.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/lightnvm/pblk-core.c9
-rw-r--r--drivers/lightnvm/pblk-recovery.c2
2 files changed, 8 insertions, 3 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
index 39280c1e9b5d..38e26fe23138 100644
--- a/drivers/lightnvm/pblk-core.c
+++ b/drivers/lightnvm/pblk-core.c
@@ -761,8 +761,10 @@ int pblk_line_smeta_read(struct pblk *pblk, struct pblk_line *line)
761 761
762 atomic_dec(&pblk->inflight_io); 762 atomic_dec(&pblk->inflight_io);
763 763
764 if (rqd.error) 764 if (rqd.error && rqd.error != NVM_RSP_WARN_HIGHECC) {
765 pblk_log_read_err(pblk, &rqd); 765 pblk_log_read_err(pblk, &rqd);
766 ret = -EIO;
767 }
766 768
767clear_rqd: 769clear_rqd:
768 pblk_free_rqd_meta(pblk, &rqd); 770 pblk_free_rqd_meta(pblk, &rqd);
@@ -916,8 +918,11 @@ next_rq:
916 918
917 atomic_dec(&pblk->inflight_io); 919 atomic_dec(&pblk->inflight_io);
918 920
919 if (rqd.error) 921 if (rqd.error && rqd.error != NVM_RSP_WARN_HIGHECC) {
920 pblk_log_read_err(pblk, &rqd); 922 pblk_log_read_err(pblk, &rqd);
923 ret = -EIO;
924 goto free_rqd_dma;
925 }
921 926
922 emeta_buf += rq_len; 927 emeta_buf += rq_len;
923 left_ppas -= rq_ppas; 928 left_ppas -= rq_ppas;
diff --git a/drivers/lightnvm/pblk-recovery.c b/drivers/lightnvm/pblk-recovery.c
index 357e52980f2f..124d8179b2ad 100644
--- a/drivers/lightnvm/pblk-recovery.c
+++ b/drivers/lightnvm/pblk-recovery.c
@@ -458,7 +458,7 @@ retry_rq:
458 atomic_dec(&pblk->inflight_io); 458 atomic_dec(&pblk->inflight_io);
459 459
460 /* If a read fails, do a best effort by padding the line and retrying */ 460 /* If a read fails, do a best effort by padding the line and retrying */
461 if (rqd->error) { 461 if (rqd->error && rqd->error != NVM_RSP_WARN_HIGHECC) {
462 int pad_distance, ret; 462 int pad_distance, ret;
463 463
464 if (padded) { 464 if (padded) {