From: Eric Dumazet <eric.dumazet@gmail.com>
To: Roman Gushchin <guro@fb.com>, Eric Dumazet <edumazet@google.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
kernel-team@fb.com, "David S . Miller" <davem@davemloft.net>,
Johannes Weiner <hannes@cmpxchg.org>, Tejun Heo <tj@kernel.org>
Subject: Re: [PATCH net] Revert "defer call to mem_cgroup_sk_alloc()"
Date: Fri, 02 Feb 2018 09:59:27 -0800 [thread overview]
Message-ID: <1517594367.3715.130.camel@gmail.com> (raw)
In-Reply-To: <20180202165754.8551-1-guro@fb.com>
On Fri, 2018-02-02 at 16:57 +0000, Roman Gushchin wrote:
> This patch effectively reverts commit 9f1c2674b328 ("net: memcontrol:
> defer call to mem_cgroup_sk_alloc()").
>
> Moving mem_cgroup_sk_alloc() to the inet_csk_accept() completely breaks
> memcg socket memory accounting, as packets received before memcg
> pointer initialization are not accounted and are causing refcounting
> underflow on socket release.
>
> Actually the free-after-use problem was fixed by
> commit c0576e397508 ("net: call cgroup_sk_alloc() earlier in
> sk_clone_lock()") for the cgroup pointer.
>
> So, let's revert it and call mem_cgroup_sk_alloc() just before
> cgroup_sk_alloc(). This is safe, as we hold a reference to the socket
> we're cloning, and it holds a reference to the memcg.
>
> Signed-off-by: Roman Gushchin <guro@fb.com>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: Johannes Weiner <hannes@cmpxchg.org>
> Cc: Tejun Heo <tj@kernel.org>
> ---
> mm/memcontrol.c | 14 ++++++++++++++
> net/core/sock.c | 5 +----
> net/ipv4/inet_connection_sock.c | 1 -
> 3 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 0ae2dc3a1748..0937f2c52c7d 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -5747,6 +5747,20 @@ void mem_cgroup_sk_alloc(struct sock *sk)
> if (!mem_cgroup_sockets_enabled)
> return;
>
> + /*
> + * Socket cloning can throw us here with sk_memcg already
> + * filled. It won't however, necessarily happen from
> + * process context. So the test for root memcg given
> + * the current task's memcg won't help us in this case.
> + *
> + * Respecting the original socket's memcg is a better
> + * decision in this case.
> + */
> + if (sk->sk_memcg) {
Original commit had a BUG_ON(mem_cgroup_is_root(sk->sk_memcg));
I presume it is no longer useful ?
Thanks
> + css_get(&sk->sk_memcg->css);
> + return;
> + }
> +
> rcu_read_lock();
next prev parent reply other threads:[~2018-02-02 17:59 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-02 16:57 [PATCH net] Revert "defer call to mem_cgroup_sk_alloc()" Roman Gushchin
2018-02-02 17:59 ` Eric Dumazet [this message]
2018-02-02 18:06 ` Roman Gushchin
2018-02-02 18:39 ` Eric Dumazet
2018-02-02 19:04 ` Roman Gushchin
2018-02-02 19:34 ` Eric Dumazet
2018-02-02 19:54 ` Roman Gushchin
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=1517594367.3715.130.camel@gmail.com \
--to=eric.dumazet@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=guro@fb.com \
--cc=hannes@cmpxchg.org \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=tj@kernel.org \
/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.