On Tue, Jun 19, 2012 at 03:06:09AM +0000, Benjamin Kaduk wrote: > On Mon, 18 Jun 2012, Rick Macklem wrote: > > >Author: rmacklem > >Date: Mon Jun 18 22:17:28 2012 > >New Revision: 237244 > >URL: http://svn.freebsd.org/changeset/base/237244 > > > >Log: > > Fix the NFSv4 client for the case where mmap'd files are > > written, but not msync'd by a process. A VOP_PUTPAGES() > > called when VOP_RECLAIM() happens will usually fail, since > > the NFSv4 Open has already been closed by VOP_INACTIVE(). > > Add a vm_object_page_clean() call to the NFSv4 client's > > VOP_INACTIVE(), so that the write happens before the NFSv4 > > Open is closed. kib@ suggested using vgone() instead and > > I will explore this, but this patch fixes things in the > > Hi Rick, > > OpenAFS is currently using vgone() in the vnode cleanup path (though it is > actually in RECLAIM not INACTIVE because of how AFS has traditionally > separated the two). Calling vgone() from VOP_RECLAIM is exactly NOP.
> However, it seems that the other *BSD implementations do not call vgone() > in the same place, instead the corresponding flush functions call > cache_purge() and sometimes other things. My colleague is trying to get > our FreeBSD implementation to match, so I would be interested in your test > case to confirm that we do not rely on the full vgone() there. > > Thanks, > > Ben > > > meantime. For some reason, the VOP_PUTPAGES() is still > > attaempted in VOP_RECLAIM(), but having this fail doesn't > > cause any problems except a "stateid0 in write" being logged.
pgpg9X8Cjt49N.pgp
Description: PGP signature