4.1.28 Fix bad backport of 8f182270df
"mm/swap.c: flush lru pvecs on compound page arrival"
When I pulled in 4.1.28 into my stable 4.1-rt tree and ran the tests,
it crashed with a severe OOM killing everything. I then tested 4.1.28
without -rt and it had the same issue. I did a bisect between 4.1.27
and 4.1.28 and found that the bug started at:
commit 8f182270df
"mm/swap.c: flush lru pvecs on compound page
arrival"
Looking at that patch and what's in mainline, I see that there's a
mismatch in one of the hunks:
Mainline:
@@ -391,9 +391,8 @@ static void __lru_cache_add(struct page *page)
struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
get_page(page);
- if (!pagevec_space(pvec))
+ if (!pagevec_add(pvec, page) || PageCompound(page))
__pagevec_lru_add(pvec);
- pagevec_add(pvec, page);
put_cpu_var(lru_add_pvec);
}
Stable 4.1.28:
@@ -631,9 +631,8 @@ static void __lru_cache_add(struct page *page)
struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
page_cache_get(page);
- if (!pagevec_space(pvec))
+ if (!pagevec_space(pvec) || PageCompound(page))
__pagevec_lru_add(pvec);
- pagevec_add(pvec, page);
put_cpu_var(lru_add_pvec);
}
Where mainline replace pagevec_space() with pagevec_add, and stable did
not.
Fixing this makes the OOM go away.
Note, 3.18 has the same bug.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
wifi-calibration
parent
00850640da
commit
0c0844f9fa
|
@ -631,7 +631,7 @@ static void __lru_cache_add(struct page *page)
|
|||
struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
|
||||
|
||||
page_cache_get(page);
|
||||
if (!pagevec_space(pvec) || PageCompound(page))
|
||||
if (!pagevec_add(pvec, page) || PageCompound(page))
|
||||
__pagevec_lru_add(pvec);
|
||||
put_cpu_var(lru_add_pvec);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue