Re: [patch] explicit dcache <-> user-space cache coherency, sys_mark_dir_clean(), O_CLEAN

viro
2004-02-20T18:00:48Z

On Fri, Feb 20, 2004 at 02:23:52PM +0100, Ingo Molnar wrote:

> i've also attached dir-cache.c, a simple testcode for the new
> functionality. It marks the current directory clean and tries to open
> the "./1" file via O_CLEAN with 1 second delay. Start this in one shell
> and do VFS-namespace modifying ops in another window (eg. "rm -f 2;
> touch 2") and see the dir-cache code react to it - the 'clean' bit is
> lost, and the file open-create does not succeed if the directory is not
> clean.
>
> there's a new dentry flag that is maintained under the directory's i_sem
> semaphore. (It would be simpler to have the flag on the inode level,
> that way the invalidation could be done as a simple filter to the
> dnotify function.)

IMO putting that in dentry (let alone inode) is fundamentally broken.
Basically, your flag says "somebody in userland knows the contents
of directory". So your create-if-clean is inherently racy - if we get

task A task B task C
had learnt the contents
marked clean
changed the contents
had learnt the contents
marked clean
did create-if-clean, assuming
its knowledge to be accurate

then A will succeed just fine.