Subject: Re: linux-next: manual merge of the akpm-current tree with the bpf-next tree

From: Stephen Rothwell <[email-masked]>
Date: Tue, 15 Dec 2020 07:21:56 +1100

Hi all,

On Fri, 4 Dec 2020 20:20:05 +1100 Stephen Rothwell <[email-masked]> wrote:
>
> Today's linux-next merge of the akpm-current tree got conflicts in:
> 
>   include/linux/memcontrol.h
>   mm/memcontrol.c
> 
> between commit:
> 
>   bcfe06bf2622 ("mm: memcontrol: Use helpers to read page's memcg data")
> 
> from the bpf-next tree and commits:
> 
>   6771a349b8c3 ("mm/memcg: remove incorrect comment")
>   c3970fcb1f21 ("mm: move lruvec stats update functions to vmstat.h")
> 
> from the akpm-current tree.
> 
> I fixed it up (see below - I used the latter version of memcontrol.h)
> and can carry the fix as necessary. This is now fixed as far as
> linux-next is concerned, but any non trivial conflicts should be
> mentioned to your upstream maintainer when your tree is submitted for
> merging.  You may also want to consider cooperating with the maintainer
> of the conflicting tree to minimise any particularly complex conflicts.
> 
> I also added this merge fix patch:
> 
> From: Stephen Rothwell <[email-masked]>
> Date: Fri, 4 Dec 2020 19:53:40 +1100
> Subject: [PATCH] fixup for "mm: move lruvec stats update functions to vmstat.h"
> 
> conflict against "mm: memcontrol: Use helpers to read page's memcg data"
> 
> Signed-off-by: Stephen Rothwell <[email-masked]>
> ---
>  mm/memcontrol.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 6f5733779927..3b6db4e906b5 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -851,16 +851,17 @@ void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx,
>  			     int val)
>  {
>  	struct page *head = compound_head(page); /* rmap on tail pages */
> +	struct mem_cgroup *memcg = page_memcg(head);
>  	pg_data_t *pgdat = page_pgdat(page);
>  	struct lruvec *lruvec;
>  
>  	/* Untracked pages have no memcg, no lruvec. Update only the node */
> -	if (!head->mem_cgroup) {
> +	if (!memcg) {
>  		__mod_node_page_state(pgdat, idx, val);
>  		return;
>  	}
>  
> -	lruvec = mem_cgroup_lruvec(head->mem_cgroup, pgdat);
> +	lruvec = mem_cgroup_lruvec(memcg, pgdat);
>  	__mod_lruvec_state(lruvec, idx, val);
>  }
>  
> -- 
> 2.29.2
> 
> -- 
> Cheers,
> Stephen Rothwell
> 
> diff --cc include/linux/memcontrol.h
> index 320369c841f5,ff02f831e7e1..000000000000
> --- a/include/linux/memcontrol.h
> +++ b/include/linux/memcontrol.h
> diff --cc mm/memcontrol.c
> index 7535042ac1ec,c9a5dce4343d..000000000000
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@@ -2880,9 -2984,9 +2975,9 @@@ static void cancel_charge(struct mem_cg
>   
>   static void commit_charge(struct page *page, struct mem_cgroup *memcg)
>   {
>  -	VM_BUG_ON_PAGE(page->mem_cgroup, page);
>  +	VM_BUG_ON_PAGE(page_memcg(page), page);
>   	/*
> - 	 * Any of the following ensures page->mem_cgroup stability:
> + 	 * Any of the following ensures page's memcg stability:
>   	 *
>   	 * - the page lock
>   	 * - LRU isolation
> @@@ -6977,11 -7012,10 +6997,10 @@@ void mem_cgroup_migrate(struct page *ol
>   		return;
>   
>   	/* Page cache replacement: new page already charged? */
>  -	if (newpage->mem_cgroup)
>  +	if (page_memcg(newpage))
>   		return;
>   
> - 	/* Swapcache readahead pages can get replaced before being charged */
>  -	memcg = oldpage->mem_cgroup;
>  +	memcg = page_memcg(oldpage);
>   	if (!memcg)
>   		return;
>   

Just a reminder that this conflict still exists.  Commit bcfe06bf2622
is now in the net-next tree.

-- 
Cheers,
Stephen Rothwell