Message ID | 1594429136-20002-15-git-send-email-alex.shi@linux.alibaba.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | per memcg lru_lock | expand |
Add a VM_WARN_ON for tracking. and updated comments for the code. Thanks --- From f1381a1547625a6521777bf9235823d8fbd00dac Mon Sep 17 00:00:00 2001 From: Alex Shi <alex.shi@linux.alibaba.com> Date: Fri, 10 Jul 2020 16:54:37 +0800 Subject: [PATCH v16 14/22] mm/thp: add tail pages into lru anyway in split_huge_page() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Split_huge_page() must start with PageLRU(head), and we are holding the lru_lock here. If the head was cleared lru bit unexpected, tracking it. Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Cc: Kirill A. Shutemov <kirill@shutemov.name> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Hugh Dickins <hughd@google.com> Cc: Mika Penttilä <mika.penttila@nextfour.com> Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/huge_memory.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index d866b6e43434..28538444197b 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2348,15 +2348,19 @@ static void lru_add_page_tail(struct page *head, struct page *page_tail, VM_BUG_ON_PAGE(PageLRU(page_tail), head); lockdep_assert_held(&lruvec_pgdat(lruvec)->lru_lock); - if (!list) - SetPageLRU(page_tail); - - if (likely(PageLRU(head))) - list_add_tail(&page_tail->lru, &head->lru); - else if (list) { + if (list) { /* page reclaim is reclaiming a huge page */ get_page(page_tail); list_add_tail(&page_tail->lru, list); + } else { + /* + * Split start from PageLRU(head), and we are holding the + * lru_lock. + * Do a warning if the head's lru bit was cleared unexpected. + */ + VM_WARN_ON(!PageLRU(head)); + SetPageLRU(page_tail); + list_add_tail(&page_tail->lru, &head->lru); } }
On Fri, Jul 17, 2020 at 05:30:27PM +0800, Alex Shi wrote: > > Add a VM_WARN_ON for tracking. and updated comments for the code. > > Thanks > > --- > From f1381a1547625a6521777bf9235823d8fbd00dac Mon Sep 17 00:00:00 2001 > From: Alex Shi <alex.shi@linux.alibaba.com> > Date: Fri, 10 Jul 2020 16:54:37 +0800 > Subject: [PATCH v16 14/22] mm/thp: add tail pages into lru anyway in > split_huge_page() > MIME-Version: 1.0 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 8bit > > Split_huge_page() must start with PageLRU(head), and we are holding the > lru_lock here. If the head was cleared lru bit unexpected, tracking it. > > Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Reviewed-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
在 2020/7/20 下午4:49, Kirill A. Shutemov 写道: >> >> Split_huge_page() must start with PageLRU(head), and we are holding the >> lru_lock here. If the head was cleared lru bit unexpected, tracking it. >> >> Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> > Reviewed-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Hi Kirill, Millions thanks for review! Alex
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index d866b6e43434..4fe7b92c9330 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2348,15 +2348,18 @@ static void lru_add_page_tail(struct page *head, struct page *page_tail, VM_BUG_ON_PAGE(PageLRU(page_tail), head); lockdep_assert_held(&lruvec_pgdat(lruvec)->lru_lock); - if (!list) - SetPageLRU(page_tail); - - if (likely(PageLRU(head))) - list_add_tail(&page_tail->lru, &head->lru); - else if (list) { + if (list) { /* page reclaim is reclaiming a huge page */ get_page(page_tail); list_add_tail(&page_tail->lru, list); + } else { + /* + * Split start from PageLRU(head), but lru bit maybe cleared + * by isolate_lru_page, but head still in lru list, since we + * held the lru_lock. + */ + SetPageLRU(page_tail); + list_add_tail(&page_tail->lru, &head->lru); } }
split_huge_page() must start with PageLRU(head), but lru bit *maybe* cleared by isolate_lru_page, anyway the head still in lru list, since we still held the lru_lock. Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Cc: Kirill A. Shutemov <kirill@shutemov.name> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Hugh Dickins <hughd@google.com> Cc: Mika Penttilä <mika.penttila@nextfour.com> Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/huge_memory.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)