Message ID | 20190327123901.12323-4-igor.j.konopko@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | lightnvm: next set of improvements for 5.2 | expand |
On 3/27/19 1:38 PM, Igor Konopko wrote: > Currently when smeta/emeta/oob is read errors are not always propagated > correctly. This patch changes that behaviour and propagates all the > error codes except of high ecc read warning status. > > 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> > --- > drivers/lightnvm/pblk-core.c | 9 +++++++-- > drivers/lightnvm/pblk-recovery.c | 2 +- > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c > index f2edec6..06ac3f0 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) > > atomic_dec(&pblk->inflight_io); > > - if (rqd.error) > + if (rqd.error && rqd.error != NVM_RSP_WARN_HIGHECC) { > pblk_log_read_err(pblk, &rqd); > + ret = -EIO; > + } > > clear_rqd: > pblk_free_rqd_meta(pblk, &rqd); > @@ -916,8 +918,11 @@ int pblk_line_emeta_read(struct pblk *pblk, struct pblk_line *line, > > atomic_dec(&pblk->inflight_io); > > - if (rqd.error) > + if (rqd.error && rqd.error != NVM_RSP_WARN_HIGHECC) { > pblk_log_read_err(pblk, &rqd); > + ret = -EIO; > + goto free_rqd_dma; > + } > > emeta_buf += rq_len; > left_ppas -= rq_ppas; > diff --git a/drivers/lightnvm/pblk-recovery.c b/drivers/lightnvm/pblk-recovery.c > index 357e529..124d817 100644 > --- a/drivers/lightnvm/pblk-recovery.c > +++ b/drivers/lightnvm/pblk-recovery.c > @@ -458,7 +458,7 @@ static int pblk_recov_scan_oob(struct pblk *pblk, struct pblk_line *line, > atomic_dec(&pblk->inflight_io); > > /* If a read fails, do a best effort by padding the line and retrying */ > - if (rqd->error) { > + if (rqd->error && rqd->error != NVM_RSP_WARN_HIGHECC) { > int pad_distance, ret; > > if (padded) { > Thanks, applied. I've updated the wording a bit.
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index f2edec6..06ac3f0 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) atomic_dec(&pblk->inflight_io); - if (rqd.error) + if (rqd.error && rqd.error != NVM_RSP_WARN_HIGHECC) { pblk_log_read_err(pblk, &rqd); + ret = -EIO; + } clear_rqd: pblk_free_rqd_meta(pblk, &rqd); @@ -916,8 +918,11 @@ int pblk_line_emeta_read(struct pblk *pblk, struct pblk_line *line, atomic_dec(&pblk->inflight_io); - if (rqd.error) + if (rqd.error && rqd.error != NVM_RSP_WARN_HIGHECC) { pblk_log_read_err(pblk, &rqd); + ret = -EIO; + goto free_rqd_dma; + } emeta_buf += rq_len; left_ppas -= rq_ppas; diff --git a/drivers/lightnvm/pblk-recovery.c b/drivers/lightnvm/pblk-recovery.c index 357e529..124d817 100644 --- a/drivers/lightnvm/pblk-recovery.c +++ b/drivers/lightnvm/pblk-recovery.c @@ -458,7 +458,7 @@ static int pblk_recov_scan_oob(struct pblk *pblk, struct pblk_line *line, atomic_dec(&pblk->inflight_io); /* If a read fails, do a best effort by padding the line and retrying */ - if (rqd->error) { + if (rqd->error && rqd->error != NVM_RSP_WARN_HIGHECC) { int pad_distance, ret; if (padded) {