On Fri, 18 Jan 2019 22:12:04 +0000 "Bean Huo (beanhuo)" <beanhuo@xxxxxxxxxx> wrote: > +static int check_page_if_emtpy(struct nand_chip *chip, char *data) > +{ > + struct mtd_info *mtd = nand_to_mtd(chip); > + int ret, i; > + void *databuf, *eccbuf; > + int max_bitflips; > + struct mtd_oob_region oobregion; > + > + mtd_ooblayout_ecc(mtd, 0, &oobregion); > + eccbuf = chip->oob_poi + oobregion.offset; > + databuf = data; > + max_bitflips = 0; > + > + for (i = 0; i < chip->ecc.steps; i++) { > + ret = nand_check_erased_ecc_chunk(data, > + chip->ecc.size, > + eccbuf, > + chip->ecc.bytes, > + NULL, 0, > + chip->ecc.strength); > + if (ret >= 0) > + max_bitflips = max(ret, max_bitflips); > + else > + return false; > + > + databuf += chip->ecc.size; > + eccbuf += chip->ecc.bytes; > + > + } You should check the whole page and not only in-band-data+ECC bytes. Plus, the "overwrite page" trigger is not dependent on the ECC strength, but more something related to the NAND chip itself so using ecc->strength as a threshold sounds like a bad idea to me. ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/