On Thu 14-07-16 17:55:21, Steven Rostedt wrote: > 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 8f182270dfec "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); > } Heh, I've made the same mistake when backporting this to our older SLES based kernel initially. I was lucky the system even didn't boot. Sorry that I didn't find time to review the stable backport. > 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@xxxxxxxxxxx> Acked-by: Michal Hocko <mhocko@xxxxxxxx> > --- > diff --git a/mm/swap.c b/mm/swap.c > index b523f0a4cbfb..ab3b9c2dd783 100644 > --- a/mm/swap.c > +++ b/mm/swap.c > @@ -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); > } -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html