summaryrefslogtreecommitdiffstats
path: root/fs/nfs/symlink.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2007-01-24 20:54:55 +0100
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-01-24 21:31:06 +0100
commit717d44e849219781ced028a40fcc59d3e1f49e4c (patch)
treeaa34a9b84377d18ff58901cc342b84c7e8b81dca /fs/nfs/symlink.c
parent[PATCH] NFS: Fix Oops in rpc_call_sync() (diff)
downloadlinux-717d44e849219781ced028a40fcc59d3e1f49e4c.tar.xz
linux-717d44e849219781ced028a40fcc59d3e1f49e4c.zip
[PATCH] NFS: Fix races in nfs_revalidate_mapping()
Prevent the call to invalidate_inode_pages2() from racing with file writes by taking the inode->i_mutex across the page cache flush and invalidate. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/nfs/symlink.c')
-rw-r--r--fs/nfs/symlink.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/nfs/symlink.c b/fs/nfs/symlink.c
index 6c686112cc03..525c136c7d8c 100644
--- a/fs/nfs/symlink.c
+++ b/fs/nfs/symlink.c
@@ -50,7 +50,9 @@ static void *nfs_follow_link(struct dentry *dentry, struct nameidata *nd)
{
struct inode *inode = dentry->d_inode;
struct page *page;
- void *err = ERR_PTR(nfs_revalidate_mapping(inode, inode->i_mapping));
+ void *err;
+
+ err = ERR_PTR(nfs_revalidate_mapping_nolock(inode, inode->i_mapping));
if (err)
goto read_failed;
page = read_cache_page(&inode->i_data, 0,