diff options
Diffstat (limited to 'mm/page-writeback.c')
| -rw-r--r-- | mm/page-writeback.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index a3278f005230..71252486bc6f 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
| @@ -128,7 +128,6 @@ unsigned long global_dirty_limit; | |||
| 128 | * | 128 | * |
| 129 | */ | 129 | */ |
| 130 | static struct prop_descriptor vm_completions; | 130 | static struct prop_descriptor vm_completions; |
| 131 | static struct prop_descriptor vm_dirties; | ||
| 132 | 131 | ||
| 133 | /* | 132 | /* |
| 134 | * couple the period to the dirty_ratio: | 133 | * couple the period to the dirty_ratio: |
| @@ -154,7 +153,6 @@ static void update_completion_period(void) | |||
| 154 | { | 153 | { |
| 155 | int shift = calc_period_shift(); | 154 | int shift = calc_period_shift(); |
| 156 | prop_change_shift(&vm_completions, shift); | 155 | prop_change_shift(&vm_completions, shift); |
| 157 | prop_change_shift(&vm_dirties, shift); | ||
| 158 | 156 | ||
| 159 | writeback_set_ratelimit(); | 157 | writeback_set_ratelimit(); |
| 160 | } | 158 | } |
| @@ -235,11 +233,6 @@ void bdi_writeout_inc(struct backing_dev_info *bdi) | |||
| 235 | } | 233 | } |
| 236 | EXPORT_SYMBOL_GPL(bdi_writeout_inc); | 234 | EXPORT_SYMBOL_GPL(bdi_writeout_inc); |
| 237 | 235 | ||
| 238 | void task_dirty_inc(struct task_struct *tsk) | ||
| 239 | { | ||
| 240 | prop_inc_single(&vm_dirties, &tsk->dirties); | ||
| 241 | } | ||
| 242 | |||
| 243 | /* | 236 | /* |
| 244 | * Obtain an accurate fraction of the BDI's portion. | 237 | * Obtain an accurate fraction of the BDI's portion. |
| 245 | */ | 238 | */ |
| @@ -1133,17 +1126,17 @@ pause: | |||
| 1133 | pages_dirtied, | 1126 | pages_dirtied, |
| 1134 | pause, | 1127 | pause, |
| 1135 | start_time); | 1128 | start_time); |
| 1136 | __set_current_state(TASK_UNINTERRUPTIBLE); | 1129 | __set_current_state(TASK_KILLABLE); |
| 1137 | io_schedule_timeout(pause); | 1130 | io_schedule_timeout(pause); |
| 1138 | 1131 | ||
| 1139 | dirty_thresh = hard_dirty_limit(dirty_thresh); | ||
| 1140 | /* | 1132 | /* |
| 1141 | * max-pause area. If dirty exceeded but still within this | 1133 | * This is typically equal to (nr_dirty < dirty_thresh) and can |
| 1142 | * area, no need to sleep for more than 200ms: (a) 8 pages per | 1134 | * also keep "1000+ dd on a slow USB stick" under control. |
| 1143 | * 200ms is typically more than enough to curb heavy dirtiers; | ||
| 1144 | * (b) the pause time limit makes the dirtiers more responsive. | ||
| 1145 | */ | 1135 | */ |
| 1146 | if (nr_dirty < dirty_thresh) | 1136 | if (task_ratelimit) |
| 1137 | break; | ||
| 1138 | |||
| 1139 | if (fatal_signal_pending(current)) | ||
| 1147 | break; | 1140 | break; |
| 1148 | } | 1141 | } |
| 1149 | 1142 | ||
| @@ -1395,7 +1388,6 @@ void __init page_writeback_init(void) | |||
| 1395 | 1388 | ||
| 1396 | shift = calc_period_shift(); | 1389 | shift = calc_period_shift(); |
| 1397 | prop_descriptor_init(&vm_completions, shift); | 1390 | prop_descriptor_init(&vm_completions, shift); |
| 1398 | prop_descriptor_init(&vm_dirties, shift); | ||
| 1399 | } | 1391 | } |
| 1400 | 1392 | ||
| 1401 | /** | 1393 | /** |
| @@ -1724,7 +1716,6 @@ void account_page_dirtied(struct page *page, struct address_space *mapping) | |||
| 1724 | __inc_zone_page_state(page, NR_DIRTIED); | 1716 | __inc_zone_page_state(page, NR_DIRTIED); |
| 1725 | __inc_bdi_stat(mapping->backing_dev_info, BDI_RECLAIMABLE); | 1717 | __inc_bdi_stat(mapping->backing_dev_info, BDI_RECLAIMABLE); |
| 1726 | __inc_bdi_stat(mapping->backing_dev_info, BDI_DIRTIED); | 1718 | __inc_bdi_stat(mapping->backing_dev_info, BDI_DIRTIED); |
| 1727 | task_dirty_inc(current); | ||
| 1728 | task_io_account_write(PAGE_CACHE_SIZE); | 1719 | task_io_account_write(PAGE_CACHE_SIZE); |
| 1729 | } | 1720 | } |
| 1730 | } | 1721 | } |
