Subject: Re: poolifying fileassoc
To: Chuck Silvers <>
From: Brett Lymn <>
List: tech-kern
Date: 10/12/2006 11:59:22
On Thu, Oct 05, 2006 at 06:02:19AM -0700, Chuck Silvers wrote:
> if a file is changed on an NFS server, the existing cached page on the
> NFS client is freed and a new page is allocated to hold the new file data.
> the new page will thus be checked again.  even if the same page were somehow
> reused, the point where it needs to be checked is when the page is initialized
> by reading from the NFS server, not when the page is found in the client's
> cache, and the aiodone path is a more appropriate place to do that.

I have been trawling the code and dropped a few printf's in some
"interesting" places and what I am seeing is that uvm_aio_aiodone() does
not seem to be being called an awful lot.  Certainly, not as much as I
would expect.  I have not tracked down where but it seems a lot of the
objects being faulted in are using a struct uvm_pagerops that has the
pgo_fault routine filled in which causes uvm_fault_internal to set
PGO_SYNCIO in the pgo_fault call - it seems that this flag is passed
in to uvn_get(), which causes uvn_get() to perform a sync read...hence
no call to uvm_aio_aiodone.

Brett Lymn