Subject: Re: Observations on our VM system problem
To: Frank van der Linden <frank@fwi.uva.nl>
From: Greg Hudson <ghudson@MIT.EDU>
List: tech-kern
Date: 03/01/1996 14:36:30
> Seems to me that you need to specify MAP_SHARED in the mmap() calls..

This shouldn't be necessary.  The VM system will assume MAP_PRIVATE if
you don't specify a flag, and the comments say:

		/*
		 * Copy-on-write of file.  Two flavors.
		 * MAP_COPY is true COW, you essentially get a snapshot of
		 * the region at the time of mapping.  MAP_PRIVATE means only
		 * that your changes are not reflected back to the object. 
		 * Changes made by others will be seen.
		 */

Since I'm never actually touching the mapped regions, doing an msync()
of a private mapping ought to bring the page in sync with the
filesystem.

However, I did try changing my test program to use MAP_SHARED; now it
works if and only if you msync() after the second mmap() call.  So
there's apparently a bug relating to the handling of MAP_PRIVATE
mappings and msync().

Note that lib/libc/db/recno/rec_open() uses a MAP_PRIVATE mapping,
explicitly.  I can still reproduce the vi problem with msync() calls
after that mmap() (and after the mmap() in usr.bin/vi/ex/ex_tag.c).