[PATCH 3/4] UBI: use the whole MTD device size to get bad_peb_limit
Richard Genoud
richard.genoud at gmail.com
Thu Aug 16 06:35:23 EDT 2012
2012/8/16 Shmulik Ladkani <shmulik.ladkani at gmail.com>:
> Hi Artem, Richard,
>
> On Wed, 15 Aug 2012 18:08:51 +0300 Artem Bityutskiy <dedekind1 at 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.
I agree (even if this sentence is from a nand datasheet !)
>
>> 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
Ok, I'll change that, may be in a separate patch, as it's a bug fix.
I'll add your signoff.
thanks !
--
for me, ck means con kolivas and not calvin klein... does it mean I'm a geek ?
More information about the linux-mtd
mailing list