X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=fs%2Fnfs%2Fwrite.c;h=9a3b6a4cd6b9581a037f2508e5b6d4aca565cd93;hb=11da37b26301be772c289c5406aec347ad140bd6;hp=a44a87268a6ef640c454600873489cc4e4e1e058;hpb=f41f03196041f91acad2b6d2b3e1f800aed60100;p=karo-tx-linux.git diff --git a/fs/nfs/write.c b/fs/nfs/write.c index a44a87268a6e..9a3b6a4cd6b9 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -909,9 +909,14 @@ bool nfs_ctx_key_to_expire(struct nfs_open_context *ctx) */ static bool nfs_write_pageuptodate(struct page *page, struct inode *inode) { + struct nfs_inode *nfsi = NFS_I(inode); + if (nfs_have_delegated_attributes(inode)) goto out; - if (NFS_I(inode)->cache_validity & (NFS_INO_INVALID_DATA|NFS_INO_REVAL_PAGECACHE)) + if (nfsi->cache_validity & (NFS_INO_INVALID_DATA|NFS_INO_REVAL_PAGECACHE)) + return false; + smp_rmb(); + if (test_bit(NFS_INO_INVALIDATING, &nfsi->flags)) return false; out: return PageUptodate(page) != 0;