[Yaffs] Direct Interface, files contain zero when mounting w…

Top Page
Attachments:
Message as email
+ (text/plain)
+ (text/html)
Delete this message
Reply to this message
Author: Stéphane Lesage
Date:  
To: yaffs
Subject: [Yaffs] Direct Interface, files contain zero when mounting without checkpoint

Hi,
I used yaffs2 direct interface 2 years ago without problems (archive of
2010/06/11).
I updated to latest git version (linux style renaming and minor
modifications).
But I meet a very strange issue:
When I don't yaffs_sync() after updating a file, then after rebooting,
the partition is mounted without checkpoint.
In this case, the file system structure is perfectly OK (names, sizes),
but reading the files gives null data.

I simulated on a PC with a file, and the result is the same.
What happens ?

Here a simple test, the "/boot" partition uses blocks 0 to 63 with
packed tags 2 + ECC in the spare area.
Run it 2 times with normal mounting for append test.
Run it with read-only mounting for read test -> OK.
Run it with read-only, no checkpoint read -> null data.

constchar*dev="/boot";


intmain(void)

{

    char*  logfile  =  0;


    struct  yaffs_stat  st;



    //  Initialise  File  System


    yaffs_start_up();


    //yaffs_mount(dev);            // Normal


    yaffs_mount_common(dev,  1,  0);        //  Read-only, read checkpoint


    //yaffs_mount_common(dev,  0,  1);    //  Read-write,  don't  read  checkpoint


    //yaffs_mount_common(dev,  1,  1);    //  Read-only,  don't  read  checkpoint



    //  Logfile  read  test


    if  (0)


    {


        int  fd0  =  yaffs_open("/boot/log0.txt",  O_RDONLY,  S_IREAD|S_IWRITE);


        if  (fd0  >=  0)


        {


            yaffs_fstat(fd0,  &st);


            logfile  =  malloc(st.st_size+1);


            yaffs_read(fd0,  logfile,  st.st_size);


            logfile[st.st_size]  =  '\0';


            yaffs_close(fd0);


        }


    }


    //  Logfile  append  test


    if  (1)


    {


        int  fd0  =  yaffs_open("/boot/log0.txt",  O_CREAT|O_RDWR|O_APPEND,  S_IREAD|S_IWRITE);


        if  (fd0  >=  0)


        {


            const  char*  buf  =  "2012/05/31  13:41  Test\n";


            yaffs_write(fd0,  buf,  strlen(buf));


            yaffs_close(fd0);


        }


    }


    if  (1)


    {


        yaffs_sync(dev);


        yaffs_unmount(dev);


    }


    return  0;


}



--
Stephane Lesage