diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-10 19:59:59 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-10 19:59:59 -0500 |
commit | 001a541ea9163ace5e8243ee0e907ad80a4c0ec2 (patch) | |
tree | a76225046369c440de93739add9823f5ea060245 /fs/fs-writeback.c | |
parent | 40ba587923ae67090d9f141c1d3c951be5c1420e (diff) | |
parent | bc31b86a5923fad5f3fbb6192f767f410241ba27 (diff) |
Merge branch 'writeback-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux
* 'writeback-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/wfg/linux:
writeback: move MIN_WRITEBACK_PAGES to fs-writeback.c
writeback: balanced_rate cannot exceed write bandwidth
writeback: do strict bdi dirty_exceeded
writeback: avoid tiny dirty poll intervals
writeback: max, min and target dirty pause time
writeback: dirty ratelimit - think time compensation
btrfs: fix dirtied pages accounting on sub-page writes
writeback: fix dirtied pages accounting on redirty
writeback: fix dirtied pages accounting on sub-page writes
writeback: charge leaked page dirties to active tasks
writeback: Include all dirty inodes in background writeback
Diffstat (limited to 'fs/fs-writeback.c')
-rw-r--r-- | fs/fs-writeback.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index e2951506434d..f855916657ba 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
23 | #include <linux/pagemap.h> | ||
23 | #include <linux/kthread.h> | 24 | #include <linux/kthread.h> |
24 | #include <linux/freezer.h> | 25 | #include <linux/freezer.h> |
25 | #include <linux/writeback.h> | 26 | #include <linux/writeback.h> |
@@ -29,6 +30,11 @@ | |||
29 | #include "internal.h" | 30 | #include "internal.h" |
30 | 31 | ||
31 | /* | 32 | /* |
33 | * 4MB minimal write chunk size | ||
34 | */ | ||
35 | #define MIN_WRITEBACK_PAGES (4096UL >> (PAGE_CACHE_SHIFT - 10)) | ||
36 | |||
37 | /* | ||
32 | * Passed into wb_writeback(), essentially a subset of writeback_control | 38 | * Passed into wb_writeback(), essentially a subset of writeback_control |
33 | */ | 39 | */ |
34 | struct wb_writeback_work { | 40 | struct wb_writeback_work { |
@@ -742,11 +748,17 @@ static long wb_writeback(struct bdi_writeback *wb, | |||
742 | if (work->for_background && !over_bground_thresh(wb->bdi)) | 748 | if (work->for_background && !over_bground_thresh(wb->bdi)) |
743 | break; | 749 | break; |
744 | 750 | ||
751 | /* | ||
752 | * Kupdate and background works are special and we want to | ||
753 | * include all inodes that need writing. Livelock avoidance is | ||
754 | * handled by these works yielding to any other work so we are | ||
755 | * safe. | ||
756 | */ | ||
745 | if (work->for_kupdate) { | 757 | if (work->for_kupdate) { |
746 | oldest_jif = jiffies - | 758 | oldest_jif = jiffies - |
747 | msecs_to_jiffies(dirty_expire_interval * 10); | 759 | msecs_to_jiffies(dirty_expire_interval * 10); |
748 | work->older_than_this = &oldest_jif; | 760 | } else if (work->for_background) |
749 | } | 761 | oldest_jif = jiffies; |
750 | 762 | ||
751 | trace_writeback_start(wb->bdi, work); | 763 | trace_writeback_start(wb->bdi, work); |
752 | if (list_empty(&wb->b_io)) | 764 | if (list_empty(&wb->b_io)) |