Take this example:This is correct. I have updated my proposed patch to include the clearing
fd = open()
addr = mmap(.., fd)
write(fd, ...)
close(fd)
sleep(100)
msync(addr,...)
munmap(addr)
The file times will be updated in write(), but with your patch, the
bit in the mapping will also be set.
Then in msync() the file times will be updated again, which is wrong,
since the memory was _not_ modified through the mapping.
of AS_MCTIME in the routine which updates the mtime field.
That doesn't really help. Look at __generic_file_aio_write_nolock().
file_update_time() is called before the data is written, so after the
last write, there will be nothing to clear the flag.
And even if fixed this case by moving the file_update_time() call to
the end of the function, there's no guarantee, that some filesystem
won't do something exotic and call set_page_dirty() indenpendently of
write(). Good luck auditing all the set_page_dirty() calls ;)