On Saturday 22 April 2006 19:27, Vitaly Wool wrote: > Hi Charles, > > Charles Manning wrote: > >You will end up with a partial write. eg. If you have 500k free and you > >attempt to write 1MB then 500k will be written and the write call will > > return 500k. > > > >YAFFS keeps enough space in reserve to flush any in-flight internal cache > > and flush file handles etc. > > > >What definitely will not happen is file structure getting corrupted. > > thanks! However I meant the following situation: suppose we've got 500k > free, and we're trying to write a new version of 1M file (i. e. rewrite > the old one). How will the filesystem handle this? I. e. will it refuse > the write operation or grant it? If latter, what will happen if a power > failure happens in the midst of the write (for instance, when 600k is > written already -- there's not enough space to hold both the old and the > new versions so how will the incomplete write be reverted?) > OTOH, if there's enough space to hold both the old and the new versions, > will the power pailure always be handled by the filesystem in such a way > that retains the integrity of the file being written (i. e. either the > old or the new version). I hope it will, but still being sure is better > than thinking 'probably it will' :) There's some confusion (and grey areas) here between transaction-based and log structureds fs. A transaction-based fs will either accept or reject a whole write operation and if power is lost (or other failure), then the whole operation will be reversed. A log structured fs (such as yaffs) does not provide the above guarantees unless it also claims to be transaction-based. YAFFS is not transaction-bassed. If you interrupt part way through a write, then some of the write will happenand there is no mechanism to reverse this. IMHO transaction safety is, perhaps, a nice thing, but is very difficult to implement effectively (and fully safely). It also hammers performance. A transaction based fs that I have investigated was significantly slower than its non-transaction-based incarnation and also did not manage to achieve transaction safety all of the time. Transaction safety at a file level is often still not enough. For example, many databases need to write two or three files as a single transaction to be "sane" and a transaction-based fs will not guarantee that. -- Charles