Hi Artem, Richard,

On Wed, 15 Aug 2012 18:08:51 +0300 Artem Bityutskiy <dedeki...@gmail.com> wrote:
> 1. Invalid blocks are block that contain one or more bad bits beyond
> ECC.

I would remove this one sentence from the log, it is misleading; invalid
blocks are not necessarily related to ECC.

>               if (CONFIG_MTD_UBI_BEB_LIMIT > 0) {
> -                     int percent = CONFIG_MTD_UBI_BEB_LIMIT;
> -                     int limit = mult_frac(ubi->peb_count, percent, 100);
> +                     int per1024 = CONFIG_MTD_UBI_BEB_LIMIT;
> +                     int limit, device_pebs;
> +                     uint64_t device_size;
> +
> +                     /*
> +                      * Here we are using size of the entire flash chip and
> +                      * not just the MTD partition size because the maximum
> +                      * number of bad eraseblocks is a percentage of the
> +                      * whole device and bad eraseblocks are not fairly
> +                      * distributed over the flash chip. So the worst case
> +                      * is that all the bad eraseblocks of the chip are in
> +                      * the MTD partition we are attaching (ubi->mtd).
> +                      */
> +                     device_size = mtd_get_device_size(ubi->mtd);
> +                     device_pebs = mtd_div_by_eb(device_size, ubi->mtd);
> +                     limit = mult_frac(device_pebs, per1024, 1024);
>  
>                       /* Round it up */
> -                     if (mult_frac(limit, 100, percent) < ubi->peb_count)
> +                     if (mult_frac(limit, 1024, per1024) < ubi->peb_count)

Oops... should be: 

+                       if (mult_frac(limit, 1024, per1024) < device_pebs)

Regards,
Shmulik
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to