Re: invalidate_inode_pages in 2.5.32/3

Chuck Lever
2002-09-05T18:49:14Z

On Thu, 5 Sep 2002, Andrew Morton wrote:

> That all assumes SMP/preempt. If you're seeing these problems on
> uniproc/non-preempt then something fishy may be happening.

sorry, forgot to mention: the system is UP, non-preemptible, high mem.

invalidate_inode_pages isn't freeing these pages because the page count is
two. perhaps the page count semantics of one of the page cache helper
functions has changed slightly. i'm still diagnosing.

fortunately the problem is deterministically reproducible. basic test6,
the readdir test, of 2002 connectathon test suite, fails -- either a
duplicate file entry or a missing file entry appears after some standard
file creation and removal processing in that directory. the incorrect
entries occur because the NFS client zaps the directory's page cache to
force the next reader to re-read the directory from the server. but
invalidate_inode_pages decides to leave the pages in the cache, so the
next reader gets stale cached data instead.

> But be aware that invalidate_inode_pages has always been best-effort.
> If someone is reading, or writing one of those pages then it
> certainly will not be removed. If you need assurances that the
> pagecache has been taken down then we'll need something stronger
> in there.

right, i've always wondered why the NFS client doesn't use
truncate_inode_pages, or something like it, instead. that can wait for
another day, though. :-)

- Chuck Lever
--
corporate: <cel at netapp dot com>
personal: <chucklever at bigfoot dot com>