Skip to contentSkip to conversation

reliably detect writes to a file: mmap, mtime, ...

DISCUSSION Martin Uecker 2 participants 2 messages Dec 29, 2015 – Dec 30, 2015 Memory management

lore
Share & tools
lore
#0 lore raw

Hi all,

I want to reliably detect changes to a file even when written to using mmap. Surprisingly, there seems to be no API which would make this possible. Or at least I haven't found a way to do it...

I looked at:

- mtime. What is missing here is an API which would force mtime to be updated if there are dirty PTEs in some mapping (which need to be cleared/transferred to struct page at this point). This would allow to reliably detect changes to the file. If I understand it correctly, there was patch from Andy Lutomirski which made msync(ASYNC) do exactly this:

http://oss.sgi.com/archives/xfs/2013-08/msg00748.html

But it seems this never got in. The other problem with this is that mtime has limited granularity. (but maybe that could be worked around by having some kind of counter + API which tells how often mtime has been updated without changing its nominal value)

- I also looked at soft-dirty bits, but this API seems to have several limitations: 1.) it tracks writes through a specific mapping 2.) it can only have a single user at the same time 3.) who has to have special privileges 4.) and it seems impossible read and clear the soft-dirty bits at the same time (so you might miss writes).

But maybe there are other ways... I am missing something?

Martin

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#1 lore raw
Quoted 21 lines · Martin Uecker

Hi all,

I want to reliably detect changes to a file even when written to using mmap. Surprisingly, there seems to be no API which would make this possible. Or at least I haven't found a way to do it...

I looked at:

- mtime. What is missing here is an API which would force mtime to be updated if there are dirty PTEs in some mapping (which need to be cleared/transferred to struct page at this point). This would allow to reliably detect changes to the file. If I understand it correctly, there was patch from Andy Lutomirski which made msync(ASYNC) do exactly this:

Quoted 7 lines

http://oss.sgi.com/archives/xfs/2013-08/msg00748.html

But it seems this never got in. The other problem with this is that mtime has limited granularity. (but maybe that could be worked around by having some kind of counter + API which tells how often mtime has been updated without changing its nominal value)

Those patches plus nanosecond granularity should do it, I think. I keep meaning to dust them off. You could do it :)

--Andy

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>