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 0A18AC67861 for ; Mon, 8 Apr 2024 15:36:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 50EEB6B007B; Mon, 8 Apr 2024 11:36:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4BE466B0082; Mon, 8 Apr 2024 11:36:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3AC716B0085; Mon, 8 Apr 2024 11:36:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 1C3B76B007B for ; Mon, 8 Apr 2024 11:36:18 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 9C3D61204B3 for ; Mon, 8 Apr 2024 15:36:17 +0000 (UTC) X-FDA: 81986765994.25.20A16DF Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf11.hostedemail.com (Postfix) with ESMTP id 3096F40019 for ; Mon, 8 Apr 2024 15:36:14 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=DLNnnlFO; spf=none (imf11.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=1712590576; 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=v3dYjciqCb0UDN8JYQgddqfpfts1LE4q8nzGbtf7cvU=; b=K413CSpNQlJAlrFaLWw9131H5N7IHo+fn6VAq9eXmw2O1Y1/mBvOcJchfxUZVwz4ye7QhR 8uJ/eLQ1ioPdgNxX40pT+AGPvICUpM84dRFKYaKj8ErEwPXtKw5PsDZzaX1rrpW2p0T+oB 9FBlsmhmvc3exhOBTUbQh2hxfhoNZnA= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=DLNnnlFO; spf=none (imf11.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=1712590576; a=rsa-sha256; cv=none; b=RldCRREbMJTapAmX4XHj7YiWraMydXt7AJy+l3hKpF2ukM0vYvkON9JGXIwo/ySTgvi+TB SZJz3ZuaGFcV+QlqzQWwDYQz/stfBy5NthdyhEJCAUxSrkHlNenOYNbKajH86+tI8Z6v0O Mlq1dtZey6I80MOOC6XDjE8lKPFfUcc= 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=v3dYjciqCb0UDN8JYQgddqfpfts1LE4q8nzGbtf7cvU=; b=DLNnnlFOvzAq8EW9Eo4Enmev5j JWSqNRmBKLwdMuVXKd83utrxEBX61qEPYEVJdwxhKjdQKs7Ad4yGWUaT9PSwUVWvHuN8tw8Uo3JEl tdHn4xh/+HcaldTe7f/8DwNZv2eGFZTJjIj0La8aiL01Zz7GNJf2dGP6xke/lLn9/JkH0SoEPzUWk HxLP/kaGtlcLiDaeX06xaj1j+SP+aRgENWjZkbEvcFLb1JX9tMGS5HBx0YF0BlLUm3yseuxedyBR/ Fn09/HrjNinLDFZRkhgV2+yDnR0tlxDcKTerqlEh2GYknLiziZngE2n8s2MranHv+ytSbl/Egan75 RpPBr1iw==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rtr2X-0000000070m-3aDm; Mon, 08 Apr 2024 15:36:09 +0000 Date: Mon, 8 Apr 2024 16:36:09 +0100 From: Matthew Wilcox To: Miaohe Lin Cc: linux-mm@kvack.org, Naoya Horiguchi , Andrew Morton Subject: Re: [PATCH 4/8] mm/memory-failure: Convert shake_page() to shake_folio() Message-ID: References: <20240229212036.2160900-1-willy@infradead.org> <20240229212036.2160900-5-willy@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 3096F40019 X-Rspam-User: X-Stat-Signature: b7gorkaaw9fqp5ewr4jamn7k5sn1g6kq X-Rspamd-Server: rspam01 X-HE-Tag: 1712590574-4288 X-HE-Meta: U2FsdGVkX19pw2Y1h6xewPEEZE4LM+I5uL84nASLg99YkaUYch/UT90sQES2EiZ+51HhkvtIVZpcac5M9pYKWkXJYNDvZ7OH46V6ttOlBxzYCdqMbHwDM14Y5KtDC6sAVdzSuHZedUV6DAsr4+zDR1ZaC829IwlGd7AWjkymWPLVSppN7puyQcG6/t3SHnYL7FQ4PUW/2TJSvopzfdZrHNKzSrMS3TECt5jgk//iJ1x3aRo+/Ffsp1cf+M8+/RGnFT9K+DmZ/7A3n30u601BHXHFiy+PYAcdKp7e6M+ggRdlAeLhDW3LXz30PfG0NsXAZzmzyQlz5fu2Owd8jTuk1OLFpn+70W6fjKlxial7uw1mpfweQoUDLgvl9KUZd4TW0BJe/LTAmSU8CkVSHyY9b+6D/ehxR0cFdE5Mi6O0eYHECMX1tuMMe89VjxMcvcWIx7dGfU/km1inoBZ5tK7bcpII1//aku50ZHKm0V1YwUg/NG0EL9ZgXLLbim6CapfhQ8A8q+6SpiZKjuEOMryxN1sK5VkW0SCw1GY8PX8E7ZPv5BDjS4eR6aQB36wixhcacxpJLZCGU2EYvaI4yBr+yaJ09MvOcihTMiqFBqSfgXfXQerQ2RnzusNpnIInMMIUTzurnVZYO9lJSFL9WMowp8BOLxS7ij4YHOECTJTEdbwBBNubEU0f0d0aicFE5ES54MNbH2LxO9tLSssCQ3bGuTj94ogIMPkPhisJWNZM+PVOlIeEKxAGASGZgrjoB7w8N2bUmx03tmFD7fvXKmYx+NAomMKqz6VnsEVhRIjxJm/D+/70LKlaQ/wSXaHQOmQXfsvGpjPKdYHtZc1uXZYYpR/K3qkYw42YzCE+t8kn9vYznX1jeUKRWJu2+RXAvnm66a8mxJdjNTJkirxdlVj3KCTLEyvO4ig+Vyxzz8kbhnN9U1+vGLSUmFlSVlm3qndRkXRLWCnfc5dXolNmBOM zjlSQQV/ P6zLtSBdHHFYm9RPxkAcfCj+Su2/tT+bYKRzS3/ZCoLO50pW4FiSBJW+kQ9VhvuBrPc1F1IpBFyXA9eoFvbNi3JuawylK2aZd8QUqLKj2E2ylBkp9wwSC/27PNiWVd/IvXAoaKsw7cFUZU36HYxRhHJobhbl0Gq1xL8bRpx+Z5AGNnVw2Ecxe1Yu7Fw== 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: List-Subscribe: List-Unsubscribe: On Wed, Mar 06, 2024 at 05:31:19PM +0800, Miaohe Lin wrote: > > -void shake_page(struct page *p) > > +void shake_folio(struct folio *folio) > > It might not be a good idea to convert shake_page() into shake_folio(). shake_page() can > be called without holding page refcnt. So the below race could happen: > > hwpoison_inject > folio = page_folio(p); --> assume p is 4k page [1] > shake_folio(folio) > folio_test_slab(folio) > test_bit(PG_slab, folio_flags(folio, FOLIO_PF_NO_TAIL) [2] > VM_BUG_ON_PGFLAGS(PageTail(page), page) in folio_flags > > Between [1] and [2], page can become PageTail of a THP. So the VM_BUG_ON_PGFLAGS will trigger. > Or am I miss something? No, you're not missing anything. This race can happen. However, I've removed the VM_BUG_ON for folio_test_slab() with "mm: free up PG_slab". Now it goes through: static inline bool PageSlab(const struct page *page) { return folio_test_slab(page_folio(page)); } static __always_inline bool folio_test_##fname(const struct folio *folio)\ { \ return folio_test_type(folio, PG_##lname); \ } \ #define folio_test_type(folio, flag) \ ((folio->page.page_type & (PAGE_TYPE_BASE | flag)) == PAGE_TYPE_BASE) which has no assertion that the folio is not a tail page. Maybe it should, but until then we'll silently get the wrong result ;-)