diff options
Diffstat (limited to 'mm/page-writeback.c')
-rw-r--r-- | mm/page-writeback.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 8bef063125b1..69b5fbabc8bd 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
@@ -158,37 +158,37 @@ static void update_completion_period(void) | |||
158 | } | 158 | } |
159 | 159 | ||
160 | int dirty_background_ratio_handler(struct ctl_table *table, int write, | 160 | int dirty_background_ratio_handler(struct ctl_table *table, int write, |
161 | struct file *filp, void __user *buffer, size_t *lenp, | 161 | void __user *buffer, size_t *lenp, |
162 | loff_t *ppos) | 162 | loff_t *ppos) |
163 | { | 163 | { |
164 | int ret; | 164 | int ret; |
165 | 165 | ||
166 | ret = proc_dointvec_minmax(table, write, filp, buffer, lenp, ppos); | 166 | ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); |
167 | if (ret == 0 && write) | 167 | if (ret == 0 && write) |
168 | dirty_background_bytes = 0; | 168 | dirty_background_bytes = 0; |
169 | return ret; | 169 | return ret; |
170 | } | 170 | } |
171 | 171 | ||
172 | int dirty_background_bytes_handler(struct ctl_table *table, int write, | 172 | int dirty_background_bytes_handler(struct ctl_table *table, int write, |
173 | struct file *filp, void __user *buffer, size_t *lenp, | 173 | void __user *buffer, size_t *lenp, |
174 | loff_t *ppos) | 174 | loff_t *ppos) |
175 | { | 175 | { |
176 | int ret; | 176 | int ret; |
177 | 177 | ||
178 | ret = proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos); | 178 | ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos); |
179 | if (ret == 0 && write) | 179 | if (ret == 0 && write) |
180 | dirty_background_ratio = 0; | 180 | dirty_background_ratio = 0; |
181 | return ret; | 181 | return ret; |
182 | } | 182 | } |
183 | 183 | ||
184 | int dirty_ratio_handler(struct ctl_table *table, int write, | 184 | int dirty_ratio_handler(struct ctl_table *table, int write, |
185 | struct file *filp, void __user *buffer, size_t *lenp, | 185 | void __user *buffer, size_t *lenp, |
186 | loff_t *ppos) | 186 | loff_t *ppos) |
187 | { | 187 | { |
188 | int old_ratio = vm_dirty_ratio; | 188 | int old_ratio = vm_dirty_ratio; |
189 | int ret; | 189 | int ret; |
190 | 190 | ||
191 | ret = proc_dointvec_minmax(table, write, filp, buffer, lenp, ppos); | 191 | ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); |
192 | if (ret == 0 && write && vm_dirty_ratio != old_ratio) { | 192 | if (ret == 0 && write && vm_dirty_ratio != old_ratio) { |
193 | update_completion_period(); | 193 | update_completion_period(); |
194 | vm_dirty_bytes = 0; | 194 | vm_dirty_bytes = 0; |
@@ -198,13 +198,13 @@ int dirty_ratio_handler(struct ctl_table *table, int write, | |||
198 | 198 | ||
199 | 199 | ||
200 | int dirty_bytes_handler(struct ctl_table *table, int write, | 200 | int dirty_bytes_handler(struct ctl_table *table, int write, |
201 | struct file *filp, void __user *buffer, size_t *lenp, | 201 | void __user *buffer, size_t *lenp, |
202 | loff_t *ppos) | 202 | loff_t *ppos) |
203 | { | 203 | { |
204 | unsigned long old_bytes = vm_dirty_bytes; | 204 | unsigned long old_bytes = vm_dirty_bytes; |
205 | int ret; | 205 | int ret; |
206 | 206 | ||
207 | ret = proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos); | 207 | ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos); |
208 | if (ret == 0 && write && vm_dirty_bytes != old_bytes) { | 208 | if (ret == 0 && write && vm_dirty_bytes != old_bytes) { |
209 | update_completion_period(); | 209 | update_completion_period(); |
210 | vm_dirty_ratio = 0; | 210 | vm_dirty_ratio = 0; |
@@ -690,9 +690,9 @@ static DEFINE_TIMER(laptop_mode_wb_timer, laptop_timer_fn, 0, 0); | |||
690 | * sysctl handler for /proc/sys/vm/dirty_writeback_centisecs | 690 | * sysctl handler for /proc/sys/vm/dirty_writeback_centisecs |
691 | */ | 691 | */ |
692 | int dirty_writeback_centisecs_handler(ctl_table *table, int write, | 692 | int dirty_writeback_centisecs_handler(ctl_table *table, int write, |
693 | struct file *file, void __user *buffer, size_t *length, loff_t *ppos) | 693 | void __user *buffer, size_t *length, loff_t *ppos) |
694 | { | 694 | { |
695 | proc_dointvec(table, write, file, buffer, length, ppos); | 695 | proc_dointvec(table, write, buffer, length, ppos); |
696 | return 0; | 696 | return 0; |
697 | } | 697 | } |
698 | 698 | ||
@@ -1153,6 +1153,13 @@ int redirty_page_for_writepage(struct writeback_control *wbc, struct page *page) | |||
1153 | EXPORT_SYMBOL(redirty_page_for_writepage); | 1153 | EXPORT_SYMBOL(redirty_page_for_writepage); |
1154 | 1154 | ||
1155 | /* | 1155 | /* |
1156 | * Dirty a page. | ||
1157 | * | ||
1158 | * For pages with a mapping this should be done under the page lock | ||
1159 | * for the benefit of asynchronous memory errors who prefer a consistent | ||
1160 | * dirty state. This rule can be broken in some special cases, | ||
1161 | * but should be better not to. | ||
1162 | * | ||
1156 | * If the mapping doesn't provide a set_page_dirty a_op, then | 1163 | * If the mapping doesn't provide a set_page_dirty a_op, then |
1157 | * just fall through and assume that it wants buffer_heads. | 1164 | * just fall through and assume that it wants buffer_heads. |
1158 | */ | 1165 | */ |