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 2E9C1C4345F for ; Fri, 26 Apr 2024 17:34:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 753896B0083; Fri, 26 Apr 2024 13:34:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 704236B0089; Fri, 26 Apr 2024 13:34:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5F1C76B008A; Fri, 26 Apr 2024 13:34:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 40D766B0089 for ; Fri, 26 Apr 2024 13:34:44 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id F04791A0A02 for ; Fri, 26 Apr 2024 17:34:43 +0000 (UTC) X-FDA: 82052382846.08.3C8ABF5 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf10.hostedemail.com (Postfix) with ESMTP id CFB78C0015 for ; Fri, 26 Apr 2024 17:34:41 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=hn9Z4gVI; spf=none (imf10.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=1714152882; a=rsa-sha256; cv=none; b=ehSbPLZ+G8gr3bk1NpsbkgabvVs8W8l1P7QHoOq1ZRWh2bfB5aFRn1K3kzt+LxWIbdpY5F vBsIE4SsGkUMK0zOoxfpgUhMDJFX122tz5mfskuneE/ZIAWFqtcqglZg6smsgrn7MBkI5c 3ZzrhunqJaYtfqM3csRdOA6TpKg8/E4= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=hn9Z4gVI; spf=none (imf10.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=1714152882; 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=UUvYm71fjkEqtSxLHnGtOJW9nzuNwvObOROt5Vq5kDE=; b=0ppSDA7G0hyX4GMI/J5rZsRmRbq8XoVMukzJhPjGGy4eCLPg72/DOfb0bPkrtM41BG47F7 MtX7T+XJ4IbqlMiqcOVL0ydb16uSJQRqm2azeGioJOtWs99/WP/7bL8lt8S0Wj50Jz6OR0 6URBkTElxvm2mEKUxAR0UszfzVx629g= 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=UUvYm71fjkEqtSxLHnGtOJW9nzuNwvObOROt5Vq5kDE=; b=hn9Z4gVIqvr6bBM9IEZqJ0TI8o 48x4aZu0SVYcFUsy6Cxy8stS0svKwc8tqPOO+gti0aEyxKfYg/AIm2lxzKawlKfXchIMWCEcUhV1P 8yFxyH+5DuHxjXsLZ9xZ/mmxIe5Am9vCLUJE1G4I4A+BRlDiYf/kYJt5+lD156c4raXEKREk0Sm8b Nu7D1dEbwoxbSzutsI5wCUCB6jOLZganYUzNajBnEVvGMHkNn/7duLouwqKgXHFtbTx51M81kYs5J crh6KuZ7D00yUEbzDbGWLS4WDkZ2bKp8Pp0oZbAdCyTzdrUN3W7eC66kzft0xiy4tSO7DVCJenCDk IatHAwYg==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0PT2-00000005gwQ-3NQu; Fri, 26 Apr 2024 17:34:36 +0000 Date: Fri, 26 Apr 2024 18:34:36 +0100 From: Matthew Wilcox To: Sidhartha Kumar Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, linmiaohe@huawei.com, jane.chu@oracle.com, nao.horiguchi@gmail.com, osalvador@suse.de Subject: Re: [PATCH] mm/memory-failure: remove shake_page() Message-ID: References: <20240426171511.122887-1-sidhartha.kumar@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240426171511.122887-1-sidhartha.kumar@oracle.com> X-Stat-Signature: s7upm5fdwmynke1feoxgxqzghmnkjirr X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: CFB78C0015 X-HE-Tag: 1714152881-836681 X-HE-Meta: U2FsdGVkX1/Tpwx4IiLdamGVU4t59QZ3AbpoXehkVXPhxawkhKlq8/ZDC7YNy515bv9AjppZxYbX6N8y5KmeIqkuf8wuFKXcE0dgGzyW4nvqxQFUiovAW0yR4y1IaT6FnwR7EjUk8kzYo3reDeVXhZI8Bes82Xyw5HfaVgs/dWW1m7M5hY+OOtm1f5rGRNANUoTlaMvIJjSWo7y9QK2ewcd66lDRduLW6LKyD3hpmw2qWpyQcDENvSl7GoGlihHI3rYm/KpDYwBq84+2DK9wQwBmSQzhAY9Qzx1gBM/4gfD9M84ViyHhnJLMXh7P/+s6d0RHH9WO3ctuOWifSaNixO/pDQkbWUqwktRTf2RqHKdpTqT4gnJ56Bs+vuW/OqLTnQDavxmOfqBKCE6bDK4eoASye/qYDCIoLOMpXsa5CLhP2oFdbSTfXuO9maZA6/sYC1ZKcaY9l7vrJq0GBIYEXhgt9/8X7hMLqkrhXzCYvF7U+i3cohaLc/1QoFTMZ9u2eTZt5FEFO4hWjorarN0zA5R2GTJqFQaHVR9gxsFyVFV0xji//adep3LXmawjoHClShbfgzutLp7k1vpzGaWmlEEZyXXDS/9VCwGSraa55gxdRfKyZSor9uBMiZzbLv2klfPT6nOol0iQijSi8bmz4c4BmFeXK/ncTrvZIO3Gr770Mql5IcohdwGimbRpNaweeB2QZMtiPNoIHMxiDjT0+fBzBO4PHnN8PhcLsmgWQGwg6bDCLJfjN2VWmRYVjF9PmY4OwfqaDhdhX+ENQ2YOvB6CRj87q8nl1No3PLF/I4q6kkLCnAInEfn+MYMNVum6es9XKTGUJn9CzWIO0FEQh6ejX0pc3KHgDFueUxEYZELcMDiEpgRyBDv7B8u4Q8DPMZk2H7D074j8XnBaltJ2mEvXQF1GOKJavd2b5ohVWvqiRXj+osMXA6lWNXHg26Ft4DJxX8AuXTUdmZnkOL1 rOQRqghG sfMpPfIij6iSadUXanfEtTAsJzeAfokqVneLNclSlVQONR3fxD/+n4YlKYgVAUp7vK3d49Vz55uYOSowA/VyxWdqWNaJACqf5/jSHMws5cRPWz0kP/4CcnWxMrrVK+07YpQkhjfvVryQxnEML4XofXb4kNj3zYjzXbSsYRI9l9/EHGWAfdNgRiNFIrukEgy+M4LGulLJNYod9HJa37EjdVcR+K+LjlDIx4HhZCMiorYVH49Miolm+x/UOYdvXOoVGxsGcFt2LmLM9JOOc/o7Ysqj7/w== 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 Fri, Apr 26, 2024 at 10:15:11AM -0700, Sidhartha Kumar wrote: > Use a folio in get_any_page() to save 5 calls to compound head and > convert the last user of shake_page() to shake_folio(). This allows us > to remove the shake_page() definition. So I didn't do this before because I wasn't convinced it was safe. We don't have a refcount on the folio, so the page might no longer be part of this folio by the time we get the refcount on the folio. I'd really like to see some argumentation for why this is safe. > Signed-off-by: Sidhartha Kumar > --- > mm/memory-failure.c | 20 ++++++++------------ > 1 file changed, 8 insertions(+), 12 deletions(-) > > diff --git a/mm/memory-failure.c b/mm/memory-failure.c > index 16ada4fb02b79..273f6fef29f25 100644 > --- a/mm/memory-failure.c > +++ b/mm/memory-failure.c > @@ -385,11 +385,6 @@ void shake_folio(struct folio *folio) > } > EXPORT_SYMBOL_GPL(shake_folio); > > -static void shake_page(struct page *page) > -{ > - shake_folio(page_folio(page)); > -} > - > static unsigned long dev_pagemap_mapping_shift(struct vm_area_struct *vma, > unsigned long address) > { > @@ -1433,6 +1428,7 @@ static int get_any_page(struct page *p, unsigned long flags) > { > int ret = 0, pass = 0; > bool count_increased = false; > + struct folio *folio = page_folio(p); > > if (flags & MF_COUNT_INCREASED) > count_increased = true; > @@ -1446,7 +1442,7 @@ static int get_any_page(struct page *p, unsigned long flags) > if (pass++ < 3) > goto try_again; > ret = -EBUSY; > - } else if (!PageHuge(p) && !is_free_buddy_page(p)) { > + } else if (!folio_test_hugetlb(folio) && !is_free_buddy_page(p)) { > /* We raced with put_page, retry. */ > if (pass++ < 3) > goto try_again; > @@ -1459,7 +1455,7 @@ static int get_any_page(struct page *p, unsigned long flags) > * page, retry. > */ > if (pass++ < 3) { > - shake_page(p); > + shake_folio(folio); > goto try_again; > } > ret = -EIO; > @@ -1467,7 +1463,7 @@ static int get_any_page(struct page *p, unsigned long flags) > } > } > > - if (PageHuge(p) || HWPoisonHandlable(p, flags)) { > + if (folio_test_hugetlb(folio) || HWPoisonHandlable(p, flags)) { > ret = 1; > } else { > /* > @@ -1475,12 +1471,12 @@ static int get_any_page(struct page *p, unsigned long flags) > * it into something we can handle. > */ > if (pass++ < 3) { > - put_page(p); > - shake_page(p); > + folio_put(folio); > + shake_folio(folio); > count_increased = false; > goto try_again; > } > - put_page(p); > + folio_put(folio); > ret = -EIO; > } > out: > @@ -1643,7 +1639,7 @@ static bool hwpoison_user_mappings(struct folio *folio, struct page *p, > > /* > * try_to_unmap() might put mlocked page in lru cache, so call > - * shake_page() again to ensure that it's flushed. > + * shake_folio() again to ensure that it's flushed. > */ > if (mlocked) > shake_folio(folio); > -- > 2.44.0 >