All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Zi Yan <ziy@nvidia.com>
Cc: linux-mm@kvack.org, Johannes Weiner <hannes@cmpxchg.org>,
	Michal Hocko <mhocko@kernel.org>,
	Roman Gushchin <roman.gushchin@linux.dev>,
	Shakeel Butt <shakeel.butt@linux.dev>,
	Muchun Song <muchun.song@linux.dev>
Subject: Re: [PATCH v2 1/5] mm: Separate folio_split_memcg_refs() from split_page_memcg()
Date: Fri, 14 Mar 2025 22:49:22 +0100	[thread overview]
Message-ID: <a719845d-7dc5-4a99-9749-cc030ddac984@redhat.com> (raw)
In-Reply-To: <20250314133617.138071-2-willy@infradead.org>

On 14.03.25 14:36, Matthew Wilcox (Oracle) wrote:
> Folios always use memcg_data to refer to the mem_cgroup while pages
> allocated with GFP_ACCOUNT have a pointer to the obj_cgroup.  Since the
> caller already knows what it has, split the function into two and then
> we don't need to check.
> 
> Move the assignment of split folio memcg_data to the point where we set
> up the other parts of the new folio.  That leaves folio_split_memcg_refs()
> just handling the memcg accounting.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Acked-by: Johannes Weiner <hannes@cmpxchg.org>
> Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
> Acked-by: Zi Yan <ziy@nvidia.com>
> ---
>   include/linux/memcontrol.h |  7 +++++++
>   mm/huge_memory.c           | 16 ++++------------
>   mm/memcontrol.c            | 17 +++++++++++++----
>   3 files changed, 24 insertions(+), 16 deletions(-)
> 
> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
> index 57664e2a8fb7..d090089c5497 100644
> --- a/include/linux/memcontrol.h
> +++ b/include/linux/memcontrol.h
> @@ -1039,6 +1039,8 @@ static inline void memcg_memory_event_mm(struct mm_struct *mm,
>   }
>   
>   void split_page_memcg(struct page *head, int old_order, int new_order);
> +void folio_split_memcg_refs(struct folio *folio, unsigned old_order,
> +		unsigned new_order);
>   
>   static inline u64 cgroup_id_from_mm(struct mm_struct *mm)
>   {
> @@ -1463,6 +1465,11 @@ static inline void split_page_memcg(struct page *head, int old_order, int new_or
>   {
>   }
>   
> +static inline void folio_split_memcg_refs(struct folio *folio,
> +		unsigned old_order, unsigned new_order)
> +{
> +}
> +
>   static inline u64 cgroup_id_from_mm(struct mm_struct *mm)
>   {
>   	return 0;
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index 14b1963898a7..3e5ecc8f3d13 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -3394,6 +3394,9 @@ static void __split_folio_to_order(struct folio *folio, int old_order,
>   			folio_set_young(new_folio);
>   		if (folio_test_idle(folio))
>   			folio_set_idle(new_folio);
> +#ifdef CONFIG_MEMCG
> +		new_folio->memcg_data = folio->memcg_data;
> +#endif
>   
>   		folio_xchg_last_cpupid(new_folio, folio_last_cpupid(folio));
>   	}
> @@ -3525,18 +3528,7 @@ static int __split_unmapped_folio(struct folio *folio, int new_order,
>   			}
>   		}
>   
> -		/*
> -		 * Reset any memcg data overlay in the tail pages.
> -		 * folio_nr_pages() is unreliable until prep_compound_page()
> -		 * was called again.
> -		 */
> -#ifdef NR_PAGES_IN_LARGE_FOLIO
> -		folio->_nr_pages = 0;
> -#endif


I remember that we could trigger a warning without that, but I don't 
immediately find where that warning was. IIRC, if we'd split to order-0, 
page[1] would have indicated that it had a memcg set, and something 
bailed out.

Maybe Zi Yan recalls where that check fired.

In any case, if that warning no longer fires this is a very nice cleanup!

-- 
Cheers,

David / dhildenb



  reply	other threads:[~2025-03-14 21:49 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-14 13:36 [PATCH v2 0/5] Minor memcg cleanups & prep for memdescs Matthew Wilcox (Oracle)
2025-03-14 13:36 ` [PATCH v2 1/5] mm: Separate folio_split_memcg_refs() from split_page_memcg() Matthew Wilcox (Oracle)
2025-03-14 21:49   ` David Hildenbrand [this message]
2025-03-14 23:15     ` Zi Yan
2025-03-15 23:02       ` David Hildenbrand
2025-03-18  3:14   ` Roman Gushchin
2025-03-14 13:36 ` [PATCH v2 2/5] mm: Simplify split_page_memcg() Matthew Wilcox (Oracle)
2025-03-18  3:17   ` Roman Gushchin
2025-03-14 13:36 ` [PATCH v2 3/5] mm: Remove references to folio in split_page_memcg() Matthew Wilcox (Oracle)
2025-03-14 21:53   ` David Hildenbrand
2025-03-18  3:19   ` Roman Gushchin
2025-03-14 13:36 ` [PATCH v2 4/5] mm: Simplify folio_memcg_charged() Matthew Wilcox (Oracle)
2025-03-18  3:22   ` Roman Gushchin
2025-03-14 13:36 ` [PATCH v2 5/5] mm: Remove references to folio in __memcg_kmem_uncharge_page() Matthew Wilcox (Oracle)
2025-03-18  3:24   ` Roman Gushchin
2025-03-14 21:53 ` [PATCH v2 0/5] Minor memcg cleanups & prep for memdescs David Hildenbrand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a719845d-7dc5-4a99-9749-cc030ddac984@redhat.com \
    --to=david@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=muchun.song@linux.dev \
    --cc=roman.gushchin@linux.dev \
    --cc=shakeel.butt@linux.dev \
    --cc=willy@infradead.org \
    --cc=ziy@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.