From d1182b33ed9b62470cb6ab892a8a301542120086 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Wed, 9 May 2012 13:37:43 -0400 Subject: NFS: nfs_set_page_writeback no longer needs to reference the page We now hold a reference to the nfs_page across the calls to nfs_set_page_writeback and nfs_end_page_writeback, and that means we already have a reference to the struct page. Signed-off-by: Trond Myklebust Cc: Fred Isaman --- fs/nfs/write.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/fs/nfs/write.c b/fs/nfs/write.c index fd36b31ee72e..83823294ffd2 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -230,7 +230,6 @@ static int nfs_set_page_writeback(struct page *page) struct inode *inode = page->mapping->host; struct nfs_server *nfss = NFS_SERVER(inode); - page_cache_get(page); if (atomic_long_inc_return(&nfss->writeback) > NFS_CONGESTION_ON_THRESH) { set_bdi_congested(&nfss->backing_dev_info, @@ -246,7 +245,6 @@ static void nfs_end_page_writeback(struct page *page) struct nfs_server *nfss = NFS_SERVER(inode); end_page_writeback(page); - page_cache_release(page); if (atomic_long_dec_return(&nfss->writeback) < NFS_CONGESTION_OFF_THRESH) clear_bdi_congested(&nfss->backing_dev_info, BLK_RW_ASYNC); } @@ -607,13 +605,12 @@ static void nfs_write_completion(struct nfs_pgio_header *hdr) nfs_init_cinfo_from_inode(&cinfo, hdr->inode); while (!list_empty(&hdr->pages)) { struct nfs_page *req = nfs_list_entry(hdr->pages.next); - struct page *page = req->wb_page; bytes += req->wb_bytes; nfs_list_remove_request(req); if (test_bit(NFS_IOHDR_ERROR, &hdr->flags) && (hdr->good_bytes < bytes)) { - nfs_set_pageerror(page); + nfs_set_pageerror(req->wb_page); nfs_context_set_write_error(req->wb_context, hdr->error); goto remove_req; } @@ -629,7 +626,7 @@ remove_req: nfs_inode_remove_request(req); next: nfs_unlock_request_dont_release(req); - nfs_end_page_writeback(page); + nfs_end_page_writeback(req->wb_page); nfs_release_request(req); } out: @@ -1040,11 +1037,9 @@ static int nfs_do_multiple_writes(struct list_head *head, */ static void nfs_redirty_request(struct nfs_page *req) { - struct page *page = req->wb_page; - nfs_mark_request_dirty(req); nfs_unlock_request_dont_release(req); - nfs_end_page_writeback(page); + nfs_end_page_writeback(req->wb_page); nfs_release_request(req); } -- cgit v1.2.3