diff options
Diffstat (limited to 'include/linux/writeback.h')
-rw-r--r-- | include/linux/writeback.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 80adf3d88d9d..3148db1296a2 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
8 | #include <linux/workqueue.h> | 8 | #include <linux/workqueue.h> |
9 | #include <linux/fs.h> | 9 | #include <linux/fs.h> |
10 | #include <linux/flex_proportions.h> | ||
10 | 11 | ||
11 | DECLARE_PER_CPU(int, dirty_throttle_leaks); | 12 | DECLARE_PER_CPU(int, dirty_throttle_leaks); |
12 | 13 | ||
@@ -87,6 +88,36 @@ struct writeback_control { | |||
87 | }; | 88 | }; |
88 | 89 | ||
89 | /* | 90 | /* |
91 | * A wb_domain represents a domain that wb's (bdi_writeback's) belong to | ||
92 | * and are measured against each other in. There always is one global | ||
93 | * domain, global_wb_domain, that every wb in the system is a member of. | ||
94 | * This allows measuring the relative bandwidth of each wb to distribute | ||
95 | * dirtyable memory accordingly. | ||
96 | */ | ||
97 | struct wb_domain { | ||
98 | /* | ||
99 | * Scale the writeback cache size proportional to the relative | ||
100 | * writeout speed. | ||
101 | * | ||
102 | * We do this by keeping a floating proportion between BDIs, based | ||
103 | * on page writeback completions [end_page_writeback()]. Those | ||
104 | * devices that write out pages fastest will get the larger share, | ||
105 | * while the slower will get a smaller share. | ||
106 | * | ||
107 | * We use page writeout completions because we are interested in | ||
108 | * getting rid of dirty pages. Having them written out is the | ||
109 | * primary goal. | ||
110 | * | ||
111 | * We introduce a concept of time, a period over which we measure | ||
112 | * these events, because demand can/will vary over time. The length | ||
113 | * of this period itself is measured in page writeback completions. | ||
114 | */ | ||
115 | struct fprop_global completions; | ||
116 | struct timer_list period_timer; /* timer for aging of completions */ | ||
117 | unsigned long period_time; | ||
118 | }; | ||
119 | |||
120 | /* | ||
90 | * fs/fs-writeback.c | 121 | * fs/fs-writeback.c |
91 | */ | 122 | */ |
92 | struct bdi_writeback; | 123 | struct bdi_writeback; |
@@ -120,6 +151,7 @@ static inline void laptop_sync_completion(void) { } | |||
120 | #endif | 151 | #endif |
121 | void throttle_vm_writeout(gfp_t gfp_mask); | 152 | void throttle_vm_writeout(gfp_t gfp_mask); |
122 | bool zone_dirty_ok(struct zone *zone); | 153 | bool zone_dirty_ok(struct zone *zone); |
154 | int wb_domain_init(struct wb_domain *dom, gfp_t gfp); | ||
123 | 155 | ||
124 | extern unsigned long global_dirty_limit; | 156 | extern unsigned long global_dirty_limit; |
125 | 157 | ||