Lines Matching refs:bdi

399 static inline void __bdi_writeout_inc(struct backing_dev_info *bdi)  in __bdi_writeout_inc()  argument
401 __inc_bdi_stat(bdi, BDI_WRITTEN); in __bdi_writeout_inc()
402 __fprop_inc_percpu_max(&writeout_completions, &bdi->completions, in __bdi_writeout_inc()
403 bdi->max_prop_frac); in __bdi_writeout_inc()
417 void bdi_writeout_inc(struct backing_dev_info *bdi) in bdi_writeout_inc() argument
422 __bdi_writeout_inc(bdi); in bdi_writeout_inc()
430 static void bdi_writeout_fraction(struct backing_dev_info *bdi, in bdi_writeout_fraction() argument
433 fprop_fraction_percpu(&writeout_completions, &bdi->completions, in bdi_writeout_fraction()
466 int bdi_set_min_ratio(struct backing_dev_info *bdi, unsigned int min_ratio) in bdi_set_min_ratio() argument
471 if (min_ratio > bdi->max_ratio) { in bdi_set_min_ratio()
474 min_ratio -= bdi->min_ratio; in bdi_set_min_ratio()
477 bdi->min_ratio += min_ratio; in bdi_set_min_ratio()
487 int bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned max_ratio) in bdi_set_max_ratio() argument
495 if (bdi->min_ratio > max_ratio) { in bdi_set_max_ratio()
498 bdi->max_ratio = max_ratio; in bdi_set_max_ratio()
499 bdi->max_prop_frac = (FPROP_FRAC_BASE * max_ratio) / 100; in bdi_set_max_ratio()
540 unsigned long bdi_dirty_limit(struct backing_dev_info *bdi, unsigned long dirty) in bdi_dirty_limit() argument
548 bdi_writeout_fraction(bdi, &numerator, &denominator); in bdi_dirty_limit()
554 bdi_dirty += (dirty * bdi->min_ratio) / 100; in bdi_dirty_limit()
555 if (bdi_dirty > (dirty * bdi->max_ratio) / 100) in bdi_dirty_limit()
556 bdi_dirty = dirty * bdi->max_ratio / 100; in bdi_dirty_limit()
667 static unsigned long bdi_position_ratio(struct backing_dev_info *bdi, in bdi_position_ratio() argument
674 unsigned long write_bw = bdi->avg_write_bandwidth; in bdi_position_ratio()
720 if (unlikely(bdi->capabilities & BDI_CAP_STRICTLIMIT)) { in bdi_position_ratio()
845 static void bdi_update_write_bandwidth(struct backing_dev_info *bdi, in bdi_update_write_bandwidth() argument
850 unsigned long avg = bdi->avg_write_bandwidth; in bdi_update_write_bandwidth()
851 unsigned long old = bdi->write_bandwidth; in bdi_update_write_bandwidth()
864 bw = written - min(written, bdi->written_stamp); in bdi_update_write_bandwidth()
871 bw += (u64)bdi->write_bandwidth * (period - elapsed); in bdi_update_write_bandwidth()
884 bdi->write_bandwidth = bw; in bdi_update_write_bandwidth()
885 bdi->avg_write_bandwidth = avg; in bdi_update_write_bandwidth()
950 static void bdi_update_dirty_ratelimit(struct backing_dev_info *bdi, in bdi_update_dirty_ratelimit() argument
962 unsigned long write_bw = bdi->avg_write_bandwidth; in bdi_update_dirty_ratelimit()
963 unsigned long dirty_ratelimit = bdi->dirty_ratelimit; in bdi_update_dirty_ratelimit()
975 dirty_rate = (dirtied - bdi->dirtied_stamp) * HZ / elapsed; in bdi_update_dirty_ratelimit()
977 pos_ratio = bdi_position_ratio(bdi, thresh, bg_thresh, dirty, in bdi_update_dirty_ratelimit()
1071 if (unlikely(bdi->capabilities & BDI_CAP_STRICTLIMIT)) { in bdi_update_dirty_ratelimit()
1077 bdi_dirty_limit(bdi, bg_thresh)) / 2; in bdi_update_dirty_ratelimit()
1081 x = min3(bdi->balanced_dirty_ratelimit, in bdi_update_dirty_ratelimit()
1086 x = max3(bdi->balanced_dirty_ratelimit, in bdi_update_dirty_ratelimit()
1108 bdi->dirty_ratelimit = max(dirty_ratelimit, 1UL); in bdi_update_dirty_ratelimit()
1109 bdi->balanced_dirty_ratelimit = balanced_dirty_ratelimit; in bdi_update_dirty_ratelimit()
1111 trace_bdi_dirty_ratelimit(bdi, dirty_rate, task_ratelimit); in bdi_update_dirty_ratelimit()
1114 void __bdi_update_bandwidth(struct backing_dev_info *bdi, in __bdi_update_bandwidth() argument
1123 unsigned long elapsed = now - bdi->bw_time_stamp; in __bdi_update_bandwidth()
1133 dirtied = percpu_counter_read(&bdi->bdi_stat[BDI_DIRTIED]); in __bdi_update_bandwidth()
1134 written = percpu_counter_read(&bdi->bdi_stat[BDI_WRITTEN]); in __bdi_update_bandwidth()
1140 if (elapsed > HZ && time_before(bdi->bw_time_stamp, start_time)) in __bdi_update_bandwidth()
1145 bdi_update_dirty_ratelimit(bdi, thresh, bg_thresh, dirty, in __bdi_update_bandwidth()
1149 bdi_update_write_bandwidth(bdi, elapsed, written); in __bdi_update_bandwidth()
1152 bdi->dirtied_stamp = dirtied; in __bdi_update_bandwidth()
1153 bdi->written_stamp = written; in __bdi_update_bandwidth()
1154 bdi->bw_time_stamp = now; in __bdi_update_bandwidth()
1157 static void bdi_update_bandwidth(struct backing_dev_info *bdi, in bdi_update_bandwidth() argument
1165 if (time_is_after_eq_jiffies(bdi->bw_time_stamp + BANDWIDTH_INTERVAL)) in bdi_update_bandwidth()
1167 spin_lock(&bdi->wb.list_lock); in bdi_update_bandwidth()
1168 __bdi_update_bandwidth(bdi, thresh, bg_thresh, dirty, in bdi_update_bandwidth()
1170 spin_unlock(&bdi->wb.list_lock); in bdi_update_bandwidth()
1190 static unsigned long bdi_max_pause(struct backing_dev_info *bdi, in bdi_max_pause() argument
1193 unsigned long bw = bdi->avg_write_bandwidth; in bdi_max_pause()
1209 static long bdi_min_pause(struct backing_dev_info *bdi, in bdi_min_pause() argument
1215 long hi = ilog2(bdi->avg_write_bandwidth); in bdi_min_pause()
1216 long lo = ilog2(bdi->dirty_ratelimit); in bdi_min_pause()
1284 static inline void bdi_dirty_limits(struct backing_dev_info *bdi, in bdi_dirty_limits() argument
1306 *bdi_thresh = bdi_dirty_limit(bdi, dirty_thresh); in bdi_dirty_limits()
1323 if (*bdi_thresh < 2 * bdi_stat_error(bdi)) { in bdi_dirty_limits()
1324 bdi_reclaimable = bdi_stat_sum(bdi, BDI_RECLAIMABLE); in bdi_dirty_limits()
1326 bdi_stat_sum(bdi, BDI_WRITEBACK); in bdi_dirty_limits()
1328 bdi_reclaimable = bdi_stat(bdi, BDI_RECLAIMABLE); in bdi_dirty_limits()
1330 bdi_stat(bdi, BDI_WRITEBACK); in bdi_dirty_limits()
1357 struct backing_dev_info *bdi = inode_to_bdi(mapping->host); in balance_dirty_pages() local
1358 bool strictlimit = bdi->capabilities & BDI_CAP_STRICTLIMIT; in balance_dirty_pages()
1382 bdi_dirty_limits(bdi, dirty_thresh, background_thresh, in balance_dirty_pages()
1410 if (unlikely(!writeback_in_progress(bdi))) in balance_dirty_pages()
1411 bdi_start_background_writeback(bdi); in balance_dirty_pages()
1414 bdi_dirty_limits(bdi, dirty_thresh, background_thresh, in balance_dirty_pages()
1419 if (dirty_exceeded && !bdi->dirty_exceeded) in balance_dirty_pages()
1420 bdi->dirty_exceeded = 1; in balance_dirty_pages()
1422 bdi_update_bandwidth(bdi, dirty_thresh, background_thresh, in balance_dirty_pages()
1426 dirty_ratelimit = bdi->dirty_ratelimit; in balance_dirty_pages()
1427 pos_ratio = bdi_position_ratio(bdi, dirty_thresh, in balance_dirty_pages()
1432 max_pause = bdi_max_pause(bdi, bdi_dirty); in balance_dirty_pages()
1433 min_pause = bdi_min_pause(bdi, max_pause, in balance_dirty_pages()
1454 trace_balance_dirty_pages(bdi, in balance_dirty_pages()
1483 trace_balance_dirty_pages(bdi, in balance_dirty_pages()
1519 if (bdi_dirty <= bdi_stat_error(bdi)) in balance_dirty_pages()
1526 if (!dirty_exceeded && bdi->dirty_exceeded) in balance_dirty_pages()
1527 bdi->dirty_exceeded = 0; in balance_dirty_pages()
1529 if (writeback_in_progress(bdi)) in balance_dirty_pages()
1544 bdi_start_background_writeback(bdi); in balance_dirty_pages()
1580 struct backing_dev_info *bdi = inode_to_bdi(mapping->host); in balance_dirty_pages_ratelimited() local
1584 if (!bdi_cap_account_dirty(bdi)) in balance_dirty_pages_ratelimited()
1588 if (bdi->dirty_exceeded) in balance_dirty_pages_ratelimited()
1697 struct backing_dev_info *bdi; in laptop_sync_completion() local
1701 list_for_each_entry_rcu(bdi, &bdi_list, bdi_list) in laptop_sync_completion()
1702 del_timer(&bdi->laptop_mode_wb_timer); in laptop_sync_completion()
2100 struct backing_dev_info *bdi = inode_to_bdi(mapping->host); in account_page_dirtied() local
2104 __inc_bdi_stat(bdi, BDI_RECLAIMABLE); in account_page_dirtied()
2105 __inc_bdi_stat(bdi, BDI_DIRTIED); in account_page_dirtied()
2344 struct backing_dev_info *bdi = inode_to_bdi(mapping->host); in test_clear_page_writeback() local
2353 if (bdi_cap_account_writeback(bdi)) { in test_clear_page_writeback()
2354 __dec_bdi_stat(bdi, BDI_WRITEBACK); in test_clear_page_writeback()
2355 __bdi_writeout_inc(bdi); in test_clear_page_writeback()
2379 struct backing_dev_info *bdi = inode_to_bdi(mapping->host); in __test_set_page_writeback() local
2388 if (bdi_cap_account_writeback(bdi)) in __test_set_page_writeback()
2389 __inc_bdi_stat(bdi, BDI_WRITEBACK); in __test_set_page_writeback()