mtd: nand: default bitflip-reporting threshold to 75% of correction strength

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Mon Feb 16 18:59:04 PST 2015


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=240181fd0ffa69cac08d6b06c94e843707370f5f
Commit:     240181fd0ffa69cac08d6b06c94e843707370f5f
Parent:     51585778f63adaadbc67399e172fcf11daa9f032
Author:     Brian Norris <computersforpeace at gmail.com>
AuthorDate: Mon Jan 12 12:51:29 2015 -0800
Committer:  Brian Norris <computersforpeace at gmail.com>
CommitDate: Tue Jan 20 23:43:18 2015 -0800

    mtd: nand: default bitflip-reporting threshold to 75% of correction strength
    
    The MTD API reports -EUCLEAN only if the maximum number of bitflips
    found in any ECC block exceeds a certain threshold. This is done to
    avoid excessive -EUCLEAN reports to MTD users, which may induce
    additional scrubbing of data, even when the ECC algorithm in use is
    perfectly capable of handling the bitflips.
    
    This threshold can be controlled by user-space (via sysfs), to allow
    users to determine what they are willing to tolerate in their
    application. But it still helps to have sane defaults.
    
    In recent discussion [1], it was pointed out that our default threshold
    is equal to the correction strength. That means that we won't actually
    report any -EUCLEAN (i.e., "bitflips were corrected") errors until there
    are almost too many to handle. It was determined that 3/4 of the
    correction strength is probably a better default.
    
    [1] http://lists.infradead.org/pipermail/linux-mtd/2015-January/057259.html
    
    Signed-off-by: Brian Norris <computersforpeace at gmail.com>
    Acked-by: Huang Shijie <shijie.huang at intel.com>
---
 drivers/mtd/nand/nand_base.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 816b5c1..3f24b58 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -4171,7 +4171,7 @@ int nand_scan_tail(struct mtd_info *mtd)
 	 * properly set.
 	 */
 	if (!mtd->bitflip_threshold)
-		mtd->bitflip_threshold = mtd->ecc_strength;
+		mtd->bitflip_threshold = DIV_ROUND_UP(mtd->ecc_strength * 3, 4);
 
 	/* Check, if we should skip the bad block table scan */
 	if (chip->options & NAND_SKIP_BBTSCAN)



More information about the linux-mtd-cvs mailing list