summaryrefslogtreecommitdiffstats
path: root/fs/nfs/dir.c
diff options
context:
space:
mode:
authorTrond Myklebust2006-10-20 08:28:40 +0200
committerLinus Torvalds2006-10-20 19:26:39 +0200
commitcd9ae2b6a75bb1fa0d370929c2d7a7da1ed719d9 (patch)
tree1bf943b54f47bfbf5198b08b930bd09099ff99b7 /fs/nfs/dir.c
parent[PATCH] NFS: Fix NFSv4 callback regression (diff)
downloadkernel-qcow2-linux-cd9ae2b6a75bb1fa0d370929c2d7a7da1ed719d9.tar.gz
kernel-qcow2-linux-cd9ae2b6a75bb1fa0d370929c2d7a7da1ed719d9.tar.xz
kernel-qcow2-linux-cd9ae2b6a75bb1fa0d370929c2d7a7da1ed719d9.zip
[PATCH] NFS: Deal with failure of invalidate_inode_pages2()
If invalidate_inode_pages2() fails, then it should in principle just be because the current process was signalled. In that case, we just want to ensure that the inode's page cache remains marked as invalid. Also add a helper to allow the O_DIRECT code to simply mark the page cache as invalid once it is finished writing, instead of calling invalidate_inode_pages2() itself. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/nfs/dir.c')
-rw-r--r--fs/nfs/dir.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 481f8892a919..58d44057813e 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -203,8 +203,10 @@ 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);
+ if (page->index == 0 && invalidate_inode_pages2_range(inode->i_mapping, PAGE_CACHE_SIZE, -1) < 0) {
+ /* Should never happen */
+ nfs_zap_mapping(inode, inode->i_mapping);
+ }
unlock_page(page);
return 0;
error: