mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Javier González" <javier@javigon.com>
To: "Matias Bjørling" <mb@lightnvm.io>
Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 03/11] lightnvm: pblk: check read lba on gc path
Date: Wed, 18 Apr 2018 04:53:06 -0700	[thread overview]
Message-ID: <5C311756-8AF8-47B1-98A0-C76F650F3BC2@javigon.com> (raw)
In-Reply-To: <f41f6858-77d1-5856-0719-a765251f5679@lightnvm.io>

[-- Attachment #1: Type: text/plain, Size: 2969 bytes --]

> On 17 Apr 2018, at 05.03, Matias Bjørling <mb@lightnvm.io> wrote:
> 
> On 4/16/18 12:25 PM, Javier González wrote:
>> Check that the lba stored in the LBA metadata is correct in the GC path
>> too. This requires a new helper function to check random reads in the
>> vector read.
>> Signed-off-by: Javier González <javier@cnexlabs.com>
>> ---
>>  drivers/lightnvm/pblk-read.c | 39 +++++++++++++++++++++++++++++++++------
>>  1 file changed, 33 insertions(+), 6 deletions(-)
>> diff --git a/drivers/lightnvm/pblk-read.c b/drivers/lightnvm/pblk-read.c
>> index 9eee10f69df0..0d45d4ffc370 100644
>> --- a/drivers/lightnvm/pblk-read.c
>> +++ b/drivers/lightnvm/pblk-read.c
>> @@ -113,15 +113,14 @@ static int pblk_submit_read_io(struct pblk *pblk, struct nvm_rq *rqd)
>>  	return NVM_IO_OK;
>>  }
>>  -static void pblk_read_check(struct pblk *pblk, struct nvm_rq *rqd,
>> -			   sector_t blba)
>> +static void pblk_read_check_seq(struct pblk *pblk, void *meta_list,
>> +				sector_t blba, int nr_lbas)
>>  {
>> -	struct pblk_sec_meta *meta_list = rqd->meta_list;
>> -	int nr_lbas = rqd->nr_ppas;
>> +	struct pblk_sec_meta *meta_lba_list = meta_list;
>>  	int i;
>>    	for (i = 0; i < nr_lbas; i++) {
>> -		u64 lba = le64_to_cpu(meta_list[i].lba);
>> +		u64 lba = le64_to_cpu(meta_lba_list[i].lba);
>>    		if (lba == ADDR_EMPTY)
>>  			continue;
>> @@ -130,6 +129,32 @@ static void pblk_read_check(struct pblk *pblk, struct nvm_rq *rqd,
>>  	}
>>  }
>>  +/*
>> + * There can be wholes in the lba list.
>> + */
> 
> holes

Can you change it?

> 
>> +static void pblk_read_check_rand(struct pblk *pblk, void *meta_list,
>> +				u64 *lba_list, int nr_lbas)
>> +{
>> +	struct pblk_sec_meta *meta_lba_list = meta_list;
>> +	int i, j;
>> +
>> +	for (i = 0, j = 0; i < nr_lbas; i++) {
>> +		u64 lba = lba_list[i];
>> +		u64 meta_lba;
>> +
>> +		if (lba == ADDR_EMPTY)
>> +			continue;
>> +
>> +		meta_lba = le64_to_cpu(meta_lba_list[j++].lba);
> 
> You can move the j++ into the for loop. Although, why not use just the i iterator?

Look above, we only increase on valid lbas.

> 
>> +
>> +		if (lba != meta_lba) {
>> +			pr_err("pblk: corrupted read LBA (%llu/%llu)\n",
>> +								lba, meta_lba);
>> +			WARN_ON(1);
> 
> I don't understand this, if a corrupted LBA is found here, how is it
> communicated back to pblk and the LBA can be recovered from elsewhere.
> If the data is wrong, this should have been communicated by the drive
> on the completion path. The drive is defect if this happens.
> 

This happens if a read does not match the lba stored on the LBA. This is
definitely an error and it has helped us in the past to find race
conditions on pblk's read path, specially when forming partial I/Os.

If the read failed from the drive (e.g., when enabling HECC), we still
want information about where it failed for debugging purposes. Same we
do on the normal read path.

Javier

[-- Attachment #2: Message signed with OpenPGP --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2018-04-18 11:53 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-16 10:25 [PATCH 00/11] lightnvm: pblk: small fixes Javier González
2018-04-16 10:25 ` [PATCH 01/11] lightnvm: pblk: fail gracefully on line alloc. failure Javier González
2018-04-16 10:25 ` [PATCH 02/11] lightnvm: pblk: recheck for bad lines at runtime Javier González
2018-04-16 10:25 ` [PATCH 03/11] lightnvm: pblk: check read lba on gc path Javier González
2018-04-17 12:03   ` Matias Bjørling
2018-04-18 11:53     ` Javier González [this message]
2018-04-16 10:25 ` [PATCH 04/11] lightnvn: pblk: improve error msg on corrupted LBAs Javier González
2018-04-16 10:25 ` [PATCH 05/11] lightnvm: pblk: warn in case of corrupted write buffer Javier González
2018-04-16 10:25 ` [PATCH 06/11] lightnvm: pblk: return NVM_ error on failed submission Javier González
2018-04-16 10:25 ` [PATCH 07/11] lightnvm: pblk: remove unnecessary indirection Javier González
2018-04-17 12:11   ` Matias Bjørling
2018-04-18 12:08     ` Javier Gonzalez
2018-04-16 10:25 ` [PATCH 08/11] lightnvm: pblk: remove unnecessary argument Javier González
2018-04-17 12:12   ` Matias Bjørling
2018-04-18 11:43     ` Javier González
2018-04-16 10:25 ` [PATCH 09/11] lightnvm: pblk: check for chunk size before allocating it Javier González
2018-04-16 10:25 ` [PATCH 10/11] lightnvn: pass flag on graceful teardown to targets Javier González
2018-04-16 10:25 ` [PATCH 11/11] lightnvm: pblk: remove dead function Javier González
2018-04-30  9:09 [V2 PATCH 00/11] lightnvm: pblk: small fixes Javier González
2018-04-30  9:10 ` [PATCH 03/11] lightnvm: pblk: check read lba on gc path Javier González

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5C311756-8AF8-47B1-98A0-C76F650F3BC2@javigon.com \
    --to=javier@javigon.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mb@lightnvm.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®