projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
UPSTREAM: usb: dwc2: Speed dwc2_get_hwparams() on some host-only ports
[firefly-linux-kernel-4.4.55.git]
/
mm
/
page-writeback.c
diff --git
a/mm/page-writeback.c
b/mm/page-writeback.c
index d15d88c8efa1e25bf76fe3bf07f6eeb08fd14fd5..fd51ebfc423fe69abf5ab3ed4e54bf020dc71568 100644
(file)
--- a/
mm/page-writeback.c
+++ b/
mm/page-writeback.c
@@
-359,8
+359,9
@@
static void domain_dirty_limits(struct dirty_throttle_control *dtc)
struct dirty_throttle_control *gdtc = mdtc_gdtc(dtc);
unsigned long bytes = vm_dirty_bytes;
unsigned long bg_bytes = dirty_background_bytes;
struct dirty_throttle_control *gdtc = mdtc_gdtc(dtc);
unsigned long bytes = vm_dirty_bytes;
unsigned long bg_bytes = dirty_background_bytes;
- unsigned long ratio = vm_dirty_ratio;
- unsigned long bg_ratio = dirty_background_ratio;
+ /* convert ratios to per-PAGE_SIZE for higher precision */
+ unsigned long ratio = (vm_dirty_ratio * PAGE_SIZE) / 100;
+ unsigned long bg_ratio = (dirty_background_ratio * PAGE_SIZE) / 100;
unsigned long thresh;
unsigned long bg_thresh;
struct task_struct *tsk;
unsigned long thresh;
unsigned long bg_thresh;
struct task_struct *tsk;
@@
-372,26
+373,28
@@
static void domain_dirty_limits(struct dirty_throttle_control *dtc)
/*
* The byte settings can't be applied directly to memcg
* domains. Convert them to ratios by scaling against
/*
* The byte settings can't be applied directly to memcg
* domains. Convert them to ratios by scaling against
- * globally available memory.
+ * globally available memory. As the ratios are in
+ * per-PAGE_SIZE, they can be obtained by dividing bytes by
+ * number of pages.
*/
if (bytes)
*/
if (bytes)
- ratio = min(DIV_ROUND_UP(bytes,
PAGE_SIZE) * 100 /
-
global_avail, 100UL
);
+ ratio = min(DIV_ROUND_UP(bytes,
global_avail),
+
PAGE_SIZE
);
if (bg_bytes)
if (bg_bytes)
- bg_ratio = min(DIV_ROUND_UP(bg_bytes,
PAGE_SIZE) * 100 /
-
global_avail, 100UL
);
+ bg_ratio = min(DIV_ROUND_UP(bg_bytes,
global_avail),
+
PAGE_SIZE
);
bytes = bg_bytes = 0;
}
if (bytes)
thresh = DIV_ROUND_UP(bytes, PAGE_SIZE);
else
bytes = bg_bytes = 0;
}
if (bytes)
thresh = DIV_ROUND_UP(bytes, PAGE_SIZE);
else
- thresh = (ratio * available_memory) /
100
;
+ thresh = (ratio * available_memory) /
PAGE_SIZE
;
if (bg_bytes)
bg_thresh = DIV_ROUND_UP(bg_bytes, PAGE_SIZE);
else
if (bg_bytes)
bg_thresh = DIV_ROUND_UP(bg_bytes, PAGE_SIZE);
else
- bg_thresh = (bg_ratio * available_memory) /
100
;
+ bg_thresh = (bg_ratio * available_memory) /
PAGE_SIZE
;
if (bg_thresh >= thresh)
bg_thresh = thresh / 2;
if (bg_thresh >= thresh)
bg_thresh = thresh / 2;
@@
-1899,7
+1902,8
@@
bool wb_over_bg_thresh(struct bdi_writeback *wb)
if (gdtc->dirty > gdtc->bg_thresh)
return true;
if (gdtc->dirty > gdtc->bg_thresh)
return true;
- if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(gdtc))
+ if (wb_stat(wb, WB_RECLAIMABLE) >
+ wb_calc_thresh(gdtc->wb, gdtc->bg_thresh))
return true;
if (mdtc) {
return true;
if (mdtc) {
@@
-1913,7
+1917,8
@@
bool wb_over_bg_thresh(struct bdi_writeback *wb)
if (mdtc->dirty > mdtc->bg_thresh)
return true;
if (mdtc->dirty > mdtc->bg_thresh)
return true;
- if (wb_stat(wb, WB_RECLAIMABLE) > __wb_calc_thresh(mdtc))
+ if (wb_stat(wb, WB_RECLAIMABLE) >
+ wb_calc_thresh(mdtc->wb, mdtc->bg_thresh))
return true;
}
return true;
}