diff options
Diffstat (limited to 'fs/nfs/file.c')
| -rw-r--r-- | fs/nfs/file.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 9ea85ae23c32..55208b9b3c11 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -102,8 +102,11 @@ static int nfs_revalidate_file_size(struct inode *inode, struct file *filp)  {  	struct nfs_server *server = NFS_SERVER(inode);  	struct nfs_inode *nfsi = NFS_I(inode); +	const unsigned long force_reval = NFS_INO_REVAL_PAGECACHE|NFS_INO_REVAL_FORCED; +	unsigned long cache_validity = nfsi->cache_validity; -	if (nfs_have_delegated_attributes(inode)) +	if (NFS_PROTO(inode)->have_delegation(inode, FMODE_READ) && +	    (cache_validity & force_reval) != force_reval)  		goto out_noreval;  	if (filp->f_flags & O_DIRECT) @@ -374,7 +377,7 @@ static int nfs_write_end(struct file *file, struct address_space *mapping,  	 */  	if (!PageUptodate(page)) {  		unsigned pglen = nfs_page_length(page); -		unsigned end = offset + len; +		unsigned end = offset + copied;  		if (pglen == 0) {  			zero_user_segments(page, 0, offset,  |