• Home
  • Raw
  • Download

Lines Matching full:dtc

131 	struct dirty_throttle_control *gdtc;	/* only set in memcg dtc's */
168 static bool mdtc_valid(struct dirty_throttle_control *dtc) in mdtc_valid() argument
170 return dtc->dom; in mdtc_valid()
173 static struct wb_domain *dtc_dom(struct dirty_throttle_control *dtc) in dtc_dom() argument
175 return dtc->dom; in dtc_dom()
222 static bool mdtc_valid(struct dirty_throttle_control *dtc) in mdtc_valid() argument
227 static struct wb_domain *dtc_dom(struct dirty_throttle_control *dtc) in dtc_dom() argument
384 * @dtc: dirty_throttle_control of interest
386 * Calculate @dtc->thresh and ->bg_thresh considering
388 * must ensure that @dtc->avail is set before calling this function. The
392 static void domain_dirty_limits(struct dirty_throttle_control *dtc) in domain_dirty_limits() argument
394 const unsigned long available_memory = dtc->avail; in domain_dirty_limits()
395 struct dirty_throttle_control *gdtc = mdtc_gdtc(dtc); in domain_dirty_limits()
405 /* gdtc is !NULL iff @dtc is for memcg domain */ in domain_dirty_limits()
442 dtc->thresh = thresh; in domain_dirty_limits()
443 dtc->bg_thresh = bg_thresh; in domain_dirty_limits()
744 * @dtc: dirty_throttle_context of interest
763 static unsigned long __wb_calc_thresh(struct dirty_throttle_control *dtc) in __wb_calc_thresh() argument
765 struct wb_domain *dom = dtc_dom(dtc); in __wb_calc_thresh()
766 unsigned long thresh = dtc->thresh; in __wb_calc_thresh()
774 fprop_fraction_percpu(&dom->completions, dtc->wb_completions, in __wb_calc_thresh()
781 wb_min_max_ratio(dtc->wb, &wb_min_ratio, &wb_max_ratio); in __wb_calc_thresh()
903 static void wb_position_ratio(struct dirty_throttle_control *dtc) in wb_position_ratio() argument
905 struct bdi_writeback *wb = dtc->wb; in wb_position_ratio()
907 unsigned long freerun = dirty_freerun_ceiling(dtc->thresh, dtc->bg_thresh); in wb_position_ratio()
908 unsigned long limit = hard_dirty_limit(dtc_dom(dtc), dtc->thresh); in wb_position_ratio()
909 unsigned long wb_thresh = dtc->wb_thresh; in wb_position_ratio()
917 dtc->pos_ratio = 0; in wb_position_ratio()
919 if (unlikely(dtc->dirty >= limit)) in wb_position_ratio()
928 pos_ratio = pos_ratio_polynom(setpoint, dtc->dirty, limit); in wb_position_ratio()
958 if (dtc->wb_dirty < 8) { in wb_position_ratio()
959 dtc->pos_ratio = min_t(long long, pos_ratio * 2, in wb_position_ratio()
964 if (dtc->wb_dirty >= wb_thresh) in wb_position_ratio()
968 dtc->wb_bg_thresh); in wb_position_ratio()
973 wb_pos_ratio = pos_ratio_polynom(wb_setpoint, dtc->wb_dirty, in wb_position_ratio()
997 dtc->pos_ratio = min(pos_ratio, wb_pos_ratio); in wb_position_ratio()
1032 if (unlikely(wb_thresh > dtc->thresh)) in wb_position_ratio()
1033 wb_thresh = dtc->thresh; in wb_position_ratio()
1041 wb_thresh = max(wb_thresh, (limit - dtc->dirty) / 8); in wb_position_ratio()
1046 x = div_u64((u64)wb_thresh << 16, dtc->thresh | 1); in wb_position_ratio()
1056 span = (dtc->thresh - wb_thresh + 8 * write_bw) * (u64)x >> 16; in wb_position_ratio()
1059 if (dtc->wb_dirty < x_intercept - span / 4) { in wb_position_ratio()
1060 pos_ratio = div64_u64(pos_ratio * (x_intercept - dtc->wb_dirty), in wb_position_ratio()
1071 if (dtc->wb_dirty < x_intercept) { in wb_position_ratio()
1072 if (dtc->wb_dirty > x_intercept / 8) in wb_position_ratio()
1074 dtc->wb_dirty); in wb_position_ratio()
1079 dtc->pos_ratio = pos_ratio; in wb_position_ratio()
1132 static void update_dirty_limit(struct dirty_throttle_control *dtc) in update_dirty_limit() argument
1134 struct wb_domain *dom = dtc_dom(dtc); in update_dirty_limit()
1135 unsigned long thresh = dtc->thresh; in update_dirty_limit()
1151 thresh = max(thresh, dtc->dirty); in update_dirty_limit()
1161 static void domain_update_bandwidth(struct dirty_throttle_control *dtc, in domain_update_bandwidth() argument
1164 struct wb_domain *dom = dtc_dom(dtc); in domain_update_bandwidth()
1174 update_dirty_limit(dtc); in domain_update_bandwidth()
1186 static void wb_update_dirty_ratelimit(struct dirty_throttle_control *dtc, in wb_update_dirty_ratelimit() argument
1190 struct bdi_writeback *wb = dtc->wb; in wb_update_dirty_ratelimit()
1191 unsigned long dirty = dtc->dirty; in wb_update_dirty_ratelimit()
1192 unsigned long freerun = dirty_freerun_ceiling(dtc->thresh, dtc->bg_thresh); in wb_update_dirty_ratelimit()
1193 unsigned long limit = hard_dirty_limit(dtc_dom(dtc), dtc->thresh); in wb_update_dirty_ratelimit()
1214 dtc->pos_ratio >> RATELIMIT_CALC_SHIFT; in wb_update_dirty_ratelimit()
1303 dirty = dtc->wb_dirty; in wb_update_dirty_ratelimit()
1304 if (dtc->wb_dirty < 8) in wb_update_dirty_ratelimit()
1305 setpoint = dtc->wb_dirty + 1; in wb_update_dirty_ratelimit()
1307 setpoint = (dtc->wb_thresh + dtc->wb_bg_thresh) / 2; in wb_update_dirty_ratelimit()
1512 static inline void wb_dirty_limits(struct dirty_throttle_control *dtc) in wb_dirty_limits() argument
1514 struct bdi_writeback *wb = dtc->wb; in wb_dirty_limits()
1530 dtc->wb_thresh = __wb_calc_thresh(dtc); in wb_dirty_limits()
1531 dtc->wb_bg_thresh = dtc->thresh ? in wb_dirty_limits()
1532 div_u64((u64)dtc->wb_thresh * dtc->bg_thresh, dtc->thresh) : 0; in wb_dirty_limits()
1544 if (dtc->wb_thresh < 2 * wb_stat_error()) { in wb_dirty_limits()
1546 dtc->wb_dirty = wb_reclaimable + wb_stat_sum(wb, WB_WRITEBACK); in wb_dirty_limits()
1549 dtc->wb_dirty = wb_reclaimable + wb_stat(wb, WB_WRITEBACK); in wb_dirty_limits()
1671 * global dtc by default. in balance_dirty_pages()
1710 /* throttle according to the chosen dtc */ in balance_dirty_pages()