Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3728699imm; Mon, 18 Jun 2018 03:06:02 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJR4oAImIWObrjmUmXB6d1Zm6DvRWZ/ZeU775a3tbllKfBSf2pd5Up7bnhK/dchKH1mkFbs X-Received: by 2002:a63:931c:: with SMTP id b28-v6mr10541869pge.167.1529316362708; Mon, 18 Jun 2018 03:06:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529316362; cv=none; d=google.com; s=arc-20160816; b=kNHrup4TCIFVPNtyezmbNFm4ahK5Apzn7bZtHzQor1PTkhlwuTyUEYQnjSLpywwFkd iZUm/ragtTjE46JS9v1ojtsVWG30IlEGI4+wpMX0p6QzFnZkP9TOKEBZCxJeh3fDoiZE P/jKHUgl3X4xAqa1lrpqEM2b1hveTQA98tpT21PBMO7eyLaubxMQ/vTBucRf7S6BbCnT BDgYzSvzi4mPgiNfWDX63XzceMLjCjkYOj7NptdyuAR1eunc8AvUDHgWqbimVpl1G8aU jnHwPAP6okci1KJWuojnzupwwdq00Hd/eUh25NUh9lhrKIGAAoDp0IEsOXg6UWqoUzQv e5sA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=UV3WVud6jYx9uoDkyM/wohyb+002Lk9H0J+7oioquDY=; b=S/k8c80WoVgGOZ+Hv7S8YRMSwdxbD3IRYsamyVCgtbbc5ZzlGqs4i5sjq9teSjxWta w0i9pErwk+cykOYKh3hlkMvWE2OrBpBEGC28WtWU5GNypxLG8n91DLUU2vz2QpLSydMz HoScoH7SpkFaGOGEhffBQJ5iinoWDoe4e4BgydlyuSVN8jG20HdRnGgqMnORGNyPquBx vzvSXQzCw5n3dY2jV8BbuEtREwT7mPWGs/KeJps1YOGLD93Pe7W6+XhkHq5HSkT/JJx8 5YUUu+iZ+CrcqNwydRK4JjebvOCtOQpnXrL8w+eAoTl7Ixj+1Vw/t32XlBlhXIEFGJjg TLHw== ARC-Authentication-Results: i=1; mx.google.com; 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 d10-v6si12121035pgf.515.2018.06.18.03.05.49; Mon, 18 Jun 2018 03:06:02 -0700 (PDT) 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; 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 S934974AbeFRISB (ORCPT + 99 others); Mon, 18 Jun 2018 04:18:01 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:54364 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934957AbeFRIR4 (ORCPT ); Mon, 18 Jun 2018 04:17:56 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 8D04AC75; Mon, 18 Jun 2018 08:17:55 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Huang, Ying" , Michal Hocko , "Kirill A. Shutemov" , Andrei Vagin , Dan Williams , "Jerome Glisse" , Daniel Colascione , Zi Yan , Naoya Horiguchi , Alexey Dobriyan , Andrew Morton , Linus Torvalds , Sasha Levin Subject: [PATCH 4.16 067/279] mm, pagemap: fix swap offset value for PMD migration entry Date: Mon, 18 Jun 2018 10:10:52 +0200 Message-Id: <20180618080611.597228873@linuxfoundation.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180618080608.851973560@linuxfoundation.org> References: <20180618080608.851973560@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Huang Ying [ Upstream commit 88c28f2469151b031f8cea9b28ed5be1b74a4172 ] The swap offset reported by /proc//pagemap may be not correct for PMD migration entries. If addr passed into pagemap_pmd_range() isn't aligned with PMD start address, the swap offset reported doesn't reflect this. And in the loop to report information of each sub-page, the swap offset isn't increased accordingly as that for PFN. This may happen after opening /proc//pagemap and seeking to a page whose address doesn't align with a PMD start address. I have verified this with a simple test program. BTW: migration swap entries have PFN information, do we need to restrict whether to show them? [akpm@linux-foundation.org: fix typo, per Huang, Ying] Link: http://lkml.kernel.org/r/20180408033737.10897-1-ying.huang@intel.com Signed-off-by: "Huang, Ying" Cc: Michal Hocko Cc: "Kirill A. Shutemov" Cc: Andrei Vagin Cc: Dan Williams Cc: "Jerome Glisse" Cc: Daniel Colascione Cc: Zi Yan Cc: Naoya Horiguchi Cc: Alexey Dobriyan Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- fs/proc/task_mmu.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1329,9 +1329,11 @@ static int pagemap_pmd_range(pmd_t *pmdp #ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION else if (is_swap_pmd(pmd)) { swp_entry_t entry = pmd_to_swp_entry(pmd); + unsigned long offset = swp_offset(entry); + offset += (addr & ~PMD_MASK) >> PAGE_SHIFT; frame = swp_type(entry) | - (swp_offset(entry) << MAX_SWAPFILES_SHIFT); + (offset << MAX_SWAPFILES_SHIFT); flags |= PM_SWAP; if (pmd_swp_soft_dirty(pmd)) flags |= PM_SOFT_DIRTY; @@ -1351,6 +1353,8 @@ static int pagemap_pmd_range(pmd_t *pmdp break; if (pm->show_pfn && (flags & PM_PRESENT)) frame++; + else if (flags & PM_SWAP) + frame += (1 << MAX_SWAPFILES_SHIFT); } spin_unlock(ptl); return err;