diff options
Diffstat (limited to 'include/net/sock.h')
-rw-r--r-- | include/net/sock.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index d89f0582b6b6..4a4521699563 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -46,6 +46,7 @@ | |||
46 | #include <linux/list_nulls.h> | 46 | #include <linux/list_nulls.h> |
47 | #include <linux/timer.h> | 47 | #include <linux/timer.h> |
48 | #include <linux/cache.h> | 48 | #include <linux/cache.h> |
49 | #include <linux/bitops.h> | ||
49 | #include <linux/lockdep.h> | 50 | #include <linux/lockdep.h> |
50 | #include <linux/netdevice.h> | 51 | #include <linux/netdevice.h> |
51 | #include <linux/skbuff.h> /* struct sk_buff */ | 52 | #include <linux/skbuff.h> /* struct sk_buff */ |
@@ -921,12 +922,23 @@ struct proto { | |||
921 | #endif | 922 | #endif |
922 | }; | 923 | }; |
923 | 924 | ||
925 | /* | ||
926 | * Bits in struct cg_proto.flags | ||
927 | */ | ||
928 | enum cg_proto_flags { | ||
929 | /* Currently active and new sockets should be assigned to cgroups */ | ||
930 | MEMCG_SOCK_ACTIVE, | ||
931 | /* It was ever activated; we must disarm static keys on destruction */ | ||
932 | MEMCG_SOCK_ACTIVATED, | ||
933 | }; | ||
934 | |||
924 | struct cg_proto { | 935 | struct cg_proto { |
925 | void (*enter_memory_pressure)(struct sock *sk); | 936 | void (*enter_memory_pressure)(struct sock *sk); |
926 | struct res_counter *memory_allocated; /* Current allocated memory. */ | 937 | struct res_counter *memory_allocated; /* Current allocated memory. */ |
927 | struct percpu_counter *sockets_allocated; /* Current number of sockets. */ | 938 | struct percpu_counter *sockets_allocated; /* Current number of sockets. */ |
928 | int *memory_pressure; | 939 | int *memory_pressure; |
929 | long *sysctl_mem; | 940 | long *sysctl_mem; |
941 | unsigned long flags; | ||
930 | /* | 942 | /* |
931 | * memcg field is used to find which memcg we belong directly | 943 | * memcg field is used to find which memcg we belong directly |
932 | * Each memcg struct can hold more than one cg_proto, so container_of | 944 | * Each memcg struct can hold more than one cg_proto, so container_of |
@@ -942,6 +954,16 @@ struct cg_proto { | |||
942 | extern int proto_register(struct proto *prot, int alloc_slab); | 954 | extern int proto_register(struct proto *prot, int alloc_slab); |
943 | extern void proto_unregister(struct proto *prot); | 955 | extern void proto_unregister(struct proto *prot); |
944 | 956 | ||
957 | static inline bool memcg_proto_active(struct cg_proto *cg_proto) | ||
958 | { | ||
959 | return test_bit(MEMCG_SOCK_ACTIVE, &cg_proto->flags); | ||
960 | } | ||
961 | |||
962 | static inline bool memcg_proto_activated(struct cg_proto *cg_proto) | ||
963 | { | ||
964 | return test_bit(MEMCG_SOCK_ACTIVATED, &cg_proto->flags); | ||
965 | } | ||
966 | |||
945 | #ifdef SOCK_REFCNT_DEBUG | 967 | #ifdef SOCK_REFCNT_DEBUG |
946 | static inline void sk_refcnt_debug_inc(struct sock *sk) | 968 | static inline void sk_refcnt_debug_inc(struct sock *sk) |
947 | { | 969 | { |