mkfs.jffs2 min erase block size: 4 vs 8 KiB

Mike Frysinger vapier.adi at gmail.com
Fri Jun 24 13:10:18 EDT 2011


On Fri, Jun 24, 2011 at 08:07, Artem Bityutskiy wrote:
> On Wed, 2011-06-22 at 01:02 -0400, Mike Frysinger wrote:
>> the current mkfs.jffs2 util has in its --eraseblock handling:
>> /* If it's less than 8KiB, they're not allowed */
>> if (erase_block_size < 0x2000) {
>>     fprintf(stderr, "Erase size 0x%x too small. Increasing to 8KiB minimum\n",
>>         erase_block_size);
>>     erase_block_size = 0x2000;
>> }
>>
>> but i cant seem to find documentation on where this comes from.  it's
>> not uncommon to have SPI flashes with 4KiB erase sectors, and removing
>> this sanity check and allowing 4 KiB seems to produce an image that
>> works OK.
>>
>> am i missing something ?  or should i send a patch to drop this check ?
>
> I do not believe JFFS2 is able to work with such small erase blocks. In
> JFFS2 (and in UBIFS as well) an eraseblock is the basic garbage
> collection unit, and nodes cannot cross eraseblock boundaries. And the
> maximum node size is 4KiB of data plus few bytes of node header. So 4KiB
> won't even fit the largest data node, e.g., containing uncompressible
> data.
>
> Even 8KiB is bad, because the amount of wasted space will be large -
> JFFS2 will waste the rest of the eraseblock if it does not fit the node.
> So the smaller EB is, the more wasted space you have.

i'll send a patch then to mkfs.jffs2 with a little bit of info.  i
couldnt find a FAQ on the mtd webpage that covered this.

> For SPI flashes the way out is to emulate larger eraseblock sizes on MTD
> level. I'd recommend at least 32 KiB.

sorry, but emulate how ?  just tell jffs2 to use an eraseblock size of
32KiB when creating the fs ?
-mike



More information about the linux-mtd mailing list