From owner-freebsd-hackers@FreeBSD.ORG Wed Mar 30 17:36:23 2005 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 70AEF16A4CE; Wed, 30 Mar 2005 17:36:23 +0000 (GMT) Received: from cs.rice.edu (cs.rice.edu [128.42.1.30]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3EFD843D1F; Wed, 30 Mar 2005 17:36:23 +0000 (GMT) (envelope-from alc@cs.rice.edu) Received: from localhost (calypso.cs.rice.edu [128.42.1.127]) by cs.rice.edu (Postfix) with ESMTP id EC2934A9A5; Wed, 30 Mar 2005 11:36:22 -0600 (CST) Received: from cs.rice.edu ([128.42.1.30]) by localhost (calypso.cs.rice.edu [128.42.1.127]) (amavisd-new, port 10024) with LMTP id 30531-01-94; Wed, 30 Mar 2005 11:36:22 -0600 (CST) Received: by cs.rice.edu (Postfix, from userid 19572) id 739104A9A2; Wed, 30 Mar 2005 11:36:22 -0600 (CST) Date: Wed, 30 Mar 2005 11:36:22 -0600 From: Alan Cox To: Richard Sharpe , freebsd-hackers@FreeBSD.ORG, alc@FreeBSD.ORG Message-ID: <20050330173622.GJ20275@cs.rice.edu> References: <20050330021831.GA26006@VARK.MIT.EDU> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050330021831.GA26006@VARK.MIT.EDU> User-Agent: Mutt/1.4.2i X-Virus-Scanned: by amavis-2.2.1 at cs.rice.edu Subject: Re: Possible problems with mmap/munmap on FreeBSD ... X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Mar 2005 17:36:23 -0000 On Tue, Mar 29, 2005 at 09:18:32PM -0500, David Schultz wrote: > On Tue, Mar 29, 2005, Richard Sharpe wrote: > > Hi, > > > > I am having some problems with the tdb package on FreeBSD 4.6.2 and 4.10. > > > > One of the things the above package does is: > > > > mmap the tdb file to a region of memory > > store stuff in the region (memmov etc). > > when it needs to extend the size of the region { > > munmap the region > > write data at the end of the file > > mmap the region again with a larger size > > } > > > > What I am seeing is that after the munmap the data written to the region > > is gone. > > > > However, if I insert an msync before the munmap, everything is nicely > > coherent. This seems odd (in the sense that it works without the msync > > under Linux). > > > > The region is mmapped with: > > > > mmap(NULL, tdb->map_size, > > PROT_READ|(tdb->read_only? 0:PROT_WRITE), > > MAP_SHARED|MAP_FILE, tdb->fd, 0); > > > > What I notice is that all the calls to mmap return the same address. > > > > A careful reading of the man pages for mmap and munmap does not suggest > > that I am doing anything wrong. > > > > Is it possible that FreeBSD is deferring flushing the dirty data, and then > > forgets to do it when the same starting address is used etc? > > It looks like all of the underlying pages are getting invalidated > in vm_object_page_remove(). This is clearly the right thing to do > for private mappings, but it seems wrong for shared mappings. > Perhaps Alan has some insight. Hmm. In this code path we don't call vm_object_page_remove() on vnode-backed objects, only default/swap-backed objects that have no other mappings that reference them. Regards, Alan