From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from userp1040.oracle.com ([156.151.31.81]:48231 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932587AbcGOLwC (ORCPT ); Fri, 15 Jul 2016 07:52:02 -0400 Subject: Re: [PATCH] 4.1.28 Fix bad backport of 8f182270dfec "mm/swap.c: flush lru pvecs on compound page arrival" To: Michal Hocko , Steven Rostedt References: <20160714175521.3675e3d6@gandalf.local.home> <20160715065504.GA11811@dhcp22.suse.cz> Cc: stable , Andrew Morton From: Sasha Levin Message-ID: <5788CE59.1040107@oracle.com> Date: Fri, 15 Jul 2016 07:51:53 -0400 MIME-Version: 1.0 In-Reply-To: <20160715065504.GA11811@dhcp22.suse.cz> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: stable-owner@vger.kernel.org List-ID: On 07/15/2016 02:55 AM, Michal Hocko wrote: > 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. > Thanks all! I've queued the fix. Thanks, Sasha