summaryrefslogtreecommitdiffstats
path: root/fs/nfs/write.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2018-03-20 16:53:31 -0400
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2018-04-10 16:06:22 -0400
commit16e143751727471f9a565515344196693bbc8762 (patch)
treeeb6905af5fe0ad1f65b2392656f0bd218a8f5a03 /fs/nfs/write.c
parentcac88f942d5890706a8965e40a068d295ac95ae2 (diff)
NFS: More fine grained attribute tracking
Currently, if the NFS_INO_INVALID_ATTR flag is set, for instance by a call to nfs_post_op_update_inode_locked(), then it will not be cleared until all the attributes have been revalidated. This means, for instance, that NFSv4 writes will always force a full attribute revalidation. Track the ctime, mtime, size and change attribute separately from the other attributes so that we can have nfs_post_op_update_inode_locked() set them correctly, and later have the cache consistency bitmask be able to clear them. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r--fs/nfs/write.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 7428a669d7a7..3efce54ef1cd 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1562,8 +1562,11 @@ static int nfs_writeback_done(struct rpc_task *task,
1562 } 1562 }
1563 1563
1564 /* Deal with the suid/sgid bit corner case */ 1564 /* Deal with the suid/sgid bit corner case */
1565 if (nfs_should_remove_suid(inode)) 1565 if (nfs_should_remove_suid(inode)) {
1566 nfs_mark_for_revalidate(inode); 1566 spin_lock(&inode->i_lock);
1567 NFS_I(inode)->cache_validity |= NFS_INO_INVALID_OTHER;
1568 spin_unlock(&inode->i_lock);
1569 }
1567 return 0; 1570 return 0;
1568} 1571}
1569 1572