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 1110DC48260 for ; Fri, 26 Jan 2024 10:31:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 77CAB6B0098; Fri, 26 Jan 2024 05:31:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 72B0A6B0099; Fri, 26 Jan 2024 05:31:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5CC876B009A; Fri, 26 Jan 2024 05:31:42 -0500 (EST) 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 471B66B0098 for ; Fri, 26 Jan 2024 05:31:42 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id DDD4A140E4B for ; Fri, 26 Jan 2024 10:31:41 +0000 (UTC) X-FDA: 81721096002.01.C55A328 Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by imf18.hostedemail.com (Postfix) with ESMTP id 0CA321C0004 for ; Fri, 26 Jan 2024 10:31:38 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Bu+zwWqX; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf18.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.176 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706265099; 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=SsyCoAgROQya7z0YsEyxgC1puOgbbzzhV/2ft60JACg=; b=YV/RtDR87Ukykh28FoaiN1ZFl6cPC+NalRo7b2a7eSfE/ygbsdZGUuuHQZS4lnb0RAIfSa QM+QPy4amMGjEB1VysY5GT+96RlBk8W7berikgZw3uKqOQw8ZuQjvSc5CvnK5n6Tpv3vHS 88Dh7JWZRdjfAtW0WklfpZ2ZHF2QAMw= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Bu+zwWqX; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf18.hostedemail.com: domain of ryncsn@gmail.com designates 209.85.208.176 as permitted sender) smtp.mailfrom=ryncsn@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706265099; a=rsa-sha256; cv=none; b=GI8R9w691VpiGgrlDp2Z7HPMdKNXB5lWP8dxr4m5+Pc9lvLz01ZYREd4O5+vkQxPKO2X4N p4r9QXdBHVn/AxVbgZvdjFXXfdAuoeurg466I7KWw24SryTMaR/+mJSzjNE7Bt5Wz0nBIW WiJg1Ifrlc5dJ1Dp7dFEH8y+YjxZdE8= Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-2cf3ea86423so2177891fa.1 for ; Fri, 26 Jan 2024 02:31:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706265097; x=1706869897; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=SsyCoAgROQya7z0YsEyxgC1puOgbbzzhV/2ft60JACg=; b=Bu+zwWqXmPhfYnYntkVbHGwb6wjKSxhDV+WzhU9tys+1yrjiMfy0AEQ0FsxK8LpYmV A+q8OUDoEIgPTXH2wrDV4VFMf8iZHbVinRZbPMc6fSwghD5Ig1eb46JyWoK3+gtt+JGr tY53CvLMpuBmF7jDBAT6jkfJxdDOIg02nqW8NNXwmPXI/QD0CQlGG3fgngEE5Uk9n4Sm 2lVDrQfzA4yCOr9WEz6p8S17QsrUjZmF489FRgmA2GRkWUF/01W3gOauamWZShvKUOeA o/eWdUBTL3m7pwToT5juAWWo1DOsLVxUyYBFRqqY3y11Pr4tKx+s8ckbc0GeTJCEC2ZE i8MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706265097; x=1706869897; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SsyCoAgROQya7z0YsEyxgC1puOgbbzzhV/2ft60JACg=; b=nhTyK1RGtP1NQNJmPbOqhC7XOL05Ka7imhclILth9v5ZderKAzB2iB+OE/SJvHID3m ws9EZ8gmwczIxBCIrBuOwAMBh1H1ntuufb3+KzzhZs0mkFlepWiSNcpRmo5CYwFhdz0t GSnRVYKwzOJtqi7FW23vAK7bwtt7lYom3tDyQyY9pzHIaYPluiuBm1rdtC1UERKFVan3 2yNJwwMf3zdGz8v8Lo6EWmoeUODjBA2e6MuHgrVr3A61jOBymEGxjOXCs4H99K1EXJGp 1SdHpg2iCJ8d9Xeav9az0QJFre6dTWm4TF/pglo9t4Vh97U7j6mphFGhdjrYyFsB1Ag1 MzTg== X-Gm-Message-State: AOJu0YybgAeqTTB+x2Lx+XIwSQywfjxbouqJh/NnjHYGa2Y8YCU111bV pKAcst4DGqIAfWV/X3Jl2+QptWFSVZIu36ASMzVIdTtduibDb4tJeakS1qQXjKNkrVI6wiFowgr /gTKSXeQcpGqpZwWsWi7Yu5Xvw/c= X-Google-Smtp-Source: AGHT+IEbNEblHTEO+JR0tuygnuC1o/4qWNy8H7LPgWav/jkh7pc8v5ih882mZcuG6F8kYzsaMM35LumDA77nvZa5HQA= X-Received: by 2002:a2e:be20:0:b0:2cf:1f83:9f99 with SMTP id z32-20020a2ebe20000000b002cf1f839f99mr777525ljq.23.1706265096989; Fri, 26 Jan 2024 02:31:36 -0800 (PST) MIME-Version: 1.0 References: <20240123184552.59758-1-ryncsn@gmail.com> <20240123184552.59758-2-ryncsn@gmail.com> In-Reply-To: From: Kairui Song Date: Fri, 26 Jan 2024 18:31:24 +0800 Message-ID: Subject: Re: [PATCH v3 1/3] mm, lru_gen: try to prefetch next page when scanning LRU To: Chris Li Cc: linux-mm , Andrew Morton , Yu Zhao , Wei Xu , Matthew Wilcox , LKML Content-Type: multipart/alternative; boundary="000000000000ffaee6060fd6cc32" X-Rspamd-Queue-Id: 0CA321C0004 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: n67chermjip73gefadrmzzqq75zs8pz5 X-HE-Tag: 1706265098-844971 X-HE-Meta: U2FsdGVkX1/1Q1HsPX8vVCaQkaU9IXqj3VaZSbBg3UH279A991OXZZECYwC3ASLxPPc8+28WONU+RPTUDKkF71WPEBbXeH17a/4CS/vkW6LspdpexHH8C8+SA9quy4nRiOroE/m/UiG3dQJafTIDNUiQj1JmAvFHJnBu5JKyfadG4TD4cP1S45gyvQNzmMDhxDpkzeNeJhVKUaVcHZpJw7Ohf0OgeKUpMscwa6xe7YMIcq9DBqKn6N+hCIDVCOz+FUNck9KqWjdkGKp6HwnHAt0mcE1k/B3lRSZSs5vdFBonwC0Lt3hUMehSZn9Ngt2WTY6/cWb3PINLdM7RQBv4mVoPJOsUTbxQyDvGnsj4iM7d1nMjzYiVUiCiyU7BYSNaWTDLwIlnFLEwP34WnZPYtCB+7ooRfk9u/7Lk0IKVvh/OCAFMx30DTiZtv78KXdZfjYlwE8R8KNpkIwUNNholrx03U3ePwwYMDPX+vCkddHnjFXx5C74khdU2XGUB45kqn76dNUbfwJicqfyylOwxomWYYiKsXjH+bNvz+gbeI1gc4jjVkKboqAatC0JZiMtdg4U7Rl2NQqLLF1U6Vq7x7r8HBGZ63NkYWHbTrtW36bwHzwVmDrOCtCba4KwzZOMFWaKDW23aC8pQl+2SD3NLzSLhJ/kq+scF3bML9aWgiva2DdluPPCXRZ8vf3B+mIZI2O6LNPMWyWAVtpUf378KLPox2zgRDx7bDFjrI/HP0EINDvqyDMikJQlJbL0sK5HUyIY50WfGUCctbB/TLcFJo3kYCIlvm53IwSku9thUyuYjOF2+2RM38ihut+zUXd4R6HnRn5IXP7NyOItixy9SI4BnbVdm3y1RV0oNRwX8gppXAwoHjUcT2eGCRODaRkGBmKuQ9FlxmiS7K8nmLioqWz6SWYlCRe8zjOIryJXPIzI1518pyvrQaQWvxEZcLMx8CZo1hjTrd5f8yMp8VJw Wm7CeZa3 LdzWksx0/dnF7j9YY7bykB3ZX94a3SlRuiJHDbjxvC2Yl2keHCnM3RmC8RXxmJ1lSC37HPfPtqVowCWXZRaM51N36J66CVotrPN6nRKXHc4GurSzQ6PRZvLbCFw== 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: --000000000000ffaee6060fd6cc32 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 26, 2024 at 8:56=E2=80=AFAM Chris Li wrote: > On Fri, Jan 26, 2024 at 01:51:44AM +0800, Kairui Song wrote: > > > > mm/vmscan.c | 30 ++++++++++++++++++++++++++---- > > > > 1 file changed, 26 insertions(+), 4 deletions(-) > > > > > > > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > > > index 4f9c854ce6cc..03631cedb3ab 100644 > > > > --- a/mm/vmscan.c > > > > +++ b/mm/vmscan.c > > > > @@ -3681,15 +3681,26 @@ static bool inc_min_seq(struct lruvec *lruvec, int type, bool can_swap) > > > > /* prevent cold/hot inversion if force_scan is true */ > > > > for (zone =3D 0; zone < MAX_NR_ZONES; zone++) { > > > > struct list_head *head =3D &lrugen->folios[old_gen][type][zone]; > > > > + struct folio *prev =3D NULL; > > > > > > > > - while (!list_empty(head)) { > > > > - struct folio *folio =3D lru_to_folio(head); > > > > + if (!list_empty(head)) > > > > + prev =3D lru_to_folio(head); > > > > + > > > > + while (prev) { > > > > + struct folio *folio =3D prev; > > > > > > > > VM_WARN_ON_ONCE_FOLIO(folio_test_unevictable(folio), folio); > > > > VM_WARN_ON_ONCE_FOLIO(folio_test_active(folio), folio); > > > > VM_WARN_ON_ONCE_FOLIO(folio_is_file_lru(folio) !=3D type, folio); > > > > VM_WARN_ON_ONCE_FOLIO(folio_zonenum(folio) !=3D zone, folio); > > > > > > > > + if (unlikely(list_is_first(&folio->lru, head))) { > > > > + prev =3D NULL; > > > > + } else { > > > > + prev =3D lru_to_folio(&folio->lru); > > > > + prefetchw(&prev->flags); > > > > + } > > > > > > This makes the code flow much harder to follow. Also for architecture > > > that does not support prefetch, this will be a net loss. > > > > > > Can you use refetchw_prev_lru_folio() instead? It will make the code > > > much easier to follow. It also turns into no-op when prefetch is not > > > supported. > > > > > > Chris > > > > > > > Hi Chris, > > > > Thanks for the suggestion. > > > > Yes, that's doable, I made it this way because in previous series (V1 > > & V2) I applied the bulk move patch first which needed and introduced > > the `prev` variable here, so the prefetch logic just used it. > > For V3 I did a rebase and moved the prefetch commit to be the first > > one, since it seems to be the most effective one, and just kept the > > Maybe something like this? Totally not tested. Feel free to use it any way you want. > > Chris > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 4f9c854ce6cc..2100e786ccc6 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -3684,6 +3684,7 @@ static bool inc_min_seq(struct lruvec *lruvec, int type, bool can_swap) > > while (!list_empty(head)) { > struct folio *folio =3D lru_to_folio(head); > + prefetchw_prev_lru_folio(folio, head, flags); > > VM_WARN_ON_ONCE_FOLIO(folio_test_unevictable(folio), folio); > VM_WARN_ON_ONCE_FOLIO(folio_test_active(folio), folio); > @@ -4346,7 +4347,10 @@ static int scan_folios(struct lruvec *lruvec, struct scan_control *sc, > > while (!list_empty(head)) { > struct folio *folio =3D lru_to_folio(head); > - int delta =3D folio_nr_pages(folio); > + int delta; > + > + prefetchw_prev_lru_folio(folio, head, flags); > + delta =3D folio_nr_pages(folio); > > VM_WARN_ON_ONCE_FOLIO(folio_test_unevictable(folio), folio); > VM_WARN_ON_ONCE_FOLIO(folio_test_active(folio), folio); > Thanks! Actually if benefits from 2/3 and 3/3 is trivial compared to the complexity and not appealing, then let's only keep the prefetch one, which will be just a one liner change with good result. --000000000000ffaee6060fd6cc32 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Fri, Jan 26, 2024 at 8:56=E2=80=AFAM Chris Li <chrisl@kernel.org> wrote:
> On Fri, Jan 26, 2024 at 01:51:44AM +0800, Kairui Song wrote:
> > > >=C2=A0 mm/vmscan.c | 30 ++++++++++++++++++++++++++---- > > > >=C2=A0 1 file changed, 26 insertions(+), 4 deletions(-)<= br> > > > >
> > > > diff --git a/mm/vmscan.c b/mm/vmscan.c
> > > > index 4f9c854ce6cc..03631cedb3ab 100644
> > > > --- a/mm/vmscan.c
> > > > +++ b/mm/vmscan.c
> > > > @@ -3681,15 +3681,26 @@ static bool inc_min_seq(struct = lruvec *lruvec, int type, bool can_swap)
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* prevent cold/hot in= version if force_scan is true */
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for (zone =3D 0; zone = < MAX_NR_ZONES; zone++) {
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0struct list_head *head =3D &lrugen->folios[old_gen][type][zone= ];
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0struct folio *prev =3D NULL;
> > > >
> > > > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0while (!list_empty(head)) {
> > > > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0struct folio *folio =3D lru_to_folio(head);<= br> > > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0if (!list_empty(head))
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0prev =3D lru_to_folio(head);
> > > > +
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0while (prev) {
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0struct folio *folio =3D prev;
> > > >
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_test_unevicta= ble(folio), folio);
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_test_active(f= olio), folio);
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_is_file_lru(f= olio) !=3D type, folio);
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_zonenum(folio= ) !=3D zone, folio);
> > > >
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (unlikely(list_is_first(&folio->lr= u, head))) {
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0prev =3D NULL; > > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else {
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0prev =3D lru_to_= folio(&folio->lru);
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0prefetchw(&p= rev->flags);
> > > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> > >
> > > This makes the code flow much harder to follow. Also for arc= hitecture
> > > that does not support prefetch, this will be a net loss.
> > >
> > > Can you use refetchw_prev_lru_folio() instead? It will make = the code
> > > much easier to follow. It also turns into no-op when prefetc= h is not
> > > supported.
> > >
> > > Chris
> > >
> >
> > Hi Chris,
> >
> > Thanks for the suggestion.
> >
> > Yes, that's doable, I made it this way because in previous se= ries (V1
> > & V2) I applied the bulk move patch first which needed and in= troduced
> > the `prev` variable here, so the prefetch logic just used it.
> > For V3 I did a rebase and moved the prefetch commit to be the fir= st
> > one, since it seems to be the most effective one, and just kept t= he
>
> Maybe something like this? Totally not tested. Feel free to use it any= way you want.
>
> Chris
>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 4f9c854ce6cc..2100e786ccc6 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -3684,6 +3684,7 @@ static bool inc_min_seq(struct lruvec *lruvec, i= nt type, bool can_swap)
>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0while (!l= ist_empty(head)) {
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0struct folio *folio =3D lru_to_folio(head);
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0prefetchw_prev_lru_folio(folio, head, flags);
>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_test_unevictable(folio), fo= lio);
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_test_active(folio), folio);=
> @@ -4346,7 +4347,10 @@ static int scan_folios(struct lruvec *lruvec, s= truct scan_control *sc,
>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0while (!l= ist_empty(head)) {
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0struct folio *folio =3D lru_to_folio(head);
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0int delta =3D folio_nr_pages(folio);
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0int delta;
> +
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0prefetchw_prev_lru_folio(folio, head, flags);
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0delta =3D folio_nr_pages(folio);
>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_test_unevictable(folio), fo= lio);
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0VM_WARN_ON_ONCE_FOLIO(folio_test_active(folio), folio);=
>

Thanks!

Actually if benefits from 2/3 and 3/3= is trivial compared to the complexity and not appealing, then let's on= ly keep the prefetch one, which will be just a one liner change with good r= esult.
--000000000000ffaee6060fd6cc32--