NFS: Fix readdir cache invalidation
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 7 Jul 2008 17:26:10 +0000 (13:26 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 8 Jul 2008 19:22:40 +0000 (15:22 -0400)
invalidate_inode_pages2_range() takes page offset arguments, not byte
ranges.

Another thought is that individual pages might perhaps get evicted by VM
pressure, in which case we might perhaps want to re-read not only the
evicted page, but all subsequent pages too (in case the server returns
more/less data per page so that the alignment of the next entry
changes). We should therefore remove the condition that we only do this on
page->index==0.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/dir.c

index 58d43daec0842ad2be1e16ac8e97e38ea38b474f..982a2064fe4cdd3755946ced633b6909e6d58d4e 100644 (file)
@@ -204,7 +204,7 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page)
         * Note: assumes we have exclusive access to this mapping either
         *       through inode->i_mutex or some other mechanism.
         */
-       if (page->index == 0 && invalidate_inode_pages2_range(inode->i_mapping, PAGE_CACHE_SIZE, -1) < 0) {
+       if (invalidate_inode_pages2_range(inode->i_mapping, page->index + 1, -1) < 0) {
                /* Should never happen */
                nfs_zap_mapping(inode, inode->i_mapping);
        }