On Monday 21 September 2009 17:09:08 James Kehl wrote:
> > -----Original Message-----
> > From: yaffs-bounces@lists.aleph1.co.uk [mailto:yaffs-
> > bounces@lists.aleph1.co.uk] On Behalf Of yaffs@piments.com
> > Sent: Tuesday, 15 September 2009 10:13 PM
> > Cc: yaffs@lists.aleph1.co.uk
> > Subject: Re: [Yaffs] Time stamp not updated upon sync
> >
> > It's a very good point about avoiding unnecessary writes
> > [...]
>
> Speaking of avoiding unnecessary writes, is there any way to *suppress*
> metadata updates?
>
> I'm working on an embedded app that, every so often, opens a log file,
> appends data to it, and closes it. Most of these updates will be very
> small: 32 bytes or so.
>
> The file mtime isn't important (and I'd be logging the time inside the
> file, if it were) - in fact, my yaffsfs_CurrentTime implementation
> returns a constant. The file size should be calculable from the
> byteCount tags on each data page (I have no holes and the file isn't
> shrinking).
>
> Despite all this, yaffs_FlushFile will rewrite the object header, every
> time; it might be small bikkies to everyone else, but I'd like to be
> able to elide this extra write.
>
> This looks like it would be easy to do for Yaffs1. Can anyone give me
> pointers on Yaffs2?
Hi James
This is not a supported function and a bit of hackery would be required.
For a bit of a quick hack, try
In yaffs_guts.c:yaffs_FlushFile()
int yaffs_FlushFile(yaffs_Object *in, int updateTime)
{
int retVal;
if (in->dirty) {
yaffs_FlushFilesChunkCache(in);
+ in->dirty = 0;
+ return YAFFS_OK; /* Skip update of metadata after a flush */
if (updateTime) {
See how that works.
-- Charles