RE: [GIT PULL 16/20] lightnvm: error handling when whole line is bad
> From: Javier Gonzalez [mailto:jav...@cnexlabs.com] > This case cannot occur on the only user of the function > (pblk_recov_l2p()). On the previous check (pblk_line_was_written()), we > verify the state of the line and the position of the first good chunk. In > the case of a bad line (less chunks than a given threshold to allow > emeta), the recovery will not be carried out in the line. You are right. It looks that during my testing there was some inconsistency between chunks state table which is verified inside pblk_line_was_written() and blk_bitmap which was read from emeta and is verified in pblk_line_smeta_start(). I'm living decision to maintainers whether we should keep this sanity check or not - it really just pass gracefully the result from pblk_line_smeta_start() where similar sanity check is present. Igor
RE: [GIT PULL 16/20] lightnvm: error handling when whole line is bad
> From: Javier Gonzalez [mailto:jav...@cnexlabs.com] > This case cannot occur on the only user of the function > (pblk_recov_l2p()). On the previous check (pblk_line_was_written()), we > verify the state of the line and the position of the first good chunk. In > the case of a bad line (less chunks than a given threshold to allow > emeta), the recovery will not be carried out in the line. You are right. It looks that during my testing there was some inconsistency between chunks state table which is verified inside pblk_line_was_written() and blk_bitmap which was read from emeta and is verified in pblk_line_smeta_start(). I'm living decision to maintainers whether we should keep this sanity check or not - it really just pass gracefully the result from pblk_line_smeta_start() where similar sanity check is present. Igor
Re: [GIT PULL 16/20] lightnvm: error handling when whole line is bad
> On 28 May 2018, at 10.58, Matias Bjørlingwrote: > > From: Igor Konopko > > When all the blocks (chunks) in line are marked as bad (offline) > we shouldn't try to read smeta during init process. > > Currently we are trying to do so by passing -1 as PPA address, > what causes multiple warnings, that we issuing IOs to out-of-bound > PPAs. > > Signed-off-by: Igor Konopko > Signed-off-by: Marcin Dziegielewski > Updated title. > Signed-off-by: Matias Bjørling > --- > drivers/lightnvm/pblk-core.c | 5 + > 1 file changed, 5 insertions(+) > > diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c > index a20b41c355c5..e3e883547198 100644 > --- a/drivers/lightnvm/pblk-core.c > +++ b/drivers/lightnvm/pblk-core.c > @@ -868,6 +868,11 @@ int pblk_line_read_smeta(struct pblk *pblk, struct > pblk_line *line) > { > u64 bpaddr = pblk_line_smeta_start(pblk, line); > > + if (bpaddr == -1) { > + /* Whole line is bad - do not try to read smeta. */ > + return 1; > + } This case cannot occur on the only user of the function (pblk_recov_l2p()). On the previous check (pblk_line_was_written()), we verify the state of the line and the position of the first good chunk. In the case of a bad line (less chunks than a given threshold to allow emeta), the recovery will not be carried out in the line. Javier
Re: [GIT PULL 16/20] lightnvm: error handling when whole line is bad
> On 28 May 2018, at 10.58, Matias Bjørling wrote: > > From: Igor Konopko > > When all the blocks (chunks) in line are marked as bad (offline) > we shouldn't try to read smeta during init process. > > Currently we are trying to do so by passing -1 as PPA address, > what causes multiple warnings, that we issuing IOs to out-of-bound > PPAs. > > Signed-off-by: Igor Konopko > Signed-off-by: Marcin Dziegielewski > Updated title. > Signed-off-by: Matias Bjørling > --- > drivers/lightnvm/pblk-core.c | 5 + > 1 file changed, 5 insertions(+) > > diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c > index a20b41c355c5..e3e883547198 100644 > --- a/drivers/lightnvm/pblk-core.c > +++ b/drivers/lightnvm/pblk-core.c > @@ -868,6 +868,11 @@ int pblk_line_read_smeta(struct pblk *pblk, struct > pblk_line *line) > { > u64 bpaddr = pblk_line_smeta_start(pblk, line); > > + if (bpaddr == -1) { > + /* Whole line is bad - do not try to read smeta. */ > + return 1; > + } This case cannot occur on the only user of the function (pblk_recov_l2p()). On the previous check (pblk_line_was_written()), we verify the state of the line and the position of the first good chunk. In the case of a bad line (less chunks than a given threshold to allow emeta), the recovery will not be carried out in the line. Javier
[GIT PULL 16/20] lightnvm: error handling when whole line is bad
From: Igor KonopkoWhen all the blocks (chunks) in line are marked as bad (offline) we shouldn't try to read smeta during init process. Currently we are trying to do so by passing -1 as PPA address, what causes multiple warnings, that we issuing IOs to out-of-bound PPAs. Signed-off-by: Igor Konopko Signed-off-by: Marcin Dziegielewski Updated title. Signed-off-by: Matias Bjørling --- drivers/lightnvm/pblk-core.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index a20b41c355c5..e3e883547198 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c @@ -868,6 +868,11 @@ int pblk_line_read_smeta(struct pblk *pblk, struct pblk_line *line) { u64 bpaddr = pblk_line_smeta_start(pblk, line); + if (bpaddr == -1) { + /* Whole line is bad - do not try to read smeta. */ + return 1; + } + return pblk_line_submit_smeta_io(pblk, line, bpaddr, PBLK_READ_RECOV); } -- 2.11.0
[GIT PULL 16/20] lightnvm: error handling when whole line is bad
From: Igor Konopko When all the blocks (chunks) in line are marked as bad (offline) we shouldn't try to read smeta during init process. Currently we are trying to do so by passing -1 as PPA address, what causes multiple warnings, that we issuing IOs to out-of-bound PPAs. Signed-off-by: Igor Konopko Signed-off-by: Marcin Dziegielewski Updated title. Signed-off-by: Matias Bjørling --- drivers/lightnvm/pblk-core.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index a20b41c355c5..e3e883547198 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c @@ -868,6 +868,11 @@ int pblk_line_read_smeta(struct pblk *pblk, struct pblk_line *line) { u64 bpaddr = pblk_line_smeta_start(pblk, line); + if (bpaddr == -1) { + /* Whole line is bad - do not try to read smeta. */ + return 1; + } + return pblk_line_submit_smeta_io(pblk, line, bpaddr, PBLK_READ_RECOV); } -- 2.11.0