From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.6 required=3.0 tests=BAYES_00, CHARSET_FARAWAY_HEADER,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,PDS_BAD_THREAD_QP_64,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB76DC433DB for ; Thu, 11 Mar 2021 15:14:57 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C752964FA6 for ; Thu, 11 Mar 2021 15:14:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C752964FA6 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=nec.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 2B5F68D02C3; Thu, 11 Mar 2021 10:14:56 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 264878D02B2; Thu, 11 Mar 2021 10:14:56 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0B8638D02C3; Thu, 11 Mar 2021 10:14:56 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0243.hostedemail.com [216.40.44.243]) by kanga.kvack.org (Postfix) with ESMTP id DF9118D02B2 for ; Thu, 11 Mar 2021 10:14:55 -0500 (EST) Received: from smtpin17.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 9BC2F181AEF3E for ; Thu, 11 Mar 2021 15:14:55 +0000 (UTC) X-FDA: 77907940950.17.FD7E852 Received: from JPN01-TY1-obe.outbound.protection.outlook.com (mail-eopbgr1400051.outbound.protection.outlook.com [40.107.140.51]) by imf18.hostedemail.com (Postfix) with ESMTP id BD38F20053CE for ; Thu, 11 Mar 2021 15:14:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mVIOkGrcsOgpdik8xryYIH+yLFjb7DvBa0/IiSL6h0ohQTzgaT+nUyaO6nmGZetTsEXv0wvBel/6cAbZm9/fO4njC0ZD/IHP/kKIFKCTPg8+mfofU2zFfhcOu0D13E9nhmi3tW5g7htcYIjIKNcRZIAKHiX/6VzLLczOPVtQnsKHENa2NHb+rE5ZNLLWeAWrgmXQnz0q4EGfPvSjV6mL/3M6ZBAOMGRjWgg8I0bCCTu92I0XuK/Yf4yw2RbwpTzVWmBiZMYMprW6wp6qXrpuunJ+eO5kg5j5zm9UgZoGPe2vAvsMP4eoMM1Av4SUdzD0RMF82KagKD6Zm3kAd2EABw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8m23tOhJMaXCOu2ykVRbdCbla2QOs5sNimtfCizdbm0=; b=GSzOLZl0jsV7wXIxXLhdQ4fAuX82Wr7Qc9YXPYrgMQHgAqMUS64rFSMKUkVkLHlw1kDXeTs+1qXcQ8Kzz09JcSMg6QggPb84t6TR7wrLxfS8KJiaLNCPjIacmpq2YByA1TLM6mAGrtPRgu2frqDuqDYljaJWN1xZ14A552IH+/JJU/CnGgMWkZBIf00VdYFZRzOA0Rto+lK5b9lypOsR9QmQd36UrUZF/pu/Skq4CpqZ+4q3FnneGH6YT5e/ic7KGEnK9bThucB06CaOPv899GJOofbN0p2qDNtRz79GNN9XmuJzia9bHGdcx8RyqF0dVR2D0/GaqhhGobZs5tiyVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nec.com; dmarc=pass action=none header.from=nec.com; dkim=pass header.d=nec.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nec.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8m23tOhJMaXCOu2ykVRbdCbla2QOs5sNimtfCizdbm0=; b=S6RDVvveMV7DVklANsComFQQysX18WAkDmQDTFGGi77Jxxx7U7bepnoKZHIzt0hKgM7degHm8ClKx9/WrtYbGPg7CEDxgKF1KSy0jYpUmytqGdzn/EdvyGFeGu9ZRLjFqEW2isWCAqOkNGP/bOQGMgOdet8jDmO5CdJDo0pN/eY= Received: from TY1PR01MB1852.jpnprd01.prod.outlook.com (2603:1096:403:8::12) by TYAPR01MB5740.jpnprd01.prod.outlook.com (2603:1096:404:8057::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3912.17; Thu, 11 Mar 2021 15:14:47 +0000 Received: from TY1PR01MB1852.jpnprd01.prod.outlook.com ([fe80::1552:1791:e07c:1f72]) by TY1PR01MB1852.jpnprd01.prod.outlook.com ([fe80::1552:1791:e07c:1f72%7]) with mapi id 15.20.3912.026; Thu, 11 Mar 2021 15:14:47 +0000 From: =?iso-2022-jp?B?SE9SSUdVQ0hJIE5BT1lBKBskQktZOH0hIUQ+TGkbKEIp?= To: Hugh Dickins CC: Naoya Horiguchi , Andrew Morton , Michal Hocko , Oscar Salvador , Tony Luck , Matthew Wilcox , Aneesh Kumar K.V , Jue Wang , Greg Thelen , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" Subject: Re: [PATCH v1] mm, hwpoison: enable error handling on shmem thp Thread-Topic: [PATCH v1] mm, hwpoison: enable error handling on shmem thp Thread-Index: AQHW/qvm2d1kBHUL8ECYyhuZOuiCWqp+kTEAgACEAQA= Date: Thu, 11 Mar 2021 15:14:47 +0000 Message-ID: <20210311151446.GA28650@hori.linux.bs1.fc.nec.co.jp> References: <20210209062128.453814-1-nao.horiguchi@gmail.com> In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: google.com; dkim=none (message not signed) header.d=none;google.com; dmarc=none action=none header.from=nec.com; x-originating-ip: [165.225.110.205] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8b261d25-d30c-41d7-a288-08d8e4a0688b x-ms-traffictypediagnostic: TYAPR01MB5740: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: fJbV5kWUsovEV0bTybVOSvlxpqD9xbwjlvHlQ1WMQWfCOoabxuMPCWxPCtP+dmOWcTk+144w7uuVvBv0SokHIpbDTu0qNT1Yzb5EDAIqtlmszCXFAvY7EqGZo+Cz2btyWgV8da/xei4ALswAkuyIEBriQFl4IID28DgFK9cdPlHL/clTe7CuIEzGPjFYUSNLz/Pl99V6mUTX5NPIAR50dV/uYv4j16aeyKpzcevPvPaxpP7FU69QlwgL/qYq6/Nrr9DxxDgkZiUKECmeAPcSF7QGXkDsI8N0PZeie6jKZZfabIUfZ7wNvUkWj+w6jtAilYgmZlPAJXxXXOxdLs/2UNTxTxQ7Tp2vxj+yAUj1RqnKeKEmRvNpwH664xdJqw/IJOFIOINYmktbm6cNh0yIAnE4VQGXCFqyOtpvFIImL4zpYrZFBI395pREl2U2Iqzi59UcVEzh0S2hApMcsL4nXwnaqk3z+3H6zPrkhELqGFou/5zOP/AzOYAzLTewU2IeqitisvCcFCmgRZZ3bZWEwg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY1PR01MB1852.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(346002)(396003)(136003)(366004)(39850400004)(8676002)(316002)(9686003)(7416002)(6512007)(66556008)(6486002)(83380400001)(2906002)(8936002)(33656002)(186003)(5660300002)(66946007)(26005)(76116006)(86362001)(55236004)(64756008)(66476007)(85182001)(478600001)(54906003)(71200400001)(4326008)(6506007)(1076003)(66446008)(6916009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?iso-2022-jp?B?cTdyL2UvaFc5Nk9mc0huNkNaU0lWQVMyVDRxMEZ5SjZZaE9OOURqU2RE?= =?iso-2022-jp?B?ZHpjV2IvVFdhNkg2Qkl0bzc5TFo3UlA0SkhjdE1IeUJOOWFiSmtvczdk?= =?iso-2022-jp?B?WUp5WXd1eUpweWE1RnMrOWp1QzRuczcyR2ljYUdCOXA4b2Z5WTVEWSs3?= =?iso-2022-jp?B?K2pHbFk1Mlk3Vk1BWU82TmdtM2NiZkxXV3o0Z0prQkxSTG1MWm4rRmxF?= =?iso-2022-jp?B?Q0ZQWHRDUGZiVnhyY0xNRUZZSk9TUXBqMlEzeDB2NXk0WmdnUjhzeCtp?= =?iso-2022-jp?B?QzFwbUdHNHZTWTR1bnVqQ3FWa2tTWFVXUnc4eHQ3RHJ0VldZMVVmNnlJ?= =?iso-2022-jp?B?akk2OHpQZW5Ud1N3RHZtVlFoVjVXaXRtMmd1VkVBdjFrLzMvVlk1b0tJ?= =?iso-2022-jp?B?czNJc2svODkza2RPRERDa3JleTI4RHlUYjhnTEJBVGlWVWtXeEJrZVlI?= =?iso-2022-jp?B?WFNKUjhTMTZpa2ZoMHNRUmJEUkJMZytRSThvMlhzSzFHRi9CN0tBb3I0?= =?iso-2022-jp?B?YWJGRkJNRytXcFNlUXNEYWVrWlhBbnNDWXF0eUVKYXRzMnNaUkRUOWYz?= =?iso-2022-jp?B?a3RmT3BFMUNrYkphRWhjRllZL3dkVWE0M2xERFdqYm1lTytDQ1NxL3lI?= =?iso-2022-jp?B?UDFxUGl1TXBPYnZWZlJzcTlGTm1rclpJUWRBaEd0MW1OU2Zyb3hFQUNH?= =?iso-2022-jp?B?cXlvMWNqeVMvZklNUkhxem80OUlMSVk0cnBrUEJiT2JLcEx4QnpvbnhG?= =?iso-2022-jp?B?N1ZLTzYrMmMzRVFpOFpZM1dVMU4xZjRTS2JjOFZTMFIrQXFmN2VtcDQ5?= =?iso-2022-jp?B?YzA1YUI1OUlrZWpMMUI1SXBRcU8zMm9KbDlSYnFydTF5eUpnSkxoVnJB?= =?iso-2022-jp?B?YzJnai9jVDJwYmdJS05CaThZY3lSQ21JZlhza00zWkZpMGl2Yk9JMnli?= =?iso-2022-jp?B?L3pXUURWOVkzeE9ZSSs3MHFLcm52cmFsaHNWMTZObkM5ZFhldjhWU2gv?= =?iso-2022-jp?B?UXZMZlVnV1ZKNWVrM2hDQk1YRm5mUW50Y3dUODhrNXRkWjNXK2wvcWtw?= =?iso-2022-jp?B?WkxmSkVnODVkNGVrT29CMk1pU3NiTjFwemFrL1owakpVSXpRT0lDaEdl?= =?iso-2022-jp?B?enIzclhwSGZBZzczSy8zY2RySmRGSEVxcGtFaHg5dzR2c2hsWFQ4QXY3?= =?iso-2022-jp?B?TFF5ek9zRElDeUNpbWoydWVmMDlNTHk3d0pmbnhhUGlQTW94cXFuaHFY?= =?iso-2022-jp?B?UkFhb1NzMWZhSW95aHFPaVlxSXdGV3llRWJ1d2ZBak8zMklid2ZBWEdD?= =?iso-2022-jp?B?WTFqdG9DZ3JlMUVoVkZxaGg3ZVdEeCs5TUp4TjFVQ1psL1JyWUJWa1VK?= =?iso-2022-jp?B?WEdzaTBnY1FFNXpRWFcraVdESGRIeGF0VVVMcU9IWTRvUGEvWHUzc0sr?= =?iso-2022-jp?B?WWhWWTMxbkZQc1ZLL3pHZ1g4WUlzZWlEQmMvQ0dVMlA3YVJhTXJObDJo?= =?iso-2022-jp?B?SW84RytBVSt1QjlSRXV2czdLa0JpZlJ0WTBncFJYeFZwLzBUVjE1SkZ5?= =?iso-2022-jp?B?Mk5mM1lIWUVVMExPWGJoa0xPWXlSUE1nSHpIay91SzhOQ1Y2bythSEhw?= =?iso-2022-jp?B?VW12bFIwZkNEYUhJQXg4YVpCVkhWQnlFYVhieEd6K0RFcTRDSUVrRTVW?= =?iso-2022-jp?B?b1FvQkFLcUxQZXBTVzJ6eXRPLzd2WjA1MDBlMGd0VGNGNS9PTHpBZE5G?= =?iso-2022-jp?B?cDFVdHBGUW1UTkVzNjFTQTFBeElLOXFlOUdlTDJ6Q1ZPMzZTNFVhcW1Q?= =?iso-2022-jp?B?ZURrTmJNRXhMQUpZTjU3NHd1VFVMek5yTEZLSmcwYzVEMndhckdLNUZH?= =?iso-2022-jp?B?blZEL2VhUmNBeEZQOGsyaE5lVDVPK3RHSTAwY0FKZDlWcXdURWtHY0Uv?= =?iso-2022-jp?B?bUdxUHpnajdPZXVDVUdVcUozbGVuQT09?= Content-Type: text/plain; charset="iso-2022-jp" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: nec.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TY1PR01MB1852.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b261d25-d30c-41d7-a288-08d8e4a0688b X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Mar 2021 15:14:47.2247 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: e67df547-9d0d-4f4d-9161-51c6ed1f7d11 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: MXDavKvvA2Fvnt53IvbqfWgU7IkSmXxh/v69+I6+YWkDQpwWBDd+u0Ue740V6CMOOt+u+pDLaHLIVSjmdPVUBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB5740 X-Stat-Signature: gksytwhkdx1836mo9dwe3cpsfumxk3ki X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: BD38F20053CE Received-SPF: none (nec.com>: No applicable sender policy available) receiver=imf18; identity=mailfrom; envelope-from=""; helo=JPN01-TY1-obe.outbound.protection.outlook.com; client-ip=40.107.140.51 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1615475693-72252 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Mar 10, 2021 at 11:22:18PM -0800, Hugh Dickins wrote: > On Tue, 9 Feb 2021, Naoya Horiguchi wrote: >=20 > > From: Naoya Horiguchi > >=20 > > Currently hwpoison code checks PageAnon() for thp and refuses to handle > > errors on non-anonymous thps (just for historical reason). We now > > support non-anonymou thp like shmem one, so this patch suggests to enab= le > > to handle shmem thps. Fortunately, we already have can_split_huge_page(= ) > > to check if a give thp is splittable, so this patch relies on it. >=20 > Fortunately? I don't understand. Why call can_split_huge_page() > at all, instead of simply trying split_huge_page() directly? The background of this change was that I've experienced triggering VM_BUG_ON_PAGE() at the beginning of split_huge_page_to_list() in the older kernel (I forgot specific condition of the BUG_ON). I thought that that wa= s caused by race between thp allocation and memory_failure. So I wanted to have some rigid way to confirm that a given thp is splittable. Then I foun= d can_split_huge_page(), which sounds suitable to me because I expected the A= PI to be maintained by thp subsystem. But I rethink that split_huge_page_to_list() seems to have different set of VM_BUG_ON_PAGE()s now, and anyway split_huge_page_to_list() calls can_split_huge_page() internally, so I might have wrongly read the code. > And could it do better than -EBUSY when split_huge_page() fails? Yes it could. >=20 > >=20 > > Signed-off-by: Naoya Horiguchi >=20 > Thanks for trying to add shmem+file THP support, but I think this > does not work as intended - Andrew, if Naoya agrees, please drop from > mmotm for now, the fixup needed will be more than a line or two. I agree to drop it. I need research more to address the following comments. >=20 > I'm not much into memory-failure myself, but Jue discovered that the > SIGBUS never arrives: because split_huge_page() on a shmem or file > THP unmaps all its pmds and ptes, and (unlike with anon) leaves them > unmapped - in normal circumstances, to be faulted back on demand. > So the page_mapped() check in hwpoison_user_mappings() fails, > and the intended SIGBUS is not delivered. Thanks for the information. The split behaves quite differently between for anon thp and for shmem thp. I saw some unexpected behavior in my testing, maybe that's due to the difference. >=20 > (Or, is it acceptable that the SIGBUS is not delivered to those who > have the huge page mapped: should it get delivered later, to anyone > who faults back in the bad 4k?) Later access should report error in page fault, so the worst scenario of consuming corrupted data does not happen, but precautionary signal does not work so it's not acceptable. >=20 > We believe the tokill list has to be set up earlier, before > split_huge_page() is called, then passed in to hwpoison_user_mappings(). >=20 > Sorry, we don't have a proper patch for that right now, but I expect > you can see what needs to be done. But something we found on the way, > we do have a patch for: add_to_kill() uses page_address_in_vma(), but > that has not been used on file THP tails before - fix appended at the > end below, so as not to waste your time on that bit. >=20 Thank you very much, I'll work on top of it. Thanks, Naoya Horiguchi ... >=20 > [PATCH] mm: fix page_address_in_vma() on file THP tails > From: Jue Wang >=20 > Anon THP tails were already supported, but memory-failure now needs to us= e > page_address_in_vma() on file THP tails, which its page->mapping check di= d > not permit: fix it. >=20 > Signed-off-by: Jue Wang > Signed-off-by: Hugh Dickins > --- >=20 > mm/rmap.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) >=20 > --- 5.12-rc2/mm/rmap.c 2021-02-28 16:58:57.950450151 -0800 > +++ linux/mm/rmap.c 2021-03-10 20:29:21.591475177 -0800 > @@ -717,11 +717,11 @@ unsigned long page_address_in_vma(struct > if (!vma->anon_vma || !page__anon_vma || > vma->anon_vma->root !=3D page__anon_vma->root) > return -EFAULT; > - } else if (page->mapping) { > - if (!vma->vm_file || vma->vm_file->f_mapping !=3D page->mapping) > - return -EFAULT; > - } else > + } else if (!vma->vm_file) { > + return -EFAULT; > + } else if (vma->vm_file->f_mapping !=3D compound_head(page)->mapping) { > return -EFAULT; > + } > address =3D __vma_address(page, vma); > if (unlikely(address < vma->vm_start || address >=3D vma->vm_end)) > return -EFAULT; > =