Lines Matching refs:wb
128 struct bdi_writeback *wb; member
152 #define GDTC_INIT(__wb) .wb = (__wb), \
158 #define MDTC_INIT(__wb, __gdtc) .wb = (__wb), \
178 static struct fprop_local_percpu *wb_memcg_completions(struct bdi_writeback *wb) in wb_memcg_completions() argument
180 return &wb->memcg_completions; in wb_memcg_completions()
183 static void wb_min_max_ratio(struct bdi_writeback *wb, in wb_min_max_ratio() argument
186 unsigned long this_bw = READ_ONCE(wb->avg_write_bandwidth); in wb_min_max_ratio()
187 unsigned long tot_bw = atomic_long_read(&wb->bdi->tot_write_bandwidth); in wb_min_max_ratio()
188 unsigned long long min = wb->bdi->min_ratio; in wb_min_max_ratio()
189 unsigned long long max = wb->bdi->max_ratio; in wb_min_max_ratio()
212 #define GDTC_INIT(__wb) .wb = (__wb), \
232 static struct fprop_local_percpu *wb_memcg_completions(struct bdi_writeback *wb) in wb_memcg_completions() argument
237 static void wb_min_max_ratio(struct bdi_writeback *wb, in wb_min_max_ratio() argument
240 *minp = wb->bdi->min_ratio; in wb_min_max_ratio()
241 *maxp = wb->bdi->max_ratio; in wb_min_max_ratio()
588 static inline void __wb_writeout_inc(struct bdi_writeback *wb) in __wb_writeout_inc() argument
592 inc_wb_stat(wb, WB_WRITTEN); in __wb_writeout_inc()
593 wb_domain_writeout_inc(&global_wb_domain, &wb->completions, in __wb_writeout_inc()
594 wb->bdi->max_prop_frac); in __wb_writeout_inc()
596 cgdom = mem_cgroup_wb_domain(wb); in __wb_writeout_inc()
598 wb_domain_writeout_inc(cgdom, wb_memcg_completions(wb), in __wb_writeout_inc()
599 wb->bdi->max_prop_frac); in __wb_writeout_inc()
602 void wb_writeout_inc(struct bdi_writeback *wb) in wb_writeout_inc() argument
607 __wb_writeout_inc(wb); in wb_writeout_inc()
770 wb_min_max_ratio(dtc->wb, &wb_min_ratio, &wb_max_ratio); in __wb_calc_thresh()
779 unsigned long wb_calc_thresh(struct bdi_writeback *wb, unsigned long thresh) in wb_calc_thresh() argument
781 struct dirty_throttle_control gdtc = { GDTC_INIT(wb), in wb_calc_thresh()
894 struct bdi_writeback *wb = dtc->wb; in wb_position_ratio() local
895 unsigned long write_bw = READ_ONCE(wb->avg_write_bandwidth); in wb_position_ratio()
944 if (unlikely(wb->bdi->capabilities & BDI_CAP_STRICTLIMIT)) { in wb_position_ratio()
1071 static void wb_update_write_bandwidth(struct bdi_writeback *wb, in wb_update_write_bandwidth() argument
1076 unsigned long avg = wb->avg_write_bandwidth; in wb_update_write_bandwidth()
1077 unsigned long old = wb->write_bandwidth; in wb_update_write_bandwidth()
1090 bw = written - min(written, wb->written_stamp); in wb_update_write_bandwidth()
1097 bw += (u64)wb->write_bandwidth * (period - elapsed); in wb_update_write_bandwidth()
1112 if (wb_has_dirty_io(wb)) { in wb_update_write_bandwidth()
1113 long delta = avg - wb->avg_write_bandwidth; in wb_update_write_bandwidth()
1115 &wb->bdi->tot_write_bandwidth) <= 0); in wb_update_write_bandwidth()
1117 wb->write_bandwidth = bw; in wb_update_write_bandwidth()
1118 WRITE_ONCE(wb->avg_write_bandwidth, avg); in wb_update_write_bandwidth()
1179 struct bdi_writeback *wb = dtc->wb; in wb_update_dirty_ratelimit() local
1184 unsigned long write_bw = wb->avg_write_bandwidth; in wb_update_dirty_ratelimit()
1185 unsigned long dirty_ratelimit = wb->dirty_ratelimit; in wb_update_dirty_ratelimit()
1197 dirty_rate = (dirtied - wb->dirtied_stamp) * HZ / elapsed; in wb_update_dirty_ratelimit()
1291 if (unlikely(wb->bdi->capabilities & BDI_CAP_STRICTLIMIT)) { in wb_update_dirty_ratelimit()
1300 x = min3(wb->balanced_dirty_ratelimit, in wb_update_dirty_ratelimit()
1305 x = max3(wb->balanced_dirty_ratelimit, in wb_update_dirty_ratelimit()
1327 WRITE_ONCE(wb->dirty_ratelimit, max(dirty_ratelimit, 1UL)); in wb_update_dirty_ratelimit()
1328 wb->balanced_dirty_ratelimit = balanced_dirty_ratelimit; in wb_update_dirty_ratelimit()
1330 trace_bdi_dirty_ratelimit(wb, dirty_rate, task_ratelimit); in wb_update_dirty_ratelimit()
1337 struct bdi_writeback *wb = gdtc->wb; in __wb_update_bandwidth() local
1343 spin_lock(&wb->list_lock); in __wb_update_bandwidth()
1351 elapsed = max(now - wb->bw_time_stamp, 1UL); in __wb_update_bandwidth()
1352 dirtied = percpu_counter_read(&wb->stat[WB_DIRTIED]); in __wb_update_bandwidth()
1353 written = percpu_counter_read(&wb->stat[WB_WRITTEN]); in __wb_update_bandwidth()
1368 wb_update_write_bandwidth(wb, elapsed, written); in __wb_update_bandwidth()
1370 wb->dirtied_stamp = dirtied; in __wb_update_bandwidth()
1371 wb->written_stamp = written; in __wb_update_bandwidth()
1372 WRITE_ONCE(wb->bw_time_stamp, now); in __wb_update_bandwidth()
1373 spin_unlock(&wb->list_lock); in __wb_update_bandwidth()
1376 void wb_update_bandwidth(struct bdi_writeback *wb) in wb_update_bandwidth() argument
1378 struct dirty_throttle_control gdtc = { GDTC_INIT(wb) }; in wb_update_bandwidth()
1386 static void wb_bandwidth_estimate_start(struct bdi_writeback *wb) in wb_bandwidth_estimate_start() argument
1389 unsigned long elapsed = now - READ_ONCE(wb->bw_time_stamp); in wb_bandwidth_estimate_start()
1392 !atomic_read(&wb->writeback_inodes)) { in wb_bandwidth_estimate_start()
1393 spin_lock(&wb->list_lock); in wb_bandwidth_estimate_start()
1394 wb->dirtied_stamp = wb_stat(wb, WB_DIRTIED); in wb_bandwidth_estimate_start()
1395 wb->written_stamp = wb_stat(wb, WB_WRITTEN); in wb_bandwidth_estimate_start()
1396 WRITE_ONCE(wb->bw_time_stamp, now); in wb_bandwidth_estimate_start()
1397 spin_unlock(&wb->list_lock); in wb_bandwidth_estimate_start()
1418 static unsigned long wb_max_pause(struct bdi_writeback *wb, in wb_max_pause() argument
1421 unsigned long bw = READ_ONCE(wb->avg_write_bandwidth); in wb_max_pause()
1437 static long wb_min_pause(struct bdi_writeback *wb, in wb_min_pause() argument
1443 long hi = ilog2(READ_ONCE(wb->avg_write_bandwidth)); in wb_min_pause()
1444 long lo = ilog2(READ_ONCE(wb->dirty_ratelimit)); in wb_min_pause()
1514 struct bdi_writeback *wb = dtc->wb; in wb_dirty_limits() local
1545 wb_reclaimable = wb_stat_sum(wb, WB_RECLAIMABLE); in wb_dirty_limits()
1546 dtc->wb_dirty = wb_reclaimable + wb_stat_sum(wb, WB_WRITEBACK); in wb_dirty_limits()
1548 wb_reclaimable = wb_stat(wb, WB_RECLAIMABLE); in wb_dirty_limits()
1549 dtc->wb_dirty = wb_reclaimable + wb_stat(wb, WB_WRITEBACK); in wb_dirty_limits()
1560 static void balance_dirty_pages(struct bdi_writeback *wb, in balance_dirty_pages() argument
1563 struct dirty_throttle_control gdtc_stor = { GDTC_INIT(wb) }; in balance_dirty_pages()
1564 struct dirty_throttle_control mdtc_stor = { MDTC_INIT(wb, &gdtc_stor) }; in balance_dirty_pages()
1578 struct backing_dev_info *bdi = wb->bdi; in balance_dirty_pages()
1614 mem_cgroup_wb_stats(wb, &filepages, &headroom, in balance_dirty_pages()
1663 if (unlikely(!writeback_in_progress(wb))) in balance_dirty_pages()
1664 wb_start_background_writeback(wb); in balance_dirty_pages()
1666 mem_cgroup_flush_foreign(wb); in balance_dirty_pages()
1721 if (dirty_exceeded && !wb->dirty_exceeded) in balance_dirty_pages()
1722 wb->dirty_exceeded = 1; in balance_dirty_pages()
1724 if (time_is_before_jiffies(READ_ONCE(wb->bw_time_stamp) + in balance_dirty_pages()
1729 dirty_ratelimit = READ_ONCE(wb->dirty_ratelimit); in balance_dirty_pages()
1732 max_pause = wb_max_pause(wb, sdtc->wb_dirty); in balance_dirty_pages()
1733 min_pause = wb_min_pause(wb, max_pause, in balance_dirty_pages()
1754 trace_balance_dirty_pages(wb, in balance_dirty_pages()
1783 trace_balance_dirty_pages(wb, in balance_dirty_pages()
1796 wb->dirty_sleep = now; in balance_dirty_pages()
1827 if (!dirty_exceeded && wb->dirty_exceeded) in balance_dirty_pages()
1828 wb->dirty_exceeded = 0; in balance_dirty_pages()
1830 if (writeback_in_progress(wb)) in balance_dirty_pages()
1845 wb_start_background_writeback(wb); in balance_dirty_pages()
1882 struct bdi_writeback *wb = NULL; in balance_dirty_pages_ratelimited() local
1890 wb = wb_get_create_current(bdi, GFP_KERNEL); in balance_dirty_pages_ratelimited()
1891 if (!wb) in balance_dirty_pages_ratelimited()
1892 wb = &bdi->wb; in balance_dirty_pages_ratelimited()
1895 if (wb->dirty_exceeded) in balance_dirty_pages_ratelimited()
1927 balance_dirty_pages(wb, current->nr_dirtied); in balance_dirty_pages_ratelimited()
1929 wb_put(wb); in balance_dirty_pages_ratelimited()
1942 bool wb_over_bg_thresh(struct bdi_writeback *wb) in wb_over_bg_thresh() argument
1944 struct dirty_throttle_control gdtc_stor = { GDTC_INIT(wb) }; in wb_over_bg_thresh()
1945 struct dirty_throttle_control mdtc_stor = { MDTC_INIT(wb, &gdtc_stor) }; in wb_over_bg_thresh()
1963 thresh = wb_calc_thresh(gdtc->wb, gdtc->bg_thresh); in wb_over_bg_thresh()
1965 reclaimable = wb_stat_sum(wb, WB_RECLAIMABLE); in wb_over_bg_thresh()
1967 reclaimable = wb_stat(wb, WB_RECLAIMABLE); in wb_over_bg_thresh()
1975 mem_cgroup_wb_stats(wb, &filepages, &headroom, &mdtc->dirty, in wb_over_bg_thresh()
1983 thresh = wb_calc_thresh(mdtc->wb, mdtc->bg_thresh); in wb_over_bg_thresh()
1985 reclaimable = wb_stat_sum(wb, WB_RECLAIMABLE); in wb_over_bg_thresh()
1987 reclaimable = wb_stat(wb, WB_RECLAIMABLE); in wb_over_bg_thresh()
2356 struct bdi_writeback *wb; in do_writepages() local
2360 wb = inode_to_wb_wbc(mapping->host, wbc); in do_writepages()
2361 wb_bandwidth_estimate_start(wb); in do_writepages()
2377 if (time_is_before_jiffies(READ_ONCE(wb->bw_time_stamp) + in do_writepages()
2379 wb_update_bandwidth(wb); in do_writepages()
2449 struct bdi_writeback *wb; in account_page_dirtied() local
2452 wb = inode_to_wb(inode); in account_page_dirtied()
2457 inc_wb_stat(wb, WB_RECLAIMABLE); in account_page_dirtied()
2458 inc_wb_stat(wb, WB_DIRTIED); in account_page_dirtied()
2463 mem_cgroup_track_foreign_dirty(page, wb); in account_page_dirtied()
2473 struct bdi_writeback *wb) in account_page_cleaned() argument
2478 dec_wb_stat(wb, WB_RECLAIMABLE); in account_page_cleaned()
2556 struct bdi_writeback *wb; in account_page_redirty() local
2559 wb = unlocked_inode_to_wb_begin(inode, &cookie); in account_page_redirty()
2562 dec_wb_stat(wb, WB_DIRTIED); in account_page_redirty()
2659 struct bdi_writeback *wb; in __cancel_dirty_page() local
2663 wb = unlocked_inode_to_wb_begin(inode, &cookie); in __cancel_dirty_page()
2666 account_page_cleaned(page, mapping, wb); in __cancel_dirty_page()
2699 struct bdi_writeback *wb; in clear_page_dirty_for_io() local
2737 wb = unlocked_inode_to_wb_begin(inode, &cookie); in clear_page_dirty_for_io()
2741 dec_wb_stat(wb, WB_RECLAIMABLE); in clear_page_dirty_for_io()
2751 static void wb_inode_writeback_start(struct bdi_writeback *wb) in wb_inode_writeback_start() argument
2753 atomic_inc(&wb->writeback_inodes); in wb_inode_writeback_start()
2756 static void wb_inode_writeback_end(struct bdi_writeback *wb) in wb_inode_writeback_end() argument
2758 atomic_dec(&wb->writeback_inodes); in wb_inode_writeback_end()
2766 queue_delayed_work(bdi_wq, &wb->bw_dwork, BANDWIDTH_INTERVAL); in wb_inode_writeback_end()
2786 struct bdi_writeback *wb = inode_to_wb(inode); in test_clear_page_writeback() local
2788 dec_wb_stat(wb, WB_WRITEBACK); in test_clear_page_writeback()
2789 __wb_writeout_inc(wb); in test_clear_page_writeback()
2792 wb_inode_writeback_end(wb); in test_clear_page_writeback()
2836 struct bdi_writeback *wb = inode_to_wb(inode); in __test_set_page_writeback() local
2838 inc_wb_stat(wb, WB_WRITEBACK); in __test_set_page_writeback()
2840 wb_inode_writeback_start(wb); in __test_set_page_writeback()