JFFS2: checking CRCs twice!?

Artem B. Bityuckiy dedekind at infradead.org
Wed Jan 12 04:35:40 EST 2005


> IIUC than mounting a JFFS2 root fs takes so long (6 seconds on my 
embedded ARM9)
> cause the CRCs of all blocks/sectors are checked.
Cause:
1. *Some* of CRCs are checked. Nodes has 3 CRCs: (1) Common header CRC, 
(2) Header CRC, (3) Data CRC. On mount, JFFS2 check only common header 
CRCs of inode nodes, and all CRCs of direntries. When checking in 
background, it checks other CRCs.
2. On mount, JFFS2 reads blocks fully. So multiply the number of used 
blocks on the block read time and add this number to your mount time. This 
should be fixed, IMHO, since we do not needed, for example, read inode 
node's data.
3. It builds different data structures - fragtree list, direntries list. 
It counts the inode link numbers. This also takes time, especially if you 
have slow CPU. Here is some room to improvement exist.

Seems that's all major activities.

>
> But then it looks to me that - shortly after boot - the GC thread doing 
the same
> again (in background.c), which takes another 6 scondes and slows down 
the
> application startup...
Not the same, it checks CRCs which were not checked during mount.

> Or am I missing something?

--
Best Regards,
Artem B. Bityuckiy,
St.-Petersburg, Russia.




More information about the linux-mtd mailing list