Re: [PATCH 08/14] net: tcp_memcontrol: sanitize tcp memory accounting callbacks

Eric Dumazet
2015-11-13T04:53:43Z

On Thu, 2015-11-12 at 18:41 -0500, Johannes Weiner wrote:

> @@ -711,6 +705,12 @@ static inline void mem_cgroup_wb_stats(struct bdi_writeback *wb,
> struct sock;
> void sock_update_memcg(struct sock *sk);
> void sock_release_memcg(struct sock *sk);
> +bool mem_cgroup_charge_skmem(struct cg_proto *proto, unsigned int nr_pages);
> +void mem_cgroup_uncharge_skmem(struct cg_proto *proto, unsigned int nr_pages);
> +static inline bool mem_cgroup_under_socket_pressure(struct cg_proto *proto)
> +{
> + return proto->memory_pressure;
> +}
> #endif /* CONFIG_INET && CONFIG_MEMCG_KMEM */
>
> #ifdef CONFIG_MEMCG_KMEM
> diff --git a/include/net/sock.h b/include/net/sock.h
> index 2eefc99..8cc7613 100644
> --- a/include/net/sock.h
> +++ b/include/net/sock.h
> @@ -1126,8 +1126,8 @@ static inline bool sk_under_memory_pressure(const struct sock *sk)
> if (!sk->sk_prot->memory_pressure)
> return false;
>
> - if (mem_cgroup_sockets_enabled && sk->sk_cgrp)
> - return !!sk->sk_cgrp->memory_pressure;
> + if (mem_cgroup_sockets_enabled && sk->sk_cgrp &&
> + mem_cgroup_under_socket_pressure(sk->sk_cgrp))
>
> return !!*sk->sk_prot->memory_pressure;
> }

This looks wrong ?

if (A && B && C)
return !!*sk->sk_prot->memory_pressure;

<compiler should eventually barf,
as this function should not return void>
}