Subject: Re: poolifying fileassoc
To: Chuck Silvers <email@example.com>
From: Brett Lymn <firstname.lastname@example.org>
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.