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. ( 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 _______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"