aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Rubin <mrubin@google.com>2010-08-20 05:31:26 -0400
committerSage Weil <sage@newdream.net>2010-08-22 18:16:51 -0400
commit679ceace848e9fd570678396ffe1ef034e00e82d (patch)
tree670768527852f134cfe3e20d425534a16edd968a
parenteb6bb1c5bdc6e455a9d16cb845cc65afc9b0a617 (diff)
mm: exporting account_page_dirty
This allows code outside of the mm core to safely manipulate page state and not worry about the other accounting. Not using these routines means that some code will lose track of the accounting and we get bugs. This has happened once already. Signed-off-by: Michael Rubin <mrubin@google.com> Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r--fs/ceph/addr.c8
-rw-r--r--mm/page-writeback.c1
2 files changed, 2 insertions, 7 deletions
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index 5598a0d02295..420d46974ec8 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -105,13 +105,7 @@ static int ceph_set_page_dirty(struct page *page)
105 spin_lock_irq(&mapping->tree_lock); 105 spin_lock_irq(&mapping->tree_lock);
106 if (page->mapping) { /* Race with truncate? */ 106 if (page->mapping) { /* Race with truncate? */
107 WARN_ON_ONCE(!PageUptodate(page)); 107 WARN_ON_ONCE(!PageUptodate(page));
108 108 account_page_dirtied(page, page->mapping);
109 if (mapping_cap_account_dirty(mapping)) {
110 __inc_zone_page_state(page, NR_FILE_DIRTY);
111 __inc_bdi_stat(mapping->backing_dev_info,
112 BDI_RECLAIMABLE);
113 task_io_account_write(PAGE_CACHE_SIZE);
114 }
115 radix_tree_tag_set(&mapping->page_tree, 109 radix_tree_tag_set(&mapping->page_tree,
116 page_index(page), PAGECACHE_TAG_DIRTY); 110 page_index(page), PAGECACHE_TAG_DIRTY);
117 111
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 37498ef61548..849d0ccbe914 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -1096,6 +1096,7 @@ void account_page_dirtied(struct page *page, struct address_space *mapping)
1096 task_io_account_write(PAGE_CACHE_SIZE); 1096 task_io_account_write(PAGE_CACHE_SIZE);
1097 } 1097 }
1098} 1098}
1099EXPORT_SYMBOL(account_page_dirtied);
1099 1100
1100/* 1101/*
1101 * For address_spaces which do not use buffers. Just tag the page as dirty in 1102 * For address_spaces which do not use buffers. Just tag the page as dirty in