Lines Matching refs:wb
133 struct bdi_writeback *wb; member
157 #define GDTC_INIT(__wb) .wb = (__wb), \
163 #define MDTC_INIT(__wb, __gdtc) .wb = (__wb), \
183 static struct fprop_local_percpu *wb_memcg_completions(struct bdi_writeback *wb) in wb_memcg_completions() argument
185 return &wb->memcg_completions; in wb_memcg_completions()
188 static void wb_min_max_ratio(struct bdi_writeback *wb, in wb_min_max_ratio() argument
191 unsigned long this_bw = wb->avg_write_bandwidth; in wb_min_max_ratio()
192 unsigned long tot_bw = atomic_long_read(&wb->bdi->tot_write_bandwidth); in wb_min_max_ratio()
193 unsigned long long min = wb->bdi->min_ratio; in wb_min_max_ratio()
194 unsigned long long max = wb->bdi->max_ratio; in wb_min_max_ratio()
217 #define GDTC_INIT(__wb) .wb = (__wb), \
237 static struct fprop_local_percpu *wb_memcg_completions(struct bdi_writeback *wb) in wb_memcg_completions() argument
242 static void wb_min_max_ratio(struct bdi_writeback *wb, in wb_min_max_ratio() argument
245 *minp = wb->bdi->min_ratio; in wb_min_max_ratio()
246 *maxp = wb->bdi->max_ratio; in wb_min_max_ratio()
599 static inline void __wb_writeout_inc(struct bdi_writeback *wb) in __wb_writeout_inc() argument
603 __inc_wb_stat(wb, WB_WRITTEN); in __wb_writeout_inc()
604 wb_domain_writeout_inc(&global_wb_domain, &wb->completions, in __wb_writeout_inc()
605 wb->bdi->max_prop_frac); in __wb_writeout_inc()
607 cgdom = mem_cgroup_wb_domain(wb); in __wb_writeout_inc()
609 wb_domain_writeout_inc(cgdom, wb_memcg_completions(wb), in __wb_writeout_inc()
610 wb->bdi->max_prop_frac); in __wb_writeout_inc()
613 void wb_writeout_inc(struct bdi_writeback *wb) in wb_writeout_inc() argument
618 __wb_writeout_inc(wb); in wb_writeout_inc()
783 wb_min_max_ratio(dtc->wb, &wb_min_ratio, &wb_max_ratio); in __wb_calc_thresh()
792 unsigned long wb_calc_thresh(struct bdi_writeback *wb, unsigned long thresh) in wb_calc_thresh() argument
794 struct dirty_throttle_control gdtc = { GDTC_INIT(wb), in wb_calc_thresh()
907 struct bdi_writeback *wb = dtc->wb; in wb_position_ratio() local
908 unsigned long write_bw = wb->avg_write_bandwidth; in wb_position_ratio()
957 if (unlikely(wb->bdi->capabilities & BDI_CAP_STRICTLIMIT)) { in wb_position_ratio()
1084 static void wb_update_write_bandwidth(struct bdi_writeback *wb, in wb_update_write_bandwidth() argument
1089 unsigned long avg = wb->avg_write_bandwidth; in wb_update_write_bandwidth()
1090 unsigned long old = wb->write_bandwidth; in wb_update_write_bandwidth()
1103 bw = written - min(written, wb->written_stamp); in wb_update_write_bandwidth()
1110 bw += (u64)wb->write_bandwidth * (period - elapsed); in wb_update_write_bandwidth()
1125 if (wb_has_dirty_io(wb)) { in wb_update_write_bandwidth()
1126 long delta = avg - wb->avg_write_bandwidth; in wb_update_write_bandwidth()
1128 &wb->bdi->tot_write_bandwidth) <= 0); in wb_update_write_bandwidth()
1130 wb->write_bandwidth = bw; in wb_update_write_bandwidth()
1131 wb->avg_write_bandwidth = avg; in wb_update_write_bandwidth()
1192 struct bdi_writeback *wb = dtc->wb; in wb_update_dirty_ratelimit() local
1197 unsigned long write_bw = wb->avg_write_bandwidth; in wb_update_dirty_ratelimit()
1198 unsigned long dirty_ratelimit = wb->dirty_ratelimit; in wb_update_dirty_ratelimit()
1210 dirty_rate = (dirtied - wb->dirtied_stamp) * HZ / elapsed; in wb_update_dirty_ratelimit()
1304 if (unlikely(wb->bdi->capabilities & BDI_CAP_STRICTLIMIT)) { in wb_update_dirty_ratelimit()
1313 x = min3(wb->balanced_dirty_ratelimit, in wb_update_dirty_ratelimit()
1318 x = max3(wb->balanced_dirty_ratelimit, in wb_update_dirty_ratelimit()
1340 wb->dirty_ratelimit = max(dirty_ratelimit, 1UL); in wb_update_dirty_ratelimit()
1341 wb->balanced_dirty_ratelimit = balanced_dirty_ratelimit; in wb_update_dirty_ratelimit()
1343 trace_bdi_dirty_ratelimit(wb, dirty_rate, task_ratelimit); in wb_update_dirty_ratelimit()
1351 struct bdi_writeback *wb = gdtc->wb; in __wb_update_bandwidth() local
1353 unsigned long elapsed = now - wb->bw_time_stamp; in __wb_update_bandwidth()
1357 lockdep_assert_held(&wb->list_lock); in __wb_update_bandwidth()
1365 dirtied = percpu_counter_read(&wb->stat[WB_DIRTIED]); in __wb_update_bandwidth()
1366 written = percpu_counter_read(&wb->stat[WB_WRITTEN]); in __wb_update_bandwidth()
1372 if (elapsed > HZ && time_before(wb->bw_time_stamp, start_time)) in __wb_update_bandwidth()
1388 wb_update_write_bandwidth(wb, elapsed, written); in __wb_update_bandwidth()
1391 wb->dirtied_stamp = dirtied; in __wb_update_bandwidth()
1392 wb->written_stamp = written; in __wb_update_bandwidth()
1393 wb->bw_time_stamp = now; in __wb_update_bandwidth()
1396 void wb_update_bandwidth(struct bdi_writeback *wb, unsigned long start_time) in wb_update_bandwidth() argument
1398 struct dirty_throttle_control gdtc = { GDTC_INIT(wb) }; in wb_update_bandwidth()
1420 static unsigned long wb_max_pause(struct bdi_writeback *wb, in wb_max_pause() argument
1423 unsigned long bw = wb->avg_write_bandwidth; in wb_max_pause()
1439 static long wb_min_pause(struct bdi_writeback *wb, in wb_min_pause() argument
1445 long hi = ilog2(wb->avg_write_bandwidth); in wb_min_pause()
1446 long lo = ilog2(wb->dirty_ratelimit); in wb_min_pause()
1516 struct bdi_writeback *wb = dtc->wb; in wb_dirty_limits() local
1546 if (dtc->wb_thresh < 2 * wb_stat_error(wb)) { in wb_dirty_limits()
1547 wb_reclaimable = wb_stat_sum(wb, WB_RECLAIMABLE); in wb_dirty_limits()
1548 dtc->wb_dirty = wb_reclaimable + wb_stat_sum(wb, WB_WRITEBACK); in wb_dirty_limits()
1550 wb_reclaimable = wb_stat(wb, WB_RECLAIMABLE); in wb_dirty_limits()
1551 dtc->wb_dirty = wb_reclaimable + wb_stat(wb, WB_WRITEBACK); in wb_dirty_limits()
1563 struct bdi_writeback *wb, in balance_dirty_pages() argument
1566 struct dirty_throttle_control gdtc_stor = { GDTC_INIT(wb) }; in balance_dirty_pages()
1567 struct dirty_throttle_control mdtc_stor = { MDTC_INIT(wb, &gdtc_stor) }; in balance_dirty_pages()
1581 struct backing_dev_info *bdi = wb->bdi; in balance_dirty_pages()
1624 mem_cgroup_wb_stats(wb, &filepages, &headroom, in balance_dirty_pages()
1669 if (unlikely(!writeback_in_progress(wb))) in balance_dirty_pages()
1670 wb_start_background_writeback(wb); in balance_dirty_pages()
1703 if (dirty_exceeded && !wb->dirty_exceeded) in balance_dirty_pages()
1704 wb->dirty_exceeded = 1; in balance_dirty_pages()
1706 if (time_is_before_jiffies(wb->bw_time_stamp + in balance_dirty_pages()
1708 spin_lock(&wb->list_lock); in balance_dirty_pages()
1710 spin_unlock(&wb->list_lock); in balance_dirty_pages()
1714 dirty_ratelimit = wb->dirty_ratelimit; in balance_dirty_pages()
1717 max_pause = wb_max_pause(wb, sdtc->wb_dirty); in balance_dirty_pages()
1718 min_pause = wb_min_pause(wb, max_pause, in balance_dirty_pages()
1739 trace_balance_dirty_pages(wb, in balance_dirty_pages()
1768 trace_balance_dirty_pages(wb, in balance_dirty_pages()
1804 if (sdtc->wb_dirty <= wb_stat_error(wb)) in balance_dirty_pages()
1811 if (!dirty_exceeded && wb->dirty_exceeded) in balance_dirty_pages()
1812 wb->dirty_exceeded = 0; in balance_dirty_pages()
1814 if (writeback_in_progress(wb)) in balance_dirty_pages()
1829 wb_start_background_writeback(wb); in balance_dirty_pages()
1867 struct bdi_writeback *wb = NULL; in balance_dirty_pages_ratelimited() local
1875 wb = wb_get_create_current(bdi, GFP_KERNEL); in balance_dirty_pages_ratelimited()
1876 if (!wb) in balance_dirty_pages_ratelimited()
1877 wb = &bdi->wb; in balance_dirty_pages_ratelimited()
1880 if (wb->dirty_exceeded) in balance_dirty_pages_ratelimited()
1912 balance_dirty_pages(mapping, wb, current->nr_dirtied); in balance_dirty_pages_ratelimited()
1914 wb_put(wb); in balance_dirty_pages_ratelimited()
1925 bool wb_over_bg_thresh(struct bdi_writeback *wb) in wb_over_bg_thresh() argument
1927 struct dirty_throttle_control gdtc_stor = { GDTC_INIT(wb) }; in wb_over_bg_thresh()
1928 struct dirty_throttle_control mdtc_stor = { MDTC_INIT(wb, &gdtc_stor) }; in wb_over_bg_thresh()
1945 if (wb_stat(wb, WB_RECLAIMABLE) > in wb_over_bg_thresh()
1946 wb_calc_thresh(gdtc->wb, gdtc->bg_thresh)) in wb_over_bg_thresh()
1952 mem_cgroup_wb_stats(wb, &filepages, &headroom, &mdtc->dirty, in wb_over_bg_thresh()
1960 if (wb_stat(wb, WB_RECLAIMABLE) > in wb_over_bg_thresh()
1961 wb_calc_thresh(mdtc->wb, mdtc->bg_thresh)) in wb_over_bg_thresh()
1984 struct bdi_writeback *wb; in laptop_mode_timer_fn() local
1994 list_for_each_entry_rcu(wb, &q->backing_dev_info.wb_list, bdi_node) in laptop_mode_timer_fn()
1995 if (wb_has_dirty_io(wb)) in laptop_mode_timer_fn()
1996 wb_start_writeback(wb, nr_pages, true, in laptop_mode_timer_fn()
2416 struct bdi_writeback *wb; in account_page_dirtied() local
2419 wb = inode_to_wb(inode); in account_page_dirtied()
2425 __inc_wb_stat(wb, WB_RECLAIMABLE); in account_page_dirtied()
2426 __inc_wb_stat(wb, WB_DIRTIED); in account_page_dirtied()
2440 struct bdi_writeback *wb) in account_page_cleaned() argument
2446 dec_wb_stat(wb, WB_RECLAIMABLE); in account_page_cleaned()
2508 struct bdi_writeback *wb; in account_page_redirty() local
2511 wb = unlocked_inode_to_wb_begin(inode, &cookie); in account_page_redirty()
2514 dec_wb_stat(wb, WB_DIRTIED); in account_page_redirty()
2620 struct bdi_writeback *wb; in cancel_dirty_page() local
2624 wb = unlocked_inode_to_wb_begin(inode, &cookie); in cancel_dirty_page()
2627 account_page_cleaned(page, mapping, wb); in cancel_dirty_page()
2660 struct bdi_writeback *wb; in clear_page_dirty_for_io() local
2698 wb = unlocked_inode_to_wb_begin(inode, &cookie); in clear_page_dirty_for_io()
2703 dec_wb_stat(wb, WB_RECLAIMABLE); in clear_page_dirty_for_io()
2731 struct bdi_writeback *wb = inode_to_wb(inode); in test_clear_page_writeback() local
2733 __dec_wb_stat(wb, WB_WRITEBACK); in test_clear_page_writeback()
2734 __wb_writeout_inc(wb); in test_clear_page_writeback()