mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH AUTOSEL for 4.4 01/32] mtd: nand: gpmi: Fix failure when a erased page has a bitflip at BBM
@ 2018-02-03 18:04 Sasha Levin
  2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 02/32] ipv6: icmp6: Allow icmp messages to be looped back Sasha Levin
                   ` (30 more replies)
  0 siblings, 31 replies; 32+ messages in thread
From: Sasha Levin @ 2018-02-03 18:04 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Sascha Hauer, Richard Weinberger, Sasha Levin

From: Sascha Hauer <s.hauer@pengutronix.de>

[ Upstream commit fdf2e821052958a114618a95ab18a300d0b080cb ]

When erased subpages are read then the BCH decoder returns STATUS_ERASED
if they are all empty, or STATUS_UNCORRECTABLE if there are bitflips.
When there are bitflips, we have to set these bits again to show the
upper layers a completely erased page. When a bitflip happens in the
exact byte where the bad block marker is, then this byte is swapped
with another byte in block_mark_swapping(). The correction code then
detects a bitflip in another subpage and no longer corrects the bitflip
where it really happens.

Correct this behaviour by calling block_mark_swapping() after the
bitflips have been corrected.

In our case UBIFS failed with this bug because it expects erased
pages to be really empty:

UBIFS error (pid 187): ubifs_scan: corrupt empty space at LEB 36:118735
UBIFS error (pid 187): ubifs_scanned_corruption: corruption at LEB 36:118735
UBIFS error (pid 187): ubifs_scanned_corruption: first 8192 bytes from LEB 36:118735
UBIFS error (pid 187): ubifs_scan: LEB 36 scanning failed
UBIFS error (pid 187): do_commit: commit failed, error -117

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Richard Weinberger <richard@nod.at>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
index 2064adac1d17..e2a239c1f40b 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -1029,9 +1029,6 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 		return ret;
 	}
 
-	/* handle the block mark swapping */
-	block_mark_swapping(this, payload_virt, auxiliary_virt);
-
 	/* Loop over status bytes, accumulating ECC status. */
 	status = auxiliary_virt + nfc_geo->auxiliary_status_offset;
 
@@ -1047,6 +1044,9 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
 		max_bitflips = max_t(unsigned int, max_bitflips, *status);
 	}
 
+	/* handle the block mark swapping */
+	block_mark_swapping(this, buf, auxiliary_virt);
+
 	if (oob_required) {
 		/*
 		 * It's time to deliver the OOB bytes. See gpmi_ecc_read_oob()
-- 
2.11.0

^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2018-02-03 18:27 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-03 18:04 [PATCH AUTOSEL for 4.4 01/32] mtd: nand: gpmi: Fix failure when a erased page has a bitflip at BBM Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 02/32] ipv6: icmp6: Allow icmp messages to be looped back Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 03/32] ARM: 8731/1: Fix csum_partial_copy_from_user() stack mismatch Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 04/32] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 05/32] sget(): handle failures of register_shrinker() Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 07/32] spi: atmel: fixed spin_lock usage inside atmel_spi_remove Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 06/32] drm/nouveau/pci: do a msi rearm on init Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 09/32] scsi: storvsc: Fix scsi_cmd error assignments in storvsc_handle_error Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 08/32] net: arc_emac: fix arc_emac_rx() error paths Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 10/32] ARM: dts: ls1021a: fix incorrect clock references Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 11/32] lib/mpi: Fix umul_ppmm() for MIPS64r6 Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 12/32] tg3: Add workaround to restrict 5762 MRRS to 2048 Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 13/32] tg3: Enable PHY reset in MTU change path for 5720 Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 14/32] bnx2x: Improve reliability in case of nested PCI errors Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 16/32] s390/dasd: fix wrongly assigned configuration data Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 15/32] led: core: Fix brightness setting when setting delay_off=0 Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 18/32] IB/ipoib: Fix race condition in neigh creation Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 17/32] IB/mlx4: Fix mlx4_ib_alloc_mr error flow Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 20/32] xfs: quota: check result of register_shrinker() Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 19/32] xfs: quota: fix missed destroy of qi_tree_lock Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 21/32] e1000: fix disabling already-disabled warning Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 23/32] mac80211: mesh: drop frames appearing to be from us Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 22/32] drm/ttm: check the return value of kzalloc Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 25/32] bnxt_en: Fix the 'Invalid VF' id check in bnxt_vf_ndo_prep routine Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 24/32] can: flex_can: Correct the checking for frame length in flexcan_start_xmit() Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 26/32] xen-netfront: enable device after manual module load Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 28/32] SolutionEngine771x: fix Ether platform data Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 27/32] mdio-sun4i: Fix a memory leak Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 29/32] xen/gntdev: Fix off-by-one error when unmapping with holes Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 31/32] sctp: make use of pre-calculated len Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 30/32] xen/gntdev: Fix partial gntdev_mmap() cleanup Sasha Levin
2018-02-03 18:04 ` [PATCH AUTOSEL for 4.4 32/32] net: gianfar_ptp: move set_fipers() to spinlock protecting area Sasha Levin

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®