Patchwork UBI : erase free PEB with bitflip in EC header

login
register
mail settings
Submitter Matthieu CASTET
Date Aug. 22, 2012, 2:03 p.m.
Message ID <1345644226-32555-1-git-send-email-matthieu.castet@parrot.com>
Download mbox | patch
Permalink /patch/179323/
State Accepted
Commit 193819cf2e6e395b1e1be2d36785dc5563a6edca
Headers show

Comments

Matthieu CASTET - Aug. 22, 2012, 2:03 p.m.
Without this patch, these PEB are not scrubbed until we put data in them.
Bitflip can accumulate latter and we can loose the EC header (but VID header
should be intact and allow to recover data)

Signed-off-by: Matthieu Castet <matthieu.castet@parrot.com>
---
 drivers/mtd/ubi/attach.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Shmulik Ladkani - Aug. 23, 2012, 7:19 a.m.
Hi Matthieu,

On Wed, 22 Aug 2012 16:03:46 +0200 Matthieu CASTET <matthieu.castet@parrot.com> wrote:
> diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
> index bd27cbb..68d4d1f 100644
> --- a/drivers/mtd/ubi/attach.c
> +++ b/drivers/mtd/ubi/attach.c
> @@ -975,7 +975,7 @@ static int scan_peb(struct ubi_device *ubi, struct ubi_attach_info *ai,
>  			return err;
>  		goto adjust_mean_ec;
>  	case UBI_IO_FF:
> -		if (ec_err)
> +		if (ec_err || bitflips)

Thanks, it looks correct to me.

Note that:

-		if (ec_err)
+		if (bitflips)

will also do the job (since bitflips is also set when ec_err is set),
and maybe that was the intention, according to this comment:
		 * We have to also look at the VID header, possibly it is not
		 * corrupted. Set %bitflips flag in order to make this PEB be
		 * moved and EC be re-created.

Regards,
Shmulik
Artem Bityutskiy - Aug. 25, 2012, 12:27 p.m.
On Wed, 2012-08-22 at 16:03 +0200, Matthieu CASTET wrote:
> Without this patch, these PEB are not scrubbed until we put data in them.
> Bitflip can accumulate latter and we can loose the EC header (but VID header
> should be intact and allow to recover data)
> 
> Signed-off-by: Matthieu Castet <matthieu.castet@parrot.com>

Pushed to linux-ubi, thanks! Also added:
Cc: stable@vger.kernel.org

Patch

diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
index bd27cbb..68d4d1f 100644
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
@@ -975,7 +975,7 @@  static int scan_peb(struct ubi_device *ubi, struct ubi_attach_info *ai,
 			return err;
 		goto adjust_mean_ec;
 	case UBI_IO_FF:
-		if (ec_err)
+		if (ec_err || bitflips)
 			err = add_to_list(ai, pnum, UBI_UNKNOWN,
 					  UBI_UNKNOWN, ec, 1, &ai->erase);
 		else