@@ -3039,17 +3039,19 @@ EXPORT_SYMBOL(sk_wait_data);
3039
3039
*/
3040
3040
int __sk_mem_raise_allocated (struct sock * sk , int size , int amt , int kind )
3041
3041
{
3042
- bool memcg_charge = mem_cgroup_sockets_enabled && sk -> sk_memcg ;
3042
+ struct mem_cgroup * memcg = mem_cgroup_sockets_enabled ? sk -> sk_memcg : NULL ;
3043
3043
struct proto * prot = sk -> sk_prot ;
3044
- bool charged = true ;
3044
+ bool charged = false ;
3045
3045
long allocated ;
3046
3046
3047
3047
sk_memory_allocated_add (sk , amt );
3048
3048
allocated = sk_memory_allocated (sk );
3049
- if (memcg_charge &&
3050
- !(charged = mem_cgroup_charge_skmem (sk -> sk_memcg , amt ,
3051
- gfp_memcg_charge ())))
3052
- goto suppress_allocation ;
3049
+
3050
+ if (memcg ) {
3051
+ if (!mem_cgroup_charge_skmem (memcg , amt , gfp_memcg_charge ()))
3052
+ goto suppress_allocation ;
3053
+ charged = true;
3054
+ }
3053
3055
3054
3056
/* Under limit. */
3055
3057
if (allocated <= sk_prot_mem_limits (sk , 0 )) {
@@ -3104,8 +3106,8 @@ int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)
3104
3106
*/
3105
3107
if (sk -> sk_wmem_queued + size >= sk -> sk_sndbuf ) {
3106
3108
/* Force charge with __GFP_NOFAIL */
3107
- if (memcg_charge && !charged ) {
3108
- mem_cgroup_charge_skmem (sk -> sk_memcg , amt ,
3109
+ if (memcg && !charged ) {
3110
+ mem_cgroup_charge_skmem (memcg , amt ,
3109
3111
gfp_memcg_charge () | __GFP_NOFAIL );
3110
3112
}
3111
3113
return 1 ;
@@ -3117,8 +3119,8 @@ int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)
3117
3119
3118
3120
sk_memory_allocated_sub (sk , amt );
3119
3121
3120
- if (memcg_charge && charged )
3121
- mem_cgroup_uncharge_skmem (sk -> sk_memcg , amt );
3122
+ if (charged )
3123
+ mem_cgroup_uncharge_skmem (memcg , amt );
3122
3124
3123
3125
return 0 ;
3124
3126
}
0 commit comments