[Yaffs] data loss under heavy pressure on Yaffs2 GC --> fix

lkml at looxix.net lkml at looxix.net
Thu Aug 4 12:42:48 BST 2005


> Luc Van Oostenryck wrote:

<snip>

> Yes, there seems to be something missing.
>
> The others fs use something like a mix of calling vmtruncate() and/or
> something like the code below,
> either in setattr() or XXX_truncate() (to add in inode_operations and
> called by vmtruncate if present)
>
> 	page = grab_cache_page(inode->i_mapping, inode->i_size >>
> PAGE_CACHE_SHIFT) // or attrs->ia_size  >> PAGE_CACHE_SHIFT
> 	// if needed, fill with zeroes the partial page
> 	// there is already a/some function to do this
> 	flush_dcache_page(page);
> 	unlock_page(page);
> 	page_cache_release(page);
>

Forget about this for the moment.
vmtruncate() is called via inode_settattr() which is done at the and of
yaffs_setattr()
And vmtruncate()can call a method "truncate" if implemented
This method doesn't seems to be needed for the way we actually do the
truncation/resizing.

>
> I will need to investigate much further.
>

I hadn't enough time yesterday, but there is something that I don't
understand: in yaffs_setattr() -> yaffs_SetAttributes() ->
yaffs_ResizeFile(), how the object filesize is changed if newSize >
oldFileSize ?
>From what I understand, it this never changed.

Apart this, I think that in the case of a resizing down, the object header
can be updated several times: once in yaffs_ResizeFile and once in
yaffs_SetAttributes.


Luc



More information about the yaffs mailing list