mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
[PATCH] io-accounting: write accounting
Accounting writes is fairly simple: whenever a process flips a page from clean to dirty, we accuse it of having caused a write to underlying storage of PAGE_CACHE_SIZE bytes. This may overestimate the amount of writing: the page-dirtying may cause only one buffer_head's worth of writeout. Fixing that is possible, but probably a bit messy and isn't obviously important. Cc: Jay Lan <jlan@sgi.com> Cc: Shailabh Nagar <nagar@watson.ibm.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Chris Sturtivant <csturtiv@sgi.com> Cc: Tony Ernst <tee@sgi.com> Cc: Guillaume Thouvenin <guillaume.thouvenin@bull.net> Cc: David Wright <daw@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
8c08540f87
commit
55e829af06
@ -35,6 +35,7 @@
|
||||
#include <linux/hash.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/buffer_head.h>
|
||||
#include <linux/task_io_accounting_ops.h>
|
||||
#include <linux/bio.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/cpu.h>
|
||||
@ -729,8 +730,10 @@ int __set_page_dirty_buffers(struct page *page)
|
||||
|
||||
write_lock_irq(&mapping->tree_lock);
|
||||
if (page->mapping) { /* Race with truncate? */
|
||||
if (mapping_cap_account_dirty(mapping))
|
||||
if (mapping_cap_account_dirty(mapping)) {
|
||||
__inc_zone_page_state(page, NR_FILE_DIRTY);
|
||||
task_io_account_write(PAGE_CACHE_SIZE);
|
||||
}
|
||||
radix_tree_tag_set(&mapping->page_tree,
|
||||
page_index(page), PAGECACHE_TAG_DIRTY);
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <linux/writeback.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/backing-dev.h>
|
||||
#include <linux/task_io_accounting_ops.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/mpage.h>
|
||||
#include <linux/rmap.h>
|
||||
@ -768,8 +769,10 @@ int __set_page_dirty_nobuffers(struct page *page)
|
||||
mapping2 = page_mapping(page);
|
||||
if (mapping2) { /* Race with truncate? */
|
||||
BUG_ON(mapping2 != mapping);
|
||||
if (mapping_cap_account_dirty(mapping))
|
||||
if (mapping_cap_account_dirty(mapping)) {
|
||||
__inc_zone_page_state(page, NR_FILE_DIRTY);
|
||||
task_io_account_write(PAGE_CACHE_SIZE);
|
||||
}
|
||||
radix_tree_tag_set(&mapping->page_tree,
|
||||
page_index(page), PAGECACHE_TAG_DIRTY);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user