2008/1/10, Rik van Riel <[EMAIL PROTECTED]>: > On Wed, 9 Jan 2008 23:33:40 +0100 > Jakob Oestergaard <[EMAIL PROTECTED]> wrote: > > On Wed, Jan 09, 2008 at 05:06:33PM -0500, Rik van Riel wrote: > > > > Can we get by with simply updating the ctime and mtime every time msync() > > > is called, regardless of whether or not the mmaped pages were still dirty > > > by the time we called msync() ? > > > > The update must still happen, eventually, after a write to the mapped region > > followed by an unmap/close even if no msync is ever called. > > > > The msync only serves as a "no later than" deadline. The write to the region > > triggers the need for the update. > > > > At least this is how I read the standard - please feel free to correct me > > if I > > am mistaken. > > You are absolutely right. If we wrote dirty pages to disk, the ctime > and mtime updates must happen no later than msync or close time. > > I guess a third possible time (if we want to minimize the number of > updates) would be when natural syncing of the file data to disk, by > other things in the VM, would be about to clear the I_DIRTY_PAGES > flag on the inode. That way we do not need to remember any special > "we already flushed all dirty data, but we have not updated the mtime > and ctime yet" state. > > Does this sound reasonable?
No, it doesn't. The msync() system call called with the MS_ASYNC flag should (the POSIX standard requires that) update the st_ctime and st_mtime stamps in the same manner as for the MS_SYNC flag. However, the current implementation of msync() doesn't call the do_fsync() function for the MS_ASYNC case. The msync() function may be called with the MS_ASYNC flag before "natural syncing". -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/