[OpenWrt-Devel] [PATCH] kernel: tolerate using UBI/UBIFS on MLC flash (FS#1830)

Hauke Mehrtens hauke at hauke-m.de
Sat Oct 27 16:03:03 EDT 2018



On 10/18/2018 02:28 PM, Koen Vandeputte wrote:
> starting from upstream commit 577b4eb23811 ("ubi: Reject MLC NAND")
> it is not allowed to use UBI and UBIFS on a MLC flavoured NAND flash chip. [1]
> 
> According to David Oberhollenzer [2]:
> 
> The real problem is that on MLC NAND, pages come in pairs.
> 
> Multiple voltage levels inside a single, physical memory cell are used to
> encode more than one bit. Instead of just having pages that are twice as big,
> the flash exposes them as *two different pages*. Those pages are usually not
> ordered sequentially either, but according to a vendor/device specific
> pairing scheme.
> 
> Within OpenWrt, devices utilizing this type of flash,
> combined with ubi(fs) will be bricked when a user upgrades
> from 17.01.4 to a newer version as the MLC will be refused.
> 
> As these devices are currently advertised as supported by OpenWrt,
> we should at least maintain the original state during the lifecycle
> of the current releases.
> 
> Support can be gracefully ended when a new release-branch is created.
> 
> Signed-off-by: Koen Vandeputte <koen.vandeputte at ncentric.com>

Acked-by: Hauke Mehrtens <hauke at hauke-m.e>

> 
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v4.14.77&id=577b4eb23811dfc8e38924dc476dbc866be74253
> [2] https://lore.kernel.org/patchwork/patch/920344/
> ---
> 
> Mainly intended for discussion first on this approach before applying it.
> Can be cherrypicked to 18.06.
> 
> Feel free to drop your (n)ack on this approach
> 
> 
> 
>  .../hack-4.14/420-allow-ubi-mlc-support.patch       | 13 +++++++++++++
>  .../hack-4.9/420-allow-ubi-mlc-support.patch        | 13 +++++++++++++
>  2 files changed, 26 insertions(+)
>  create mode 100644 target/linux/generic/hack-4.14/420-allow-ubi-mlc-support.patch
>  create mode 100644 target/linux/generic/hack-4.9/420-allow-ubi-mlc-support.patch
> 
> diff --git a/target/linux/generic/hack-4.14/420-allow-ubi-mlc-support.patch b/target/linux/generic/hack-4.14/420-allow-ubi-mlc-support.patch
> new file mode 100644
> index 000000000000..595936f13791
> --- /dev/null
> +++ b/target/linux/generic/hack-4.14/420-allow-ubi-mlc-support.patch
> @@ -0,0 +1,13 @@
> +--- a/drivers/mtd/ubi/build.c
> ++++ b/drivers/mtd/ubi/build.c
> +@@ -851,9 +851,8 @@ int ubi_attach_mtd_dev(struct mtd_info *
> + 	 * will die soon and you will lose all your data.
> + 	 */
> + 	if (mtd->type == MTD_MLCNANDFLASH) {
> +-		pr_err("ubi: refuse attaching mtd%d - MLC NAND is not supported\n",
> ++		pr_warn("ubi: mtd%d has been identified as a MLC NAND!! - MLC is not supported by UBI and UBIFS and _WILL_ cause corruption in the near future!\n",
> + 			mtd->index);
> +-		return -EINVAL;
> + 	}
> + 
> + 	if (ubi_num == UBI_DEV_NUM_AUTO) {
> diff --git a/target/linux/generic/hack-4.9/420-allow-ubi-mlc-support.patch b/target/linux/generic/hack-4.9/420-allow-ubi-mlc-support.patch
> new file mode 100644
> index 000000000000..552ae5da75cf
> --- /dev/null
> +++ b/target/linux/generic/hack-4.9/420-allow-ubi-mlc-support.patch
> @@ -0,0 +1,13 @@
> +--- a/drivers/mtd/ubi/build.c
> ++++ b/drivers/mtd/ubi/build.c
> +@@ -900,9 +900,8 @@ int ubi_attach_mtd_dev(struct mtd_info *
> + 	 * will die soon and you will lose all your data.
> + 	 */
> + 	if (mtd->type == MTD_MLCNANDFLASH) {
> +-		pr_err("ubi: refuse attaching mtd%d - MLC NAND is not supported\n",
> ++		pr_warn("ubi: mtd%d has been identified as a MLC NAND!! - MLC is not supported by UBI and UBIFS and _WILL_ cause corruption in the near future!\n",
> + 			mtd->index);
> +-		return -EINVAL;
> + 	}
> + 
> + 	if (ubi_num == UBI_DEV_NUM_AUTO) {
> 

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list