aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fs-writeback.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-10-30 11:55:52 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-10-30 11:55:52 -0400
commitcdf01dd5443d0befc8c6a32cb2e3d2f568fd2558 (patch)
tree97ff92f14a00146ad20b168559bb13f11db7fafb /fs/fs-writeback.c
parent847f877600313e65c5659476b30d74a6f66e388e (diff)
fs-writeback.c: unify some common code
The btrfs merge looks like hell, because it changes fs-writeback.c, and the crazy code has this repeated "estimate number of dirty pages" counting that involves three different helper functions. And it's done in two different places. Just unify that whole calculation as a "get_nr_dirty_pages()" helper function, and the merge result will look half-way decent. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/fs-writeback.c')
-rw-r--r--fs/fs-writeback.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index aed881a76b22..f027382b54be 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -707,6 +707,17 @@ get_next_work_item(struct backing_dev_info *bdi)
707 return work; 707 return work;
708} 708}
709 709
710/*
711 * Add in the number of potentially dirty inodes, because each inode
712 * write can dirty pagecache in the underlying blockdev.
713 */
714static unsigned long get_nr_dirty_pages(void)
715{
716 return global_page_state(NR_FILE_DIRTY) +
717 global_page_state(NR_UNSTABLE_NFS) +
718 get_nr_dirty_inodes();
719}
720
710static long wb_check_old_data_flush(struct bdi_writeback *wb) 721static long wb_check_old_data_flush(struct bdi_writeback *wb)
711{ 722{
712 unsigned long expired; 723 unsigned long expired;
@@ -724,13 +735,7 @@ static long wb_check_old_data_flush(struct bdi_writeback *wb)
724 return 0; 735 return 0;
725 736
726 wb->last_old_flush = jiffies; 737 wb->last_old_flush = jiffies;
727 /* 738 nr_pages = get_nr_dirty_pages();
728 * Add in the number of potentially dirty inodes, because each inode
729 * write can dirty pagecache in the underlying blockdev.
730 */
731 nr_pages = global_page_state(NR_FILE_DIRTY) +
732 global_page_state(NR_UNSTABLE_NFS) +
733 get_nr_dirty_inodes();
734 739
735 if (nr_pages) { 740 if (nr_pages) {
736 struct wb_writeback_work work = { 741 struct wb_writeback_work work = {
@@ -1086,8 +1091,6 @@ static void wait_sb_inodes(struct super_block *sb)
1086 */ 1091 */
1087void writeback_inodes_sb(struct super_block *sb) 1092void writeback_inodes_sb(struct super_block *sb)
1088{ 1093{
1089 unsigned long nr_dirty = global_page_state(NR_FILE_DIRTY);
1090 unsigned long nr_unstable = global_page_state(NR_UNSTABLE_NFS);
1091 DECLARE_COMPLETION_ONSTACK(done); 1094 DECLARE_COMPLETION_ONSTACK(done);
1092 struct wb_writeback_work work = { 1095 struct wb_writeback_work work = {
1093 .sb = sb, 1096 .sb = sb,
@@ -1097,7 +1100,7 @@ void writeback_inodes_sb(struct super_block *sb)
1097 1100
1098 WARN_ON(!rwsem_is_locked(&sb->s_umount)); 1101 WARN_ON(!rwsem_is_locked(&sb->s_umount));
1099 1102
1100 work.nr_pages = nr_dirty + nr_unstable + get_nr_dirty_inodes(); 1103 work.nr_pages = get_nr_dirty_pages();
1101 1104
1102 bdi_queue_work(sb->s_bdi, &work); 1105 bdi_queue_work(sb->s_bdi, &work);
1103 wait_for_completion(&done); 1106 wait_for_completion(&done);