diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-30 11:55:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-30 11:55:52 -0400 |
commit | cdf01dd5443d0befc8c6a32cb2e3d2f568fd2558 (patch) | |
tree | 97ff92f14a00146ad20b168559bb13f11db7fafb /fs/fs-writeback.c | |
parent | 847f877600313e65c5659476b30d74a6f66e388e (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.c | 23 |
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 | */ | ||
714 | static 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 | |||
710 | static long wb_check_old_data_flush(struct bdi_writeback *wb) | 721 | static 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 | */ |
1087 | void writeback_inodes_sb(struct super_block *sb) | 1092 | void 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); |