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 D5CA3EE49B2 for ; Wed, 23 Aug 2023 13:16:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 611A028005C; Wed, 23 Aug 2023 09:16:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5C14A900035; Wed, 23 Aug 2023 09:16:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4B17A28005C; Wed, 23 Aug 2023 09:16:30 -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 360A0900035 for ; Wed, 23 Aug 2023 09:16:30 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 15D1F160113 for ; Wed, 23 Aug 2023 13:16:30 +0000 (UTC) X-FDA: 81155418540.30.2DD7EE5 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf02.hostedemail.com (Postfix) with ESMTP id 20F888002A for ; Wed, 23 Aug 2023 13:16:27 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=LtCohTGf; spf=pass (imf02.hostedemail.com: domain of chrisl@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chrisl@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692796588; 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:dkim-signature; bh=+iDa5UXXwSmNBPX2J5lqqyBf44GI51bU5t010Y4ZJeA=; b=Rkx1Jepwy3LUdjJrJhBLC2rNYPHSvw2ElIi3t47XdA4XAyJu3Opww0pUK8Ir/CXdkVfVke Yo+o8OrEJSmBKZy3TeednUFaaOCF7kuOtM7aB+GraDV0mzpGGlNtnCY2u6KBZsDVvfdI9+ ma9CPn04Gx3WzVilSM48NsVDrA88IMk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692796588; a=rsa-sha256; cv=none; b=a2l85VW125QYCdA6ufI2kPJcah5fl+Ut4sP52nJhaCUYTTaQp+OVqWNU+pexDrl29W26uH V7wC22TSPa7y6zp67RZTEkwZi0onNhYUsW0gOmL/QoOM4V7NyWaYFbE2X9zY1l2Uaf/rwJ NoT+PPEcbB8ESiX4a7U/UPPJ0gGBiWE= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=LtCohTGf; spf=pass (imf02.hostedemail.com: domain of chrisl@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chrisl@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 1908D66216 for ; Wed, 23 Aug 2023 13:16:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5720EC4339A for ; Wed, 23 Aug 2023 13:16:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1692796586; bh=LY55oZNdP7mKklt0DeiFkFhtYAWE0Vjdl+Ou8X0WOPA=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=LtCohTGfoeV0O3p0dOlO4XVzoIt3Un0e5PJt4U0FFXiVkGfzBRSBOlWQ21ra2YBtj VgL2/eQr71IPf1S0IC91E8SctoeE5AKUlzXuiszZz3xV7ARh2FrtAmG4JPRZD+hlpg BcC71+j5U8vCJ2bASmGD2dUX2Mf5WgpKb/ze+nk+ys6bT2mrcSHk+pw06nXShjMU/o Tezc4tJLi+8Aq/STlgdTjtYPESxBpOSEmc7XF3WpQTpN8dmq2cNoU2LQN8yG4l1fVV ETJRlNEgff0g8bJCy6C4X3IXASPpVZUTkjThHpN5aW33n3zs9pkTLyIMePPwMnU9U1 jx307/Ug6gLOw== Received: by mail-oa1-f50.google.com with SMTP id 586e51a60fabf-1c0fcbf7ae4so4102792fac.0 for ; Wed, 23 Aug 2023 06:16:26 -0700 (PDT) X-Gm-Message-State: AOJu0YxV6SVCCsKLH8kvqoNUsX2BekDyc2XifEoFvaHwtgdPyIr5L6r5 0Gm9xj6I8My8LBnnaEzZsMoBdTKcNTDIeYPGrdrzQw== X-Google-Smtp-Source: AGHT+IEH/MFDGTdjzCp5cToFtz0nvm+wCENTVIj4wS3D2DqrHyjrwPwLxx76itDUydqBYI/tgpZ2989odg49RKFYrNk= X-Received: by 2002:a05:6870:c154:b0:1bf:1346:63e with SMTP id g20-20020a056870c15400b001bf1346063emr16151624oad.49.1692796585421; Wed, 23 Aug 2023 06:16:25 -0700 (PDT) MIME-Version: 1.0 References: <20230821160849.531668-1-david@redhat.com> <20230821160849.531668-5-david@redhat.com> In-Reply-To: <20230821160849.531668-5-david@redhat.com> From: Chris Li Date: Wed, 23 Aug 2023 06:16:13 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH mm-unstable v1 4/4] mm/huge_memory: work on folio->swap instead of page->private when splitting folio To: David Hildenbrand Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, Andrew Morton , Matthew Wilcox , Peter Xu , Catalin Marinas , Will Deacon , Hugh Dickins , Seth Jennings , Dan Streetman , Vitaly Wool Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 20F888002A X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: xxc9eothfd46fkupqni5zqg1by79hr4z X-HE-Tag: 1692796587-913784 X-HE-Meta: U2FsdGVkX1+e/pU4E8xxqN0/UWSRwfhkrHLT7qUN9542m7VaRJIoW8vepXMQfSWog1NbSKGkfGRZIQZTiukcFIYHM1lmgRxxfXLsqsFqimCDlcU7LvfGaAc8BxUOQWqLy2AsvjxnAghBDb8Zikw8Cb7jpIeWqNXrL2q9JYzRBG18p8a4Grf2p1I05ejMatvg1OwkCSitiVDCaeVPwNT3XqBhJOgKdRAmKIMqFeQnOzIhZtW6npyTZ1w1QfjmK6V4DJeBVxbEMk7oVNYqMSzN/Ya0k3Nc3eYMEbHpKq9xakIJqkQb3Yb7+gQNS5tBIUMQ0qih1zO8MQQrMV8WhvqMBb9dmNrogvHtV+DgllOmnwjOcD0glVNQLzb//nmuh/9slGysFR0UO24zf8AB4YHIOe5BY0tdRFWDV3titleGWQQYZGvjNzgq+V+gvRdIdGACeb6IpjvoX7g9R6bF51DaAQla4752npD5+EmtNZ9431iCxbZi4HopAGXjEyHl07FGqis3TCGUxyHUrG1KnObv1XM1aCuxYcospaulN7nfeTcWEHIY0TWMZFjDAhoGG3gcx6yqJyWWHAQTFZL4eJJHRKAZIHp0cGKzgjfnRyBzadCGVfuhu2LPgMfm6ngWuBWPnRs4L26EkHPb3UUA3u+al+YQcyG+rjFm6W3G1hWZ8qDA2q2gzOy9wO5b/hR0QKM4JbpdWVPezauLT/8vCMhRL3qh3VFdzmc/HAyDSfL0KoRZGdx8hdU/m60PmEV0zf6cVD03pl2bJZikFLQMqEzi0jwBlkCI8OKUwokyEuUKpN+EuNTmXzKvbqCng9lnB8TovkX82xxOtBN993wIbL9dlD45MM1XFJjdR5A0Ufo23U1WPhrGeYMcAxquggC/LwgyGX6Ww9emZrtbBlz9mi1kz4sowHtfxlssCfR++kncJ2ljEIZqWp6MTsldfn8W59jva/fsjB9/0qn+FcrLQU8 f9UtcZjv zS3Uczu06d/K7aGZkL5rNqDslCR0jxIQ/2ydJhna/RMbCHcJKu0ksnGBvy1ZpPLOJBvng/e1NO49RdUtCLo2f7uEG9PLVHQ3oCX50a2I4pym+nXasgnh8I4liKK1SRAL84M5ZSQcwldCpNuWDMniJgS3GaKpQIja4HL+VJDiibacPZnvWlyp/yRJYPS5IEiDXjESskTOa3+0tryYC3JT46L+HHNm1L5YLszsiHx2xbCS4KxPp1xwZOgDiHfMZX3KLO70QBlFK9H92VJLRzjj8RTcBL25wmWe8OiBsCV4HIS/5gwMaLiirQzXLqogvjF172+aYx532pojDEaeclos6Ak81BnfHN2h1VY/C8V9oOHsUlfRoZ7+Cz37INE625tGi1D9aGRcE2NbaHVBJ5lad4EnQVkTb4UqMZ2JrPC4ymfbMLC/Q+vDl88HNlvhXjcW4EuIo 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: Hi David, Reviewed-by: Chris Li Chris Chris On Mon, Aug 21, 2023 at 9:09=E2=80=AFAM David Hildenbrand wrote: > > Let's work on folio->swap instead. While at it, use folio_test_anon() and > folio_test_swapcache() -- the original folio remains valid even after > splitting (but is then an order-0 folio). > > We can probably convert a lot more to folios in that code, let's focus > on folio->swap handling only for now. > > Signed-off-by: David Hildenbrand > --- > mm/huge_memory.c | 29 +++++++++++++++-------------- > 1 file changed, 15 insertions(+), 14 deletions(-) > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index c04702ae71d2..4465915711c3 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -2401,10 +2401,16 @@ static void lru_add_page_tail(struct page *head, = struct page *tail, > } > } > > -static void __split_huge_page_tail(struct page *head, int tail, > +static void __split_huge_page_tail(struct folio *folio, int tail, > struct lruvec *lruvec, struct list_head *list) > { > + struct page *head =3D &folio->page; > struct page *page_tail =3D head + tail; > + /* > + * Careful: new_folio is not a "real" folio before we cleared Pag= eTail. > + * Don't pass it around before clear_compound_head(). > + */ > + struct folio *new_folio =3D (struct folio *)page_tail; > > VM_BUG_ON_PAGE(atomic_read(&page_tail->_mapcount) !=3D -1, page_t= ail); > > @@ -2453,8 +2459,8 @@ static void __split_huge_page_tail(struct page *hea= d, int tail, > VM_WARN_ON_ONCE_PAGE(true, page_tail); > page_tail->private =3D 0; > } > - if (PageSwapCache(head)) > - set_page_private(page_tail, (unsigned long)head->private = + tail); > + if (folio_test_swapcache(folio)) > + new_folio->swap.val =3D folio->swap.val + tail; > > /* Page flags must be visible before we make the page non-compoun= d. */ > smp_wmb(); > @@ -2500,11 +2506,9 @@ static void __split_huge_page(struct page *page, s= truct list_head *list, > /* complete memcg works before add pages to LRU */ > split_page_memcg(head, nr); > > - if (PageAnon(head) && PageSwapCache(head)) { > - swp_entry_t entry =3D { .val =3D page_private(head) }; > - > - offset =3D swp_offset(entry); > - swap_cache =3D swap_address_space(entry); > + if (folio_test_anon(folio) && folio_test_swapcache(folio)) { > + offset =3D swp_offset(folio->swap); > + swap_cache =3D swap_address_space(folio->swap); > xa_lock(&swap_cache->i_pages); > } > > @@ -2514,7 +2518,7 @@ static void __split_huge_page(struct page *page, st= ruct list_head *list, > ClearPageHasHWPoisoned(head); > > for (i =3D nr - 1; i >=3D 1; i--) { > - __split_huge_page_tail(head, i, lruvec, list); > + __split_huge_page_tail(folio, i, lruvec, list); > /* Some pages can be beyond EOF: drop them from page cach= e */ > if (head[i].index >=3D end) { > struct folio *tail =3D page_folio(head + i); > @@ -2559,11 +2563,8 @@ static void __split_huge_page(struct page *page, s= truct list_head *list, > > remap_page(folio, nr); > > - if (PageSwapCache(head)) { > - swp_entry_t entry =3D { .val =3D page_private(head) }; > - > - split_swap_cluster(entry); > - } > + if (folio_test_swapcache(folio)) > + split_swap_cluster(folio->swap); > > for (i =3D 0; i < nr; i++) { > struct page *subpage =3D head + i; > -- > 2.41.0 > >