Re: atomic file operations

Artem B. Bityuckiy
2005-03-24T19:33:13Z

> Artem, when figuring out if the write goes over the page boudary you did
not say
> anything about CRC and other non-user data.. Should it be taken into
account
> too or am I missing something?
>

Well, page boundaries aren't problem. We want a write operation which goes
to flash a one node.

There are two points of splitting:
1. Linux page cache splits data on PAGE_SIZE chunks.
2. jffs2_write_inode_range may do further split. This is what I missed
first time.

Yes, jffs2_write_inode_range will not split if the node to write is fewer
then sizeof(struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN.

So, sizeof(struct jffs2_raw_inode) includes all the "anything about CRC
and other non-user data" and you may write JFFS2_MIN_DATA_LEN bytes
atomically.

So, I'll write the rules again:
1. write only 0- JFFS2_MIN_DATA_LEN bytes;
2. do not overlap n*PAGE_SIZE borders (n is 1,2, ...)
3. do fsync after write

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