Many thanks for the inputs. That is extremely helpful.
Regards,
Sandeep
On Mon, Nov 22, 2010 at 8:30 PM, Charles Manning <
manningc2@actrix.gen.nz>wrote:
>
> On Tuesday 23 November 2010 14:30:08 sandeep dhoot wrote:
> > Thanks Charles for replying.
>
> Sundeep
>
> Please don't top-post on emails, it makes the thread hard to read.
>
> > Well that surely is a problem. But as I observe, when I create a file
> > setattr is always getting called immediately after mknod. Is that
> supposed
> > to be so? So can we call UpdateObjectHeader for mknod and not for setattr
> > since creating a file is major operation and not setting attributes.
>
> That assumes the kernel interface does not change
> >
> > Also as you mention, how good addition will caching object headers would
> > be? I would be interested in implementing it in my project.
>
> The headers could be cached with a policy such as this:
> * When a file is created do not immediately write. Just cache the header.
> * If the setattr is done, then do not immediately write. Just cache the
> header.
>
> So when do we actually write?
> 1) Get the background thread to flush the cached objects.
> 2) Before the first data chunk is written ensure that the object header is
> written.
>
>
> > Any other
> > viable enhancements to current behavior of yaffs that you can suggest? I
> > even thought of having data bytes in the chunk that holds Object header,
> > that would save a lot of storage space. Anything you want to comment on
> it?
>
>
> Yes that is something I have considered and would be a valuable.
> Depending
> on usage scenarios there can be many small files. Being able to use the
> rest
> of the header for holding data means that files smaller than approx 1.5k
> (eg.
> a lot of the small files in /etc) would typically not need any extra
> storage.
>
> Bear in mind though that the spare space in object headers is also used
> for
> xattrib. You would need to coexist with xattrib.
>
>
> >
> > Thanks a lot for your feedback.
> >
> > Regards,
> > Sandeep
> >
> > On Mon, Nov 22, 2010 at 6:55 PM, Charles Manning
> <manningc2@actrix.gen.nz>wrote:
> > > On Tuesday 23 November 2010 13:06:13 sandeep dhoot wrote:
> > > > Hi all,
> > > >
> > > > I am studying and characterizing yaffs2 as part of my grad project.
> > > > Well I see that on creating a file 2 chunks get written one after
> other
> > >
> > > and
> > >
> > > > when the second is written the first is invalidated. The first gets
> > >
> > > written
> > >
> > > > due to call to UpdateObjectHeader from yaffs_MknodObject while the
> > > > second is written due to call to UpdateObjectHeader from
> yaffs_setattr.
> > > > So why
> > >
> > > do
> > >
> > > > we write object header again to flash on setattr and not just call
> > > > inode_setattr and return? Is there any specific reason for writing a
> > >
> > > chunk
> > >
> > > > on setattr? This always wastes one chunk on file creation.
> > >
> > > This is due to the way yaffs treats individual operations as atomic.
> > >
> > > When yaffs creates a file, it has no way of knowing that this will be
> > > followed
> > > by a setattr.
> > >
> > > Consider what would happen if we did not write the header for mknod and
> > > the setattr did not get called. We could end up with a sequence like
> > > this:
> > >
> > > * create file [obj header write ignored]
> > > * start writing data chunks to file.
> > > * power failure.
> > > On the next boot we'd end up with some data chunks with no object. That
> > > would
> > > end up creating an object in lost+found.
> > >
> > > There is a potential to cache these writes to an extent and save some
> of
> > > these
> > > redundant object header writes. There are more valuable opportunities
> to
> > > be chasing, but this might happen in time.
> > >
> > > Charles
>
>
>