Nice! Reviewed-by: Hans Holmberg <hans.holmberg@xxxxxxxxxxxx> On Thu, Mar 14, 2019 at 5:07 PM Igor Konopko <igor.j.konopko@xxxxxxxxx> 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@xxxxxxxxx> > --- > 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 39280c1..38e26fe 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 bcd3633..688fdeb 100644 > --- a/drivers/lightnvm/pblk-recovery.c > +++ b/drivers/lightnvm/pblk-recovery.c > @@ -450,7 +450,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) { > -- > 2.9.5 >