diff options
Diffstat (limited to 'fs/nfs/file.c')
| -rw-r--r-- | fs/nfs/file.c | 13 | 
1 files changed, 8 insertions, 5 deletions
| diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 24e7dccce355..76d76acbc594 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -84,6 +84,7 @@ nfs_file_release(struct inode *inode, struct file *filp)  	nfs_inc_stats(inode, NFSIOS_VFSRELEASE);  	nfs_file_clear_open_context(filp); +	nfs_fscache_release_file(inode, filp);  	return 0;  }  EXPORT_SYMBOL_GPL(nfs_file_release); @@ -415,8 +416,7 @@ static void nfs_invalidate_page(struct page *page, unsigned int offset,  		return;  	/* Cancel any unstarted writes on this page */  	nfs_wb_page_cancel(page_file_mapping(page)->host, page); - -	nfs_fscache_invalidate_page(page, page->mapping->host); +	wait_on_page_fscache(page);  }  /* @@ -475,12 +475,11 @@ static void nfs_check_dirty_writeback(struct page *page,  static int nfs_launder_page(struct page *page)  {  	struct inode *inode = page_file_mapping(page)->host; -	struct nfs_inode *nfsi = NFS_I(inode);  	dfprintk(PAGECACHE, "NFS: launder_page(%ld, %llu)\n",  		inode->i_ino, (long long)page_offset(page)); -	nfs_fscache_wait_on_page_write(nfsi, page); +	wait_on_page_fscache(page);  	return nfs_wb_page(inode, page);  } @@ -555,7 +554,11 @@ static vm_fault_t nfs_vm_page_mkwrite(struct vm_fault *vmf)  	sb_start_pagefault(inode->i_sb);  	/* make sure the cache has finished storing the page */ -	nfs_fscache_wait_on_page_write(NFS_I(inode), page); +	if (PageFsCache(page) && +	    wait_on_page_fscache_killable(vmf->page) < 0) { +		ret = VM_FAULT_RETRY; +		goto out; +	}  	wait_on_bit_action(&NFS_I(inode)->flags, NFS_INO_INVALIDATING,  			nfs_wait_bit_killable, TASK_KILLABLE); |