aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/client.c6
-rw-r--r--fs/nfs/inode.c2
-rw-r--r--fs/nfs/write.c11
3 files changed, 15 insertions, 4 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index a532ee1274..70587f383f 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -627,6 +627,7 @@ static void nfs_server_set_fsinfo(struct nfs_server *server, struct nfs_fsinfo *
627 if (server->rsize > NFS_MAX_FILE_IO_SIZE) 627 if (server->rsize > NFS_MAX_FILE_IO_SIZE)
628 server->rsize = NFS_MAX_FILE_IO_SIZE; 628 server->rsize = NFS_MAX_FILE_IO_SIZE;
629 server->rpages = (server->rsize + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; 629 server->rpages = (server->rsize + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
630
630 server->backing_dev_info.ra_pages = server->rpages * NFS_MAX_READAHEAD; 631 server->backing_dev_info.ra_pages = server->rpages * NFS_MAX_READAHEAD;
631 632
632 if (server->wsize > max_rpc_payload) 633 if (server->wsize > max_rpc_payload)
@@ -677,6 +678,10 @@ static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, str
677 goto out_error; 678 goto out_error;
678 679
679 nfs_server_set_fsinfo(server, &fsinfo); 680 nfs_server_set_fsinfo(server, &fsinfo);
681 error = bdi_init(&server->backing_dev_info);
682 if (error)
683 goto out_error;
684
680 685
681 /* Get some general file system info */ 686 /* Get some general file system info */
682 if (server->namelen == 0) { 687 if (server->namelen == 0) {
@@ -756,6 +761,7 @@ void nfs_free_server(struct nfs_server *server)
756 nfs_put_client(server->nfs_client); 761 nfs_put_client(server->nfs_client);
757 762
758 nfs_free_iostats(server->io_stats); 763 nfs_free_iostats(server->io_stats);
764 bdi_destroy(&server->backing_dev_info);
759 kfree(server); 765 kfree(server);
760 nfs_release_automount_timer(); 766 nfs_release_automount_timer();
761 dprintk("<-- nfs_free_server()\n"); 767 dprintk("<-- nfs_free_server()\n");
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 035c769b71..6c22453d77 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -1154,7 +1154,7 @@ static inline void nfs4_init_once(struct nfs_inode *nfsi)
1154#endif 1154#endif
1155} 1155}
1156 1156
1157static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) 1157static void init_once(struct kmem_cache * cachep, void *foo)
1158{ 1158{
1159 struct nfs_inode *nfsi = (struct nfs_inode *) foo; 1159 struct nfs_inode *nfsi = (struct nfs_inode *) foo;
1160 1160
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index e2bb66c344..0cf9d1cd9b 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -242,10 +242,8 @@ static void nfs_end_page_writeback(struct page *page)
242 struct nfs_server *nfss = NFS_SERVER(inode); 242 struct nfs_server *nfss = NFS_SERVER(inode);
243 243
244 end_page_writeback(page); 244 end_page_writeback(page);
245 if (atomic_long_dec_return(&nfss->writeback) < NFS_CONGESTION_OFF_THRESH) { 245 if (atomic_long_dec_return(&nfss->writeback) < NFS_CONGESTION_OFF_THRESH)
246 clear_bdi_congested(&nfss->backing_dev_info, WRITE); 246 clear_bdi_congested(&nfss->backing_dev_info, WRITE);
247 congestion_end(WRITE);
248 }
249} 247}
250 248
251/* 249/*
@@ -449,6 +447,7 @@ nfs_mark_request_commit(struct nfs_page *req)
449 NFS_PAGE_TAG_COMMIT); 447 NFS_PAGE_TAG_COMMIT);
450 spin_unlock(&inode->i_lock); 448 spin_unlock(&inode->i_lock);
451 inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); 449 inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
450 inc_bdi_stat(req->wb_page->mapping->backing_dev_info, BDI_RECLAIMABLE);
452 __mark_inode_dirty(inode, I_DIRTY_DATASYNC); 451 __mark_inode_dirty(inode, I_DIRTY_DATASYNC);
453} 452}
454 453
@@ -535,6 +534,8 @@ static void nfs_cancel_commit_list(struct list_head *head)
535 while(!list_empty(head)) { 534 while(!list_empty(head)) {
536 req = nfs_list_entry(head->next); 535 req = nfs_list_entry(head->next);
537 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); 536 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
537 dec_bdi_stat(req->wb_page->mapping->backing_dev_info,
538 BDI_RECLAIMABLE);
538 nfs_list_remove_request(req); 539 nfs_list_remove_request(req);
539 clear_bit(PG_NEED_COMMIT, &(req)->wb_flags); 540 clear_bit(PG_NEED_COMMIT, &(req)->wb_flags);
540 nfs_inode_remove_request(req); 541 nfs_inode_remove_request(req);
@@ -1195,6 +1196,8 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how)
1195 nfs_list_remove_request(req); 1196 nfs_list_remove_request(req);
1196 nfs_mark_request_commit(req); 1197 nfs_mark_request_commit(req);
1197 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); 1198 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
1199 dec_bdi_stat(req->wb_page->mapping->backing_dev_info,
1200 BDI_RECLAIMABLE);
1198 nfs_clear_page_tag_locked(req); 1201 nfs_clear_page_tag_locked(req);
1199 } 1202 }
1200 return -ENOMEM; 1203 return -ENOMEM;
@@ -1220,6 +1223,8 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata)
1220 nfs_list_remove_request(req); 1223 nfs_list_remove_request(req);
1221 clear_bit(PG_NEED_COMMIT, &(req)->wb_flags); 1224 clear_bit(PG_NEED_COMMIT, &(req)->wb_flags);
1222 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); 1225 dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
1226 dec_bdi_stat(req->wb_page->mapping->backing_dev_info,
1227 BDI_RECLAIMABLE);
1223 1228
1224 dprintk("NFS: commit (%s/%Ld %d@%Ld)", 1229 dprintk("NFS: commit (%s/%Ld %d@%Ld)",
1225 req->wb_context->path.dentry->d_inode->i_sb->s_id, 1230 req->wb_context->path.dentry->d_inode->i_sb->s_id,