diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2018-03-20 16:53:31 -0400 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2018-04-10 16:06:22 -0400 |
commit | 16e143751727471f9a565515344196693bbc8762 (patch) | |
tree | eb6905af5fe0ad1f65b2392656f0bd218a8f5a03 /fs/nfs/write.c | |
parent | cac88f942d5890706a8965e40a068d295ac95ae2 (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.c | 7 |
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 | ||