|
@@ -2939,16 +2939,16 @@ static int memcg_update_tcp_limit(struct mem_cgroup *memcg, unsigned long limit)
|
|
|
/*
|
|
|
* The active flag needs to be written after the static_key
|
|
|
* update. This is what guarantees that the socket activation
|
|
|
- * function is the last one to run. See sock_update_memcg() for
|
|
|
- * details, and note that we don't mark any socket as belonging
|
|
|
- * to this memcg until that flag is up.
|
|
|
+ * function is the last one to run. See mem_cgroup_sk_alloc()
|
|
|
+ * for details, and note that we don't mark any socket as
|
|
|
+ * belonging to this memcg until that flag is up.
|
|
|
*
|
|
|
* We need to do this, because static_keys will span multiple
|
|
|
* sites, but we can't control their order. If we mark a socket
|
|
|
* as accounted, but the accounting functions are not patched in
|
|
|
* yet, we'll lose accounting.
|
|
|
*
|
|
|
- * We never race with the readers in sock_update_memcg(),
|
|
|
+ * We never race with the readers in mem_cgroup_sk_alloc(),
|
|
|
* because when this value change, the code to process it is not
|
|
|
* patched in yet.
|
|
|
*/
|
|
@@ -5651,11 +5651,15 @@ void mem_cgroup_migrate(struct page *oldpage, struct page *newpage)
|
|
|
DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key);
|
|
|
EXPORT_SYMBOL(memcg_sockets_enabled_key);
|
|
|
|
|
|
-void sock_update_memcg(struct sock *sk)
|
|
|
+void mem_cgroup_sk_alloc(struct sock *sk)
|
|
|
{
|
|
|
struct mem_cgroup *memcg;
|
|
|
|
|
|
- /* Socket cloning can throw us here with sk_cgrp already
|
|
|
+ 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.
|
|
@@ -5680,12 +5684,11 @@ void sock_update_memcg(struct sock *sk)
|
|
|
out:
|
|
|
rcu_read_unlock();
|
|
|
}
|
|
|
-EXPORT_SYMBOL(sock_update_memcg);
|
|
|
|
|
|
-void sock_release_memcg(struct sock *sk)
|
|
|
+void mem_cgroup_sk_free(struct sock *sk)
|
|
|
{
|
|
|
- WARN_ON(!sk->sk_memcg);
|
|
|
- css_put(&sk->sk_memcg->css);
|
|
|
+ if (sk->sk_memcg)
|
|
|
+ css_put(&sk->sk_memcg->css);
|
|
|
}
|
|
|
|
|
|
/**
|