Miklos Szeredi wrote:
Take this example:
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.
This is correct. I have updated my proposed patch to include the clearing
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 ;)
Interesting.
No, I wouldn't want to get into worrying about set_page_dirty() calls.
Life is short and people have too much imagination... :-)
Thanx...
ps
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html