Re: [PATCH] ubi: Reject MLC NAND

From: Pavel Machek
Date: Tue Mar 06 2018 - 18:18:13 EST


On Sat 2018-03-03 11:45:54, Richard Weinberger wrote:
> While UBI and UBIFS seem to work at first sight with MLC NAND, you will
> most likely lose all your data upon a power-cut or due to read/write
> disturb.
> In order to protect users from bad surprises, refuse to attach to MLC
> NAND.
>
> Cc: stable@xxxxxxxxxxxxxxx

That sounds like _really_ bad idea for stable. All it does is it
removes support for hardware that somehow works.

Now... Yes, handling flash is hard, MLC NAND is worst of the
bunch. But...

Read disturb is not unique to MLC, right? Happens to all the flashes,
its just that MLC has tighter margins for error.

Power-cut. UBIFS is just not power-cut safe, right? My notes say that
power-cut during erase could result in flash that contains all 1s, but
will start showing errors very quickly. Again, not MLC specific. Can
be solved with battery...

(And yes, there are some problems specific to MLC, where parts of page
need to be written in specific order. Not sure how it affects
ubifs. But it was not listed as a reason for the patch.)

> Signed-off-by: Richard Weinberger <richard@xxxxxx>
> ---
> drivers/mtd/ubi/build.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
> index e941395de3ae..753494e042d5 100644
> --- a/drivers/mtd/ubi/build.c
> +++ b/drivers/mtd/ubi/build.c
> @@ -854,6 +854,17 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
> return -EINVAL;
> }
>
> + /*
> + * Both UBI and UBIFS have been designed for SLC NAND and NOR flashes.
> + * MLC NAND is different and needs special care, otherwise UBI or UBIFS
> + * 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",
> + mtd->index);
> + return -EINVAL;
> + }
> +
> if (ubi_num == UBI_DEV_NUM_AUTO) {
> /* Search for an empty slot in the @ubi_devices array */
> for (ubi_num = 0; ubi_num < UBI_MAX_DEVICES; ubi_num++)

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

Attachment: signature.asc
Description: Digital signature