|
@@ -112,8 +112,15 @@ static enum vmpressure_levels vmpressure_calc_level(unsigned long scanned,
|
|
|
unsigned long reclaimed)
|
|
|
{
|
|
|
unsigned long scale = scanned + reclaimed;
|
|
|
- unsigned long pressure;
|
|
|
+ unsigned long pressure = 0;
|
|
|
|
|
|
+ /*
|
|
|
+ * reclaimed can be greater than scanned in cases
|
|
|
+ * like THP, where the scanned is 1 and reclaimed
|
|
|
+ * could be 512
|
|
|
+ */
|
|
|
+ if (reclaimed >= scanned)
|
|
|
+ goto out;
|
|
|
/*
|
|
|
* We calculate the ratio (in percents) of how many pages were
|
|
|
* scanned vs. reclaimed in a given time frame (window). Note that
|
|
@@ -124,6 +131,7 @@ static enum vmpressure_levels vmpressure_calc_level(unsigned long scanned,
|
|
|
pressure = scale - (reclaimed * scale / scanned);
|
|
|
pressure = pressure * 100 / scale;
|
|
|
|
|
|
+out:
|
|
|
pr_debug("%s: %3lu (s: %lu r: %lu)\n", __func__, pressure,
|
|
|
scanned, reclaimed);
|
|
|
|