diff options
Diffstat (limited to 'fs/nfs/write.c')
| -rw-r--r-- | fs/nfs/write.c | 31 | 
1 files changed, 12 insertions, 19 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 9347ab7c9574..5209916e1222 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -202,7 +202,6 @@ out:  /* A writeback failed: mark the page as bad, and invalidate the page cache */  static void nfs_set_pageerror(struct page *page)  { -	SetPageError(page);  	nfs_zap_mapping(page_file_mapping(page)->host, page_file_mapping(page));  } @@ -239,21 +238,18 @@ int nfs_congestion_kb;  #define NFS_CONGESTION_OFF_THRESH	\  	(NFS_CONGESTION_ON_THRESH - (NFS_CONGESTION_ON_THRESH >> 2)) -static int nfs_set_page_writeback(struct page *page) +static void nfs_set_page_writeback(struct page *page)  { +	struct nfs_server *nfss = NFS_SERVER(page_file_mapping(page)->host);  	int ret = test_set_page_writeback(page); -	if (!ret) { -		struct inode *inode = page_file_mapping(page)->host; -		struct nfs_server *nfss = NFS_SERVER(inode); +	WARN_ON_ONCE(ret != 0); -		if (atomic_long_inc_return(&nfss->writeback) > -				NFS_CONGESTION_ON_THRESH) { -			set_bdi_congested(&nfss->backing_dev_info, -						BLK_RW_ASYNC); -		} +	if (atomic_long_inc_return(&nfss->writeback) > +			NFS_CONGESTION_ON_THRESH) { +		set_bdi_congested(&nfss->backing_dev_info, +					BLK_RW_ASYNC);  	} -	return ret;  }  static void nfs_end_page_writeback(struct page *page) @@ -315,10 +311,10 @@ static int nfs_page_async_flush(struct nfs_pageio_descriptor *pgio,  	if (IS_ERR(req))  		goto out; -	ret = nfs_set_page_writeback(page); -	BUG_ON(ret != 0); -	BUG_ON(test_bit(PG_CLEAN, &req->wb_flags)); +	nfs_set_page_writeback(page); +	WARN_ON_ONCE(test_bit(PG_CLEAN, &req->wb_flags)); +	ret = 0;  	if (!nfs_pageio_add_request(pgio, req)) {  		nfs_redirty_request(req);  		ret = pgio->pg_error; @@ -451,8 +447,6 @@ static void nfs_inode_remove_request(struct nfs_page *req)  	struct inode *inode = req->wb_context->dentry->d_inode;  	struct nfs_inode *nfsi = NFS_I(inode); -	BUG_ON (!NFS_WBACK_BUSY(req)); -  	spin_lock(&inode->i_lock);  	if (likely(!PageSwapCache(req->wb_page))) {  		set_page_private(req->wb_page, 0); @@ -884,7 +878,7 @@ static bool nfs_write_pageuptodate(struct page *page, struct inode *inode)  {  	if (nfs_have_delegated_attributes(inode))  		goto out; -	if (NFS_I(inode)->cache_validity & NFS_INO_REVAL_PAGECACHE) +	if (NFS_I(inode)->cache_validity & (NFS_INO_INVALID_DATA|NFS_INO_REVAL_PAGECACHE))  		return false;  out:  	return PageUptodate(page) != 0; @@ -1727,7 +1721,6 @@ int nfs_wb_page_cancel(struct inode *inode, struct page *page)  	struct nfs_page *req;  	int ret = 0; -	BUG_ON(!PageLocked(page));  	for (;;) {  		wait_on_page_writeback(page);  		req = nfs_page_find_request(page); @@ -1829,7 +1822,7 @@ int __init nfs_init_writepagecache(void)  		goto out_destroy_write_mempool;  	nfs_commit_mempool = mempool_create_slab_pool(MIN_POOL_COMMIT, -						      nfs_wdata_cachep); +						      nfs_cdata_cachep);  	if (nfs_commit_mempool == NULL)  		goto out_destroy_commit_cache;  |