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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1CB42EB64DD for ; Mon, 17 Jul 2023 02:33:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 80BC88D0001; Sun, 16 Jul 2023 22:33:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7BBFA6B0074; Sun, 16 Jul 2023 22:33:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6D1318D0001; Sun, 16 Jul 2023 22:33:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 5C7556B0072 for ; Sun, 16 Jul 2023 22:33:23 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 204DE1402B5 for ; Mon, 17 Jul 2023 02:33:23 +0000 (UTC) X-FDA: 81019532286.05.D888D5A Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by imf11.hostedemail.com (Postfix) with ESMTP id D714A40007 for ; Mon, 17 Jul 2023 02:33:19 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of linmiaohe@huawei.com designates 45.249.212.189 as permitted sender) smtp.mailfrom=linmiaohe@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689561201; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z/j2MTkY6C/uhsuhCh8P7oC4TBhjbKiaPpvvhX7oqXA=; b=ZJzmgmfzVBJfHWFdREGJfZnkPsevtIZDUTAM1cTxB/b0YhpSXVYDMNXgPy39dTq/VrariY K7jsOt+tcsWdNqcxzlg5IXHzSvx4lQEsrtFbCqyNFXEEE6U8ZUb4HMnLDOpd4PQHLn6UT3 OUrYGoQN74sIRd6YpYFAzj07rjK1K8s= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of linmiaohe@huawei.com designates 45.249.212.189 as permitted sender) smtp.mailfrom=linmiaohe@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689561201; a=rsa-sha256; cv=none; b=S6HGQBpi66ObXdjhh9BRvU02Yz3jMKJ+4fYy5dzt1E6w8EdgqsqVj1DS5sA+1Ds61Sw8ri AogA9AXoEfBQvaBDKmf+SIUEAjMdBn31obh5XpMpvHfjVCz1BDtbUVn1k7JwFnzrUGcE4x NEFNb6HezCZ4AiAbfHI9Isu3QbAUXmU= Received: from canpemm500002.china.huawei.com (unknown [172.30.72.56]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4R45ff19TzzLnm8; Mon, 17 Jul 2023 10:30:50 +0800 (CST) Received: from [10.174.151.185] (10.174.151.185) by canpemm500002.china.huawei.com (7.192.104.244) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 17 Jul 2023 10:33:14 +0800 Subject: Re: [PATCH 1/4] mm/swapfile: fix wrong swap entry type for hwpoisoned swapcache page To: Matthew Wilcox CC: , , , , References: <20230715031729.2420338-1-linmiaohe@huawei.com> <20230715031729.2420338-2-linmiaohe@huawei.com> From: Miaohe Lin Message-ID: <33748ced-5fd3-f3f7-f358-ca016ca8ba36@huawei.com> Date: Mon, 17 Jul 2023 10:33:14 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.151.185] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To canpemm500002.china.huawei.com (7.192.104.244) X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: D714A40007 X-Rspam-User: X-Stat-Signature: tubawb5jzkb9ofwcohmjdwftxxc1u7rc X-Rspamd-Server: rspam01 X-HE-Tag: 1689561199-214407 X-HE-Meta: U2FsdGVkX1/2ez3zmBKo/mD41YaCWwqMCcLk3OmFPJYzk7QNLNz15epoGqCO2OYU/uU7yRrL63tNsljFMqLxIfHal5dcO3sZrLxTes3Wn2y8AGRQ6UwGvow8q3eB2DHSsIzT1RkbRIXjKSDB7kdVLWPyi+LZa/lI5UZPUhG6Qx/sJiae+K9w+JeEdXJpNOVCZYj7XltcxVbpYESdyQTGeRQD66inrbLrx8iTzeMfmDh8p35ltcagUjAnnTqr7sNg0r3x4dvFDnsZfnvSwmLYZo3d+FCv5ByW905dY9MG6CYW/utRfW/Bzp2/HlO3LC+uqeK9lq4Ty92Q5OiH1uLlIogrlk7Ck39JyiBHwC4CZYrfeRIXXTgn3F7iBl01eSBbuHu2MXOlVED7ABVIgC8e7kS+WIk0jvCUCe0EWVE3A42EraP666qBZAeGItWV7Qn1iMUFeMdBNwvE1sMd0mFq1abCSHY4NdPYnwiGbtgmO4f89gOkSFfshDvI+cnCeBvDWqsbf1YQDjrCKB8pjIWpgRJmV0in86BOad9fmHxNPcrCqwtZRgQLMbkYkvR9PMawTGgeZ5492DBRiZKDJZleimUOCaFGTaOwZc+LVCsIO5lvCH5MehuIwo1R3nbwrLy9mdbO9LNe3XYfdA9rOa+saEfhxWfhfhkWCwH1zurWLrOk6JQp+t6s0+CcyBp5nOBtXPYyYTFvUTZqQk5pQD3qTjllGxvsLjYjUWMwUcMpxOMPLzfrH3Bqb6Kan36O5BacxxWnJTua/yrenfNExSfc3SjYhb86FxYIUnJ7whLCWpdfT+2ZI0xODBTGN2RsBJhqWAy3bIS0l6+Q3e71uhIl4RGTDb6+l1jIVW+Wvr+j9GkjCx0ayEApzn1H+6l1hsJ38iADvlwzE5X/cAsxHkI7pRFzNJMKs6JFfwa2JAGU6sxoCZGE3Tl++RlzBgbwy6e/gjsxom29AqaIGKi/7+B iQxscaFC SOEoPrgFLDKVdeqPKD7/Ewng6/yPVa/6lL3W1zHMlLiAHE5/02SoLoF3MGS77FUPVYPgyzR5zUeXNWt8HrWZhmhdZrTTVRePBI8I4w2CxwSwZ3zR6qGcHyaacO/ADptjBu8Nt 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 2023/7/15 11:50, Matthew Wilcox wrote: > On Sat, Jul 15, 2023 at 11:17:26AM +0800, Miaohe Lin wrote: >> Hwpoisoned dirty swap cache page is kept in the swap cache and there's >> simple interception code in do_swap_page() to catch it. But when trying >> to swapoff, unuse_pte() will wrongly install a general sense of "future >> accesses are invalid" swap entry for hwpoisoned swap cache page due to >> unaware of such type of page. The user will receive SIGBUS signal without >> expected BUS_MCEERR_AR payload. > > Have you observed this, or do you just think it's true? > >> +++ b/mm/swapfile.c >> @@ -1767,7 +1767,8 @@ static int unuse_pte(struct vm_area_struct *vma, pmd_t *pmd, >> swp_entry_t swp_entry; >> >> dec_mm_counter(vma->vm_mm, MM_SWAPENTS); >> - if (hwposioned) { >> + /* Hwpoisoned swapcache page is also !PageUptodate. */ >> + if (hwposioned || PageHWPoison(page)) { > > This line makes no sense to me. How do we get here with PageHWPoison() > being true and hwposioned being false? hwposioned will be true iff ksm_might_need_to_copy returns -EHWPOISON. And there's PageUptodate check in ksm_might_need_to_copy before we can return -EHWPOISON: ksm_might_need_to_copy if (!PageUptodate(page)) return page; /* let do_swap_page report the error */ ^^^ Will return here because hwpoisoned swapcache page is !PageUptodate(cleared via me_swapcache_dirty()). Or am I miss something? Thanks.