From 7fb796a491cc8dc4b91ff0e56851bff1b24e94a8 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Mon, 8 Oct 2007 09:24:22 -0400 Subject: [PATCH] --- yaml --- r: 69299 b: refs/heads/master c: 40d24704091c8a29a4c99d25670f1996749aea6f h: refs/heads/master i: 69297: 8234e8d781f50a3d15795823b8be5bcf222e38b1 69295: ca69f2105c3b60edbf7f79ba259befc6cc8d8561 v: v3 --- [refs] | 2 +- trunk/fs/nfs/inode.c | 10 +++++++++- trunk/fs/nfs/nfs4proc.c | 10 ++++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index bb27a184d56f..3baa81b7f642 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9e08a3c5aec5b745e844328bcbc16458b6118faf +refs/heads/master: 40d24704091c8a29a4c99d25670f1996749aea6f diff --git a/trunk/fs/nfs/inode.c b/trunk/fs/nfs/inode.c index 469387920dd9..c44cd02e5181 100644 --- a/trunk/fs/nfs/inode.c +++ b/trunk/fs/nfs/inode.c @@ -876,11 +876,19 @@ int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr) { struct nfs_inode *nfsi = NFS_I(inode); - if (fattr->valid & NFS_ATTR_FATTR) + if (fattr->valid & NFS_ATTR_FATTR) { + if (S_ISDIR(inode->i_mode)) { + spin_lock(&inode->i_lock); + nfsi->cache_validity |= NFS_INO_INVALID_DATA; + spin_unlock(&inode->i_lock); + } return nfs_refresh_inode(inode, fattr); + } spin_lock(&inode->i_lock); nfsi->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE; + if (S_ISDIR(inode->i_mode)) + nfsi->cache_validity |= NFS_INO_INVALID_DATA; spin_unlock(&inode->i_lock); return 0; } diff --git a/trunk/fs/nfs/nfs4proc.c b/trunk/fs/nfs/nfs4proc.c index 30d5dd5735cd..cb99fd90a9ac 100644 --- a/trunk/fs/nfs/nfs4proc.c +++ b/trunk/fs/nfs/nfs4proc.c @@ -208,12 +208,10 @@ static void update_changeattr(struct inode *dir, struct nfs4_change_info *cinfo) struct nfs_inode *nfsi = NFS_I(dir); spin_lock(&dir->i_lock); - if (cinfo->after != nfsi->change_attr) { - nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_DATA; - if (!cinfo->atomic || cinfo->before != nfsi->change_attr) - nfsi->cache_change_attribute = jiffies; - nfsi->change_attr = cinfo->after; - } + nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_DATA; + if (!cinfo->atomic || cinfo->before != nfsi->change_attr) + nfsi->cache_change_attribute = jiffies; + nfsi->change_attr = cinfo->after; spin_unlock(&dir->i_lock); }