From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f42.google.com (mail-pa0-f42.google.com [209.85.220.42]) by kanga.kvack.org (Postfix) with ESMTP id F03466B0031 for ; Wed, 20 Nov 2013 07:53:31 -0500 (EST) Received: by mail-pa0-f42.google.com with SMTP id lj1so4130261pab.15 for ; Wed, 20 Nov 2013 04:53:31 -0800 (PST) Received: from psmtp.com ([74.125.245.163]) by mx.google.com with SMTP id ku6si14172089pbc.156.2013.11.20.04.53.29 for ; Wed, 20 Nov 2013 04:53:30 -0800 (PST) From: "Kirill A. Shutemov" In-Reply-To: References: <1381428359-14843-1-git-send-email-kirill.shutemov@linux.intel.com> <1381428359-14843-35-git-send-email-kirill.shutemov@linux.intel.com> Subject: Re: [PATCH 34/34] mm: dynamically allocate page->ptl if it cannot be embedded to struct page Content-Transfer-Encoding: 7bit Message-Id: <20131120125325.07A42E0090@blue.fi.intel.com> Date: Wed, 20 Nov 2013 14:53:24 +0200 (EET) Sender: owner-linux-mm@kvack.org List-ID: To: Andrey Wagin Cc: "Kirill A. Shutemov" , Andrew Morton , Peter Zijlstra , Ingo Molnar , LKML , linux-mm@kvack.org, linux-arch@vger.kernel.org Andrey Wagin wrote: > Hi Kirill, > > Looks like this patch adds memory leaks. > [ 116.188310] kmemleak: 15672 new suspected memory leaks (see > /sys/kernel/debug/kmemleak) > unreferenced object 0xffff8800da45a350 (size 96): > comm "dracut-initqueu", pid 93, jiffies 4294671391 (age 362.277s) > hex dump (first 32 bytes): > 07 00 07 00 ad 4e ad de ff ff ff ff 6b 6b 6b 6b .....N......kkkk > ff ff ff ff ff ff ff ff 80 24 b4 82 ff ff ff ff .........$...... > backtrace: > [] kmemleak_alloc+0x5e/0xc0 > [] kmem_cache_alloc_trace+0x113/0x290 > [] __ptlock_alloc+0x27/0x50 > [] __pmd_alloc+0x59/0x170 > [] copy_page_range+0x38a/0x3e0 > [] dup_mm+0x313/0x540 > [] copy_process+0x161a/0x1880 > [] do_fork+0x8b/0x360 > [] SyS_clone+0x16/0x20 > [] stub_clone+0x69/0x90 > [] 0xffffffffffffffff > > It's quite serious, because my test host went to panic in a few hours. Sorry for that. Could you test patch below. diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index a7cccb6d7fec..7be5809754cf 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -61,6 +61,7 @@ void ___pte_free_tlb(struct mmu_gather *tlb, struct page *pte) #if PAGETABLE_LEVELS > 2 void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) { + struct page *page = virt_to_page(pmd); paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT); /* * NOTE! For PAE, any changes to the top page-directory-pointer-table @@ -69,7 +70,8 @@ void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) #ifdef CONFIG_X86_PAE tlb->need_flush_all = 1; #endif - tlb_remove_page(tlb, virt_to_page(pmd)); + pgtable_pmd_page_dtor(page); + tlb_remove_page(tlb, page); } #if PAGETABLE_LEVELS > 3 -- Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org