how to flush out cache.?
Stephan Uphoff
ups at tree.com
Wed Apr 21 19:31:41 PDT 2004
Stephan Uphoff wrote:
> Matthew Dillon wrote:
> > :
> > :>
> > :> mmap() and msync(..MS_INVALIDATE..) should work.
> > :
> > :hmmm that is rather interesting..
> > :I wonder if it would work....
> > :Maybe a vm guru could confirm this.. (under 4.x)
> > :
> >
> > Huh. If I hadn't looked at the code I would have said that
> > MS_INVALIDATE doesn't work in FreeBSD, but when I look at the code
> > it sure looks like it ought to work!
> >
> > But, alas, it does not. The invalidation request goes all the way
> > through to the vnode pager but it looks like the vnode pager ignores
> > it.
> >
> > MS_INVALIDATE -> OBJPC_INVAL -> VM_PAGER_PUT_INVAL -> IO_INVAL -> (ignored)
> >
> > IO_INVAL is defined to be 'invalidate after I/O completes',
> > not 'throw away the dirty data', but the only place it appears to be
> > implemented is in the NFS code.
> >
> > -Matt
>
>
> Yes - but FreeBSD then calls vm_object_page_remove to remove the pages
> from the vnode object. (vm_object_sync for 5.x or vm_map_clean for 4.x )
>
> Mhhh .. 4.X removes the pages without flushing if the file is not write
> mapped.
> This means that anyone with read access can screw up a file.
A file with dirty (unflushed) pages.
> ( For example periodically throwing away pages from /var/log/wtmp ...)
> 5.x looks better - but there is a race condition that can cause the same thing.
> I think for msync() the vm_object_page_remove() function should be called with
> clean_only set to TRUE to avoid throwing away valid changes.
> ( I will send-pr tomorrow )
>
> Stephan
>
>
>
More information about the freebsd-hackers
mailing list