Skip to content

Commit

Permalink
Revert "net: defer call to cgroup_sk_alloc()"
Browse files Browse the repository at this point in the history
This reverts commit fbb1fb4.

This was not the proper fix, lets cleanly revert it, so that
following patch can be carried to stable versions.

sock_cgroup_ptr() callers do not expect a NULL return value.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Oct 11, 2017
1 parent befc7a3 commit 75cb070
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 6 deletions.
11 changes: 11 additions & 0 deletions kernel/cgroup/cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -5709,6 +5709,17 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd)
if (cgroup_sk_alloc_disabled)
return;

/* Socket clone path */
if (skcd->val) {
/*
* We might be cloning a socket which is left in an empty
* cgroup and the cgroup might have already been rmdir'd.
* Don't use cgroup_get_live().
*/
cgroup_get(sock_cgroup_ptr(skcd));
return;
}

rcu_read_lock();

while (true) {
Expand Down
3 changes: 2 additions & 1 deletion net/core/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -1680,7 +1680,6 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)

/* sk->sk_memcg will be populated at accept() time */
newsk->sk_memcg = NULL;
memset(&newsk->sk_cgrp_data, 0, sizeof(newsk->sk_cgrp_data));

atomic_set(&newsk->sk_drops, 0);
newsk->sk_send_head = NULL;
Expand Down Expand Up @@ -1719,6 +1718,8 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
newsk->sk_incoming_cpu = raw_smp_processor_id();
atomic64_set(&newsk->sk_cookie, 0);

cgroup_sk_alloc(&newsk->sk_cgrp_data);

/*
* Before updating sk_refcnt, we must commit prior changes to memory
* (Documentation/RCU/rculist_nulls.txt for details)
Expand Down
5 changes: 0 additions & 5 deletions net/ipv4/inet_connection_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@
#include <net/tcp.h>
#include <net/sock_reuseport.h>
#include <net/addrconf.h>
#include <net/cls_cgroup.h>
#include <net/netprio_cgroup.h>

#ifdef INET_CSK_DEBUG
const char inet_csk_timer_bug_msg[] = "inet_csk BUG: unknown timer value\n";
Expand Down Expand Up @@ -478,9 +476,6 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern)
spin_unlock_bh(&queue->fastopenq.lock);
}
mem_cgroup_sk_alloc(newsk);
cgroup_sk_alloc(&newsk->sk_cgrp_data);
sock_update_classid(&newsk->sk_cgrp_data);
sock_update_netprioidx(&newsk->sk_cgrp_data);
out:
release_sock(sk);
if (req)
Expand Down

0 comments on commit 75cb070

Please sign in to comment.