jjw@palladium.UUCP (John J. Wallace) (07/08/88)
Wizard-level question: In the FFS implementation, why does itrunc() call syncip() when it wants to synch the inode to disk instead of simply calling iupdat()? Explanation of question: Itrunc(ip, new_size) truncates an inode to a new size, typically zero. New_size can be non-zero when some program uses one of the ftruncate family of system calls. When itrunc() wants to synch the inode to disk it calls syncip(), not iupdat(). The difference is that syncip makes sure all *data blocks* for the file are synched to disk (synchronously, I believe) before writing the inode to disk (also synchronously). Iupdat() just does the inode, which would be quicker. So... why is this so. Is there some implication that ftruncate() also does an fsync()? I hope not. Is it some crash-resistant concern? Unix is not careful about writing data blocks before the inode, so why should this be any different? Or is this another example of ... (byte my tongue). Thanks, I will summarize if any interest.