CRC errors when continuous fseek/fputs on JFFS2

Jörn Engel joern at wohnheim.fh-wedel.de
Mon May 15 11:46:06 EDT 2006


On Mon, 15 May 2006 08:15:56 -0700, syed khader wrote:
>
>    I am finding this strange problem.
> I am running the following piece of code :
> 
> int main()
> {
>    FILE *fp;
>    int i;
>    fp = fopen("/var/mnt/testfile","w");
>    for(i =0 ; i < 100000 ; i++)
>    {
>    fputs("xxxx", fp);
>    fseek(fp, -4, SEEK_CUR);
               ^^
>    fputs("xx", fp);
>   }
>    fclose(fp);
> }
> 
>   JFFS2 is mounted on /var/mnt. While the program is
> running I am getting CRC errors like this:
> 
> Data CRC 6c48916e != calculated CRC 11ebde1b for node
> at 000e0a68
>   
>    If  I am not doing fseek above and just add writing
> to file in the loop I dont see any CRC errors.
>    Pleae let me know what is happening here. Is JFFS2
> running out of buffers or something?

fopen(...,"w") will set fpos to 0.  fseek(..., -4, SEEK_CUR) then sets
it _back_.  I would assume that an integer underflow happens next and
fpos is close to 2^31, 2^32, 2^63 or 2^64.  What is certain is that
your testcase is not a valid piece of code.

Can you try to change your testcase in two ways:
o replace fopen/fseek/fwrite etc. with open/seek/write etc.
o seek to something large directly after open
and retest with that?

"something large" should be one of 2^31-1, 2^32-1, 2^63-1 or 2^64-1, I
believe.

Jörn

-- 
Measure. Don't tune for speed until you've measured, and even then
don't unless one part of the code overwhelms the rest.
-- Rob Pike




More information about the linux-mtd mailing list