Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp3028898imj; Mon, 11 Feb 2019 12:34:32 -0800 (PST) X-Google-Smtp-Source: AHgI3IZ1fBub86QHcdDFbe7GqCaaNZPWFGPg2KE6DwZ1/5QaO73HIjZhb4g3EGHlbeGNjL21fitC X-Received: by 2002:a63:c04b:: with SMTP id z11mr62727pgi.135.1549917272104; Mon, 11 Feb 2019 12:34:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549917272; cv=none; d=google.com; s=arc-20160816; b=VSezbL7oWCcVjPlGd6hJfVpAM8p4y/e1k5zy6Tt7ESVsr4DFQWjtmePcFeUcj5Dr6A IKDiagaWF2Z6+jQOCuVUdzbP1L4dWNhlGCwv6gx7cB542pSxTcmVUUjOmdjRl9f+zxB/ QNFfE9MYgVLxvTHQU7OIRd4sazkkPx6zhceeulyFL7GMKWEbpycStNy8Y3n9WT0pf+8X HkboIpRQFBgIZHB+TFGw57JWLlcqlKYlNpT9ipvvDjmXq4BgWoO/UYCcJlEaRoY5l5ZY yVBkVT4EU6qVF29U7k7A2a6klvtgWLOUq6rR+920HexAszD/we+xtNhbKSmbp2Gu54+7 fNMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=AlkMwnyxqiywgQrnwg1E3Cz9ULiUcCPJ5gOy2kXG/iM=; b=sRTx+KT3+R4201ig3h+X4L8aXvc94oUzyTpERYEL4gof+AFRX/YBLZY0zACJAZGuCX DaSP33/BGtdQWKkwwlQ/WEn9eNDNOAtno9ZWTyDEPQQViD3Fa4Gb0a8n2yV8Mx3mfF9w rY+U00QbuWelLYCJvm9wMrL+ujTUxWwFq5RqCBTDlDYVSPlcOAp0h2PUGfHYXvoKZwzD YiF+Gw467biisbVwzeheF+ZXlDGOGXsJUnOwTxFWudaA8rkAweGCG1jTtEEWEuqKK0iC Ut9/5M2X18pJMhpXLuitj4e0cLqtva3jBa2DzKoj3d/CC28MYiEc9NcefmdbVKplfzgC YhRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=Zb6zL4Ba; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 101si11976663pld.22.2019.02.11.12.34.16; Mon, 11 Feb 2019 12:34:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=Zb6zL4Ba; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728771AbfBKRlG (ORCPT + 99 others); Mon, 11 Feb 2019 12:41:06 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:43685 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726243AbfBKRlG (ORCPT ); Mon, 11 Feb 2019 12:41:06 -0500 Received: by mail-qk1-f194.google.com with SMTP id f196so6447421qke.10 for ; Mon, 11 Feb 2019 09:41:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=AlkMwnyxqiywgQrnwg1E3Cz9ULiUcCPJ5gOy2kXG/iM=; b=Zb6zL4BaIJPAjGFX0V1pbTe4IE2qJ+o2fCm1vYWJNlWAr0GIDK3yHZIoFhpTB2YrAe NApI8/4DTtlshkQI4MBtXQ+rA7CPy1rc+AuVEs/YOv1t/xOdjH5n3oDCpBIV/N0AGYOO hwmXK8Za8rNUdP0HErKuWaLfMeaZuu163yUyo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=AlkMwnyxqiywgQrnwg1E3Cz9ULiUcCPJ5gOy2kXG/iM=; b=TTGeuw2LYGtDXqLMStm3EY8rj9Bg9b/k4uvc79EXW/IzVOJwTgVQE1RQeXtE8ceEdP 2rysbYatWl1G8GK46+lN22nw1/sZNAB1SHLL9Di/ge2FmFg081i7UbRfGlmhmoHADBXo rDd8AsUIjGhCrupwEELM61+bIy5N+NI973kVkoMXYu1Q53km9iQ0RgBT53wnRSh7JPVB lxZeKM0m1Zc+XLiEK/SLPpMno0DhTP9qcGbwiQJpQj2rpokTWxU3m22mPo3M2Dk6qYah 16fe36SqY3jKaqnbevHhXuGqP7Tvzw+xOixXgdzfGq0IxIyRLElgZESYN8rP+LmaBo7r Ej+g== X-Gm-Message-State: AHQUAubF/jp9n9XSmk6MjrUQ1tEhcFDKlGb/uzfAnrDRGirTp3jmOzce Vw4QRnrryYUGUYescCxSsGQemA== X-Received: by 2002:ae9:dd42:: with SMTP id r63mr25739025qkf.264.1549906864495; Mon, 11 Feb 2019 09:41:04 -0800 (PST) Received: from localhost ([2620:0:1004:1100:cca9:fccc:8667:9bdc]) by smtp.gmail.com with ESMTPSA id c202sm14673397qkb.19.2019.02.11.09.41.03 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 11 Feb 2019 09:41:03 -0800 (PST) Date: Mon, 11 Feb 2019 12:41:02 -0500 From: Joel Fernandes To: Sandeep Patil Cc: vbabka@suse.cz, adobriyan@gmail.com, akpm@linux-foundation.org, avagin@openvz.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, kernel-team@android.com, dancol@google.com Subject: Re: [PATCH v2] mm: proc: smaps_rollup: Fix pss_locked calculation Message-ID: <20190211174102.GA16019@google.com> References: <20190203065425.14650-1-sspatil@android.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190203065425.14650-1-sspatil@android.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Feb 02, 2019 at 10:54:25PM -0800, Sandeep Patil wrote: > The 'pss_locked' field of smaps_rollup was being calculated incorrectly. > It accumulated the current pss everytime a locked VMA was found. Fix > that by adding to 'pss_locked' the same time as that of 'pss' if the vma > being walked is locked. > > Fixes: 493b0e9d945f ("mm: add /proc/pid/smaps_rollup") > Cc: stable@vger.kernel.org # 4.14.y 4.19.y > Signed-off-by: Sandeep Patil > --- Reviewed-by: Joel Fernandes (Google) thanks, - Joel > > v1->v2 > ------ > - Move pss_locked accounting into smaps_account() inline with pss > > fs/proc/task_mmu.c | 22 ++++++++++++++-------- > 1 file changed, 14 insertions(+), 8 deletions(-) > > diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c > index f0ec9edab2f3..85b0ef890b28 100644 > --- a/fs/proc/task_mmu.c > +++ b/fs/proc/task_mmu.c > @@ -423,7 +423,7 @@ struct mem_size_stats { > }; > > static void smaps_account(struct mem_size_stats *mss, struct page *page, > - bool compound, bool young, bool dirty) > + bool compound, bool young, bool dirty, bool locked) > { > int i, nr = compound ? 1 << compound_order(page) : 1; > unsigned long size = nr * PAGE_SIZE; > @@ -450,24 +450,31 @@ static void smaps_account(struct mem_size_stats *mss, struct page *page, > else > mss->private_clean += size; > mss->pss += (u64)size << PSS_SHIFT; > + if (locked) > + mss->pss_locked += (u64)size << PSS_SHIFT; > return; > } > > for (i = 0; i < nr; i++, page++) { > int mapcount = page_mapcount(page); > + unsigned long pss = (PAGE_SIZE << PSS_SHIFT); > > if (mapcount >= 2) { > if (dirty || PageDirty(page)) > mss->shared_dirty += PAGE_SIZE; > else > mss->shared_clean += PAGE_SIZE; > - mss->pss += (PAGE_SIZE << PSS_SHIFT) / mapcount; > + mss->pss += pss / mapcount; > + if (locked) > + mss->pss_locked += pss / mapcount; > } else { > if (dirty || PageDirty(page)) > mss->private_dirty += PAGE_SIZE; > else > mss->private_clean += PAGE_SIZE; > - mss->pss += PAGE_SIZE << PSS_SHIFT; > + mss->pss += pss; > + if (locked) > + mss->pss_locked += pss; > } > } > } > @@ -490,6 +497,7 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, > { > struct mem_size_stats *mss = walk->private; > struct vm_area_struct *vma = walk->vma; > + bool locked = !!(vma->vm_flags & VM_LOCKED); > struct page *page = NULL; > > if (pte_present(*pte)) { > @@ -532,7 +540,7 @@ static void smaps_pte_entry(pte_t *pte, unsigned long addr, > if (!page) > return; > > - smaps_account(mss, page, false, pte_young(*pte), pte_dirty(*pte)); > + smaps_account(mss, page, false, pte_young(*pte), pte_dirty(*pte), locked); > } > > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > @@ -541,6 +549,7 @@ static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr, > { > struct mem_size_stats *mss = walk->private; > struct vm_area_struct *vma = walk->vma; > + bool locked = !!(vma->vm_flags & VM_LOCKED); > struct page *page; > > /* FOLL_DUMP will return -EFAULT on huge zero page */ > @@ -555,7 +564,7 @@ static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr, > /* pass */; > else > VM_BUG_ON_PAGE(1, page); > - smaps_account(mss, page, true, pmd_young(*pmd), pmd_dirty(*pmd)); > + smaps_account(mss, page, true, pmd_young(*pmd), pmd_dirty(*pmd), locked); > } > #else > static void smaps_pmd_entry(pmd_t *pmd, unsigned long addr, > @@ -737,11 +746,8 @@ static void smap_gather_stats(struct vm_area_struct *vma, > } > } > #endif > - > /* mmap_sem is held in m_start */ > walk_page_vma(vma, &smaps_walk); > - if (vma->vm_flags & VM_LOCKED) > - mss->pss_locked += mss->pss; > } > > #define SEQ_PUT_DEC(str, val) \ > -- > 2.20.1.611.gfbb209baf1-goog >