linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 01/13] NFS: Don't flush caches for a getattr that races with writeback
@ 2016-06-22 20:47 Trond Myklebust
  2016-06-22 20:47 ` [PATCH v3 02/13] NFS: Cache access checks more aggressively Trond Myklebust
  0 siblings, 1 reply; 13+ messages in thread
From: Trond Myklebust @ 2016-06-22 20:47 UTC (permalink / raw)
  To: linux-nfs

If there were outstanding writes then chalk up the unexpected change
attribute on the server to them.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
---
 fs/nfs/inode.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 52e7d6869e3b..60051e62d3f1 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -1729,12 +1729,15 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
 		if (inode->i_version != fattr->change_attr) {
 			dprintk("NFS: change_attr change on server for file %s/%ld\n",
 					inode->i_sb->s_id, inode->i_ino);
-			invalid |= NFS_INO_INVALID_ATTR
-				| NFS_INO_INVALID_DATA
-				| NFS_INO_INVALID_ACCESS
-				| NFS_INO_INVALID_ACL;
-			if (S_ISDIR(inode->i_mode))
-				nfs_force_lookup_revalidate(inode);
+			/* Could it be a race with writeback? */
+			if (nfsi->nrequests == 0) {
+				invalid |= NFS_INO_INVALID_ATTR
+					| NFS_INO_INVALID_DATA
+					| NFS_INO_INVALID_ACCESS
+					| NFS_INO_INVALID_ACL;
+				if (S_ISDIR(inode->i_mode))
+					nfs_force_lookup_revalidate(inode);
+			}
 			inode->i_version = fattr->change_attr;
 		}
 	} else {
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2016-06-22 20:48 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-22 20:47 [PATCH v3 01/13] NFS: Don't flush caches for a getattr that races with writeback Trond Myklebust
2016-06-22 20:47 ` [PATCH v3 02/13] NFS: Cache access checks more aggressively Trond Myklebust
2016-06-22 20:47   ` [PATCH v3 03/13] NFS: Cache aggressively when file is open for writing Trond Myklebust
2016-06-22 20:47     ` [PATCH v3 04/13] NFS: Kill NFS_INO_NFS_INO_FLUSHING: it is a performance killer Trond Myklebust
2016-06-22 20:47       ` [PATCH v3 05/13] NFS: writepage of a single page should not be synchronous Trond Myklebust
2016-06-22 20:47         ` [PATCH v3 06/13] NFS: Don't hold the inode lock across fsync() Trond Myklebust
2016-06-22 20:47           ` [PATCH v3 07/13] NFS: Don't call COMMIT in ->releasepage() Trond Myklebust
2016-06-22 20:47             ` [PATCH v3 08/13] NFS: Fix O_DIRECT verifier problems Trond Myklebust
2016-06-22 20:47               ` [PATCH v3 09/13] NFS: Ensure we reset the write verifier 'committed' value on resend Trond Myklebust
2016-06-22 20:47                 ` [PATCH v3 10/13] NFS: Do not serialise O_DIRECT reads and writes Trond Myklebust
2016-06-22 20:47                   ` [PATCH v3 11/13] NFS: Remove racy size manipulations in O_DIRECT Trond Myklebust
2016-06-22 20:47                     ` [PATCH v3 12/13] NFS: Remove inode->i_dio_count from the NFS O_DIRECT code Trond Myklebust
2016-06-22 20:47                       ` [PATCH v3 13/13] NFS: Remove unused function nfs_revalidate_mapping_protected() Trond Myklebust

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).