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 651E9EB64DD for ; Mon, 17 Jul 2023 02:54:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 89FE16B0072; Sun, 16 Jul 2023 22:54:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 850826B0074; Sun, 16 Jul 2023 22:54:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 73E8C8D0001; Sun, 16 Jul 2023 22:54:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 648066B0072 for ; Sun, 16 Jul 2023 22:54:16 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 260571A02B1 for ; Mon, 17 Jul 2023 02:54:16 +0000 (UTC) X-FDA: 81019584912.25.C659C05 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf29.hostedemail.com (Postfix) with ESMTP id B3DD2120011 for ; Mon, 17 Jul 2023 02:54:13 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=XdXRGKlP; spf=none (imf29.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689562454; a=rsa-sha256; cv=none; b=cqBbdoFx3Z5WNYSPTN8ToZA6ouHmD+O5qm2xSYDl1XCN8KWHEWCkbVe8aYpXCGUx38nJfC cUT/icdQnrjHHxh7adrc6/Yp/QUyMeOVJ/CtLIayHyKXSYU0pNT2YDyXGOgqER1kHg2Fps Tqq1t+KXSN7nZdUj412ySOpcyksF/hI= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=XdXRGKlP; spf=none (imf29.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689562454; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=tGd1yCQhYeeKe+QXwVCH6YaT7yIPkDWSzAJINmGu34o=; b=5wnd2kCB+/zu9CjWiNOELV/0YRMPEYfFZllO8qLHWm1536wC6hWtEY9VjCFuHaK7YQ7KRC De6LllZUWtI38fVrkXX66vUmLJfivqzFh/4CiESFdcP3ZG2LcMWuo9w1YjwwQ+ItOkKHsn xh8d81apQ5Mq28TnfpwVewkiGlKtplY= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=tGd1yCQhYeeKe+QXwVCH6YaT7yIPkDWSzAJINmGu34o=; b=XdXRGKlPhu5Jy1YbEuygfcyIe0 6IIE+h8we/HNR8+llm7e1LsKdtv8RShgxjAfpRGXA6okU1ySCzbJ9FuWcGQCAU2nGCVIjVZNI5ytC zw7+Dzs4fu7gtw6JzmZxOV9BH4N89UwoD6ykd1GZO3C1ZHTUiM+pWUfIiJZjjoUEZwroazbSp1O8d Cn6hJwjjlVkh2K20RmXTlSU2deIGjlJcASBhsk8i1OEfd18rSAAsYJlazvFz+Zp3KKtThFyA4+dhz poRJf3aVA8BOtSS9y6/K3YTED5UlWrbIYFwvoOjZFlVKw6HTbsvaJhRS51uNtg130cOExU6odCqD+ uUBizUiQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qLEN1-003Xi2-JB; Mon, 17 Jul 2023 02:53:55 +0000 Date: Mon, 17 Jul 2023 03:53:55 +0100 From: Matthew Wilcox To: Miaohe Lin Cc: akpm@linux-foundation.org, naoya.horiguchi@nec.com, shy828301@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/4] mm/swapfile: fix wrong swap entry type for hwpoisoned swapcache page Message-ID: References: <20230715031729.2420338-1-linmiaohe@huawei.com> <20230715031729.2420338-2-linmiaohe@huawei.com> <33748ced-5fd3-f3f7-f358-ca016ca8ba36@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <33748ced-5fd3-f3f7-f358-ca016ca8ba36@huawei.com> X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: B3DD2120011 X-Stat-Signature: b1feck48ao58eijmwacz5fp7uq7y3yjf X-Rspam-User: X-HE-Tag: 1689562453-312475 X-HE-Meta: U2FsdGVkX19jtzNRhC5TIlPJ2d+4oIB28Wzj+FMT8LcPAiqcsvRmc0yAzD2NRjNJhkjLXBj39o9DAYatYtaoKM+r1l6/81uL6TGGrs+MtoIOD2looiIm5CHcXKmJ2EB2q075/S4/L849dC/ikDPsCylexVyLI1buqMe+mK7g23Mbrlibs6GKeohWNpoaxXYDyET5oy3IkBvJj9xUliWakRsb7XkjZtTHW055q31Fi0ua/UNT91UkA/v+8uY5W27GfzkJl/144GfCa6TFEg7+Bgp5pXQ99GSL0KCQUDT7SHc50WSh2feiydVx7N7o42rYwRFX9U4qPzqChOH97E+WtxUQNyecSqVMQ9FbZv/0HihGfxsVo3smnNOuJY/+Ty+IANY8QHWTGaiKaq5+vRMllBuN5x60FnBi+nrGloXHg7/ckSwO142NPB5kzrtPUiF5Es5FOy68srq5fkSYSpoTWNs6YzpvecQiYoaw0E7y4D6zIKwCtTQs5oDPt9bl21OL5TmI/rslVG9m3Z1udXHM4Qj0920sz/Dzd5KEzD+2Iy48zlQiU8Zso8TExWx5ZvxDpuHtbdhu+XQ26U2p4yUyytWXighHYziFuqXXZCdkkGjy27ioAFlg2+bIWaHH+NivVKZJcu8yXw2HXd4Fsy0/mqSwj4ZQULQojaVKcGoDVnPKhedJJldKauosBtkSqyTRWrdmESyhm3jGKCZD9iPpJ+HIKqA5xwcCtJUU6YfBW9oFlgKQLBlI5WV5Bfa/hKtnmk6wNcTYn5N3oG3LawPM18yUlNJZVuzZSVE5ETJcUsLKk2u8SYzdtnGIXzu6Gh7J0lZ3wpZdc3FyYAVeSJ7HaVtUNt92GLE4JtC7/eN191bKvwuMCgdBkdxl/JCrtzyZ2dGrHeMv41wRhZZNi3Hp7o6Zb6Rwm+EUs5SeOYXdf7E0h1JTDShxL+rz38IW/iRs7REPXUJicDnt51FFwqp 6IxTeSUu GfEP036cKBJALkey16j/AvQeXxacHD4q/XZBRm6xKjMV+VQLVYpoiAhwBqkMmbjyROii2lyL/jnRpYHO3XA0z7MY3ztPQkPEo/LzGIoJHAUotL0qnHizk1YrrbaVg9wZQN2pPLz/iprSl1Yk= 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 Mon, Jul 17, 2023 at 10:33:14AM +0800, Miaohe Lin wrote: > 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? Ah! So we don't even get to calling copy_mc_to_kernel(). That seems like a bug in ksm_might_need_to_copy(), don't you think? Maybe this would be a better fix: + if (PageHWPoison(page)) + return ERR_PTR(-EHWPOISON); if (!PageUptodate(page)) return page;