diff options
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/bluetooth/hci.h | 2 | ||||
-rw-r--r-- | include/net/cfg80211.h | 6 | ||||
-rw-r--r-- | include/net/flow.h | 10 | ||||
-rw-r--r-- | include/net/netns/generic.h | 1 | ||||
-rw-r--r-- | include/net/netprio_cgroup.h | 49 | ||||
-rw-r--r-- | include/net/route.h | 4 | ||||
-rw-r--r-- | include/net/sch_generic.h | 9 | ||||
-rw-r--r-- | include/net/sock.h | 14 | ||||
-rw-r--r-- | include/net/tcp.h | 16 |
9 files changed, 89 insertions, 22 deletions
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index 5b2fed5eebf2..00596e816b4d 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h | |||
@@ -1388,6 +1388,6 @@ struct hci_inquiry_req { | |||
1388 | }; | 1388 | }; |
1389 | #define IREQ_CACHE_FLUSH 0x0001 | 1389 | #define IREQ_CACHE_FLUSH 0x0001 |
1390 | 1390 | ||
1391 | extern int enable_hs; | 1391 | extern bool enable_hs; |
1392 | 1392 | ||
1393 | #endif /* __HCI_H */ | 1393 | #endif /* __HCI_H */ |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 15f4be7d768e..a067d30ce73e 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -1140,6 +1140,7 @@ struct cfg80211_disassoc_request { | |||
1140 | * @bssid: Fixed BSSID requested, maybe be %NULL, if set do not | 1140 | * @bssid: Fixed BSSID requested, maybe be %NULL, if set do not |
1141 | * search for IBSSs with a different BSSID. | 1141 | * search for IBSSs with a different BSSID. |
1142 | * @channel: The channel to use if no IBSS can be found to join. | 1142 | * @channel: The channel to use if no IBSS can be found to join. |
1143 | * @channel_type: channel type (HT mode) | ||
1143 | * @channel_fixed: The channel should be fixed -- do not search for | 1144 | * @channel_fixed: The channel should be fixed -- do not search for |
1144 | * IBSSs to join on other channels. | 1145 | * IBSSs to join on other channels. |
1145 | * @ie: information element(s) to include in the beacon | 1146 | * @ie: information element(s) to include in the beacon |
@@ -1978,6 +1979,11 @@ struct wiphy_wowlan_support { | |||
1978 | * configured as RX antennas. Antenna configuration commands will be | 1979 | * configured as RX antennas. Antenna configuration commands will be |
1979 | * rejected unless this or @available_antennas_tx is set. | 1980 | * rejected unless this or @available_antennas_tx is set. |
1980 | * | 1981 | * |
1982 | * @probe_resp_offload: | ||
1983 | * Bitmap of supported protocols for probe response offloading. | ||
1984 | * See &enum nl80211_probe_resp_offload_support_attr. Only valid | ||
1985 | * when the wiphy flag @WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD is set. | ||
1986 | * | ||
1981 | * @max_remain_on_channel_duration: Maximum time a remain-on-channel operation | 1987 | * @max_remain_on_channel_duration: Maximum time a remain-on-channel operation |
1982 | * may request, if implemented. | 1988 | * may request, if implemented. |
1983 | * | 1989 | * |
diff --git a/include/net/flow.h b/include/net/flow.h index 9b582437fbea..6c469dbdb917 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
@@ -93,6 +93,16 @@ static inline void flowi4_init_output(struct flowi4 *fl4, int oif, | |||
93 | fl4->fl4_dport = dport; | 93 | fl4->fl4_dport = dport; |
94 | fl4->fl4_sport = sport; | 94 | fl4->fl4_sport = sport; |
95 | } | 95 | } |
96 | |||
97 | /* Reset some input parameters after previous lookup */ | ||
98 | static inline void flowi4_update_output(struct flowi4 *fl4, int oif, __u8 tos, | ||
99 | __be32 daddr, __be32 saddr) | ||
100 | { | ||
101 | fl4->flowi4_oif = oif; | ||
102 | fl4->flowi4_tos = tos; | ||
103 | fl4->daddr = daddr; | ||
104 | fl4->saddr = saddr; | ||
105 | } | ||
96 | 106 | ||
97 | 107 | ||
98 | struct flowi6 { | 108 | struct flowi6 { |
diff --git a/include/net/netns/generic.h b/include/net/netns/generic.h index 3419bf5cd154..d55f43443335 100644 --- a/include/net/netns/generic.h +++ b/include/net/netns/generic.h | |||
@@ -41,6 +41,7 @@ static inline void *net_generic(const struct net *net, int id) | |||
41 | ptr = ng->ptr[id - 1]; | 41 | ptr = ng->ptr[id - 1]; |
42 | rcu_read_unlock(); | 42 | rcu_read_unlock(); |
43 | 43 | ||
44 | BUG_ON(!ptr); | ||
44 | return ptr; | 45 | return ptr; |
45 | } | 46 | } |
46 | #endif | 47 | #endif |
diff --git a/include/net/netprio_cgroup.h b/include/net/netprio_cgroup.h index e503b87c4c1b..d58fdec47597 100644 --- a/include/net/netprio_cgroup.h +++ b/include/net/netprio_cgroup.h | |||
@@ -13,7 +13,6 @@ | |||
13 | 13 | ||
14 | #ifndef _NETPRIO_CGROUP_H | 14 | #ifndef _NETPRIO_CGROUP_H |
15 | #define _NETPRIO_CGROUP_H | 15 | #define _NETPRIO_CGROUP_H |
16 | #include <linux/module.h> | ||
17 | #include <linux/cgroup.h> | 16 | #include <linux/cgroup.h> |
18 | #include <linux/hardirq.h> | 17 | #include <linux/hardirq.h> |
19 | #include <linux/rcupdate.h> | 18 | #include <linux/rcupdate.h> |
@@ -38,19 +37,51 @@ extern int net_prio_subsys_id; | |||
38 | 37 | ||
39 | extern void sock_update_netprioidx(struct sock *sk); | 38 | extern void sock_update_netprioidx(struct sock *sk); |
40 | 39 | ||
41 | static inline struct cgroup_netprio_state | 40 | #if IS_BUILTIN(CONFIG_NETPRIO_CGROUP) |
42 | *task_netprio_state(struct task_struct *p) | 41 | |
42 | static inline u32 task_netprioidx(struct task_struct *p) | ||
43 | { | 43 | { |
44 | #if IS_ENABLED(CONFIG_NETPRIO_CGROUP) | 44 | struct cgroup_netprio_state *state; |
45 | return container_of(task_subsys_state(p, net_prio_subsys_id), | 45 | u32 idx; |
46 | struct cgroup_netprio_state, css); | 46 | |
47 | #else | 47 | rcu_read_lock(); |
48 | return NULL; | 48 | state = container_of(task_subsys_state(p, net_prio_subsys_id), |
49 | #endif | 49 | struct cgroup_netprio_state, css); |
50 | idx = state->prioidx; | ||
51 | rcu_read_unlock(); | ||
52 | return idx; | ||
53 | } | ||
54 | |||
55 | #elif IS_MODULE(CONFIG_NETPRIO_CGROUP) | ||
56 | |||
57 | static inline u32 task_netprioidx(struct task_struct *p) | ||
58 | { | ||
59 | struct cgroup_netprio_state *state; | ||
60 | int subsys_id; | ||
61 | u32 idx = 0; | ||
62 | |||
63 | rcu_read_lock(); | ||
64 | subsys_id = rcu_dereference_index_check(net_prio_subsys_id, | ||
65 | rcu_read_lock_held()); | ||
66 | if (subsys_id >= 0) { | ||
67 | state = container_of(task_subsys_state(p, subsys_id), | ||
68 | struct cgroup_netprio_state, css); | ||
69 | idx = state->prioidx; | ||
70 | } | ||
71 | rcu_read_unlock(); | ||
72 | return idx; | ||
50 | } | 73 | } |
51 | 74 | ||
52 | #else | 75 | #else |
53 | 76 | ||
77 | static inline u32 task_netprioidx(struct task_struct *p) | ||
78 | { | ||
79 | return 0; | ||
80 | } | ||
81 | |||
82 | #endif /* CONFIG_NETPRIO_CGROUP */ | ||
83 | |||
84 | #else | ||
54 | #define sock_update_netprioidx(sk) | 85 | #define sock_update_netprioidx(sk) |
55 | #endif | 86 | #endif |
56 | 87 | ||
diff --git a/include/net/route.h b/include/net/route.h index 91855d185b53..b1c0d5b564c2 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
@@ -270,6 +270,7 @@ static inline struct rtable *ip_route_connect(struct flowi4 *fl4, | |||
270 | if (IS_ERR(rt)) | 270 | if (IS_ERR(rt)) |
271 | return rt; | 271 | return rt; |
272 | ip_rt_put(rt); | 272 | ip_rt_put(rt); |
273 | flowi4_update_output(fl4, oif, tos, fl4->daddr, fl4->saddr); | ||
273 | } | 274 | } |
274 | security_sk_classify_flow(sk, flowi4_to_flowi(fl4)); | 275 | security_sk_classify_flow(sk, flowi4_to_flowi(fl4)); |
275 | return ip_route_output_flow(net, fl4, sk); | 276 | return ip_route_output_flow(net, fl4, sk); |
@@ -284,6 +285,9 @@ static inline struct rtable *ip_route_newports(struct flowi4 *fl4, struct rtable | |||
284 | fl4->fl4_dport = dport; | 285 | fl4->fl4_dport = dport; |
285 | fl4->fl4_sport = sport; | 286 | fl4->fl4_sport = sport; |
286 | ip_rt_put(rt); | 287 | ip_rt_put(rt); |
288 | flowi4_update_output(fl4, sk->sk_bound_dev_if, | ||
289 | RT_CONN_FLAGS(sk), fl4->daddr, | ||
290 | fl4->saddr); | ||
287 | security_sk_classify_flow(sk, flowi4_to_flowi(fl4)); | 291 | security_sk_classify_flow(sk, flowi4_to_flowi(fl4)); |
288 | return ip_route_output_flow(sock_net(sk), fl4, sk); | 292 | return ip_route_output_flow(sock_net(sk), fl4, sk); |
289 | } | 293 | } |
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index f6bb08b73ca4..55ce96b53b09 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h | |||
@@ -220,9 +220,16 @@ struct tcf_proto { | |||
220 | 220 | ||
221 | struct qdisc_skb_cb { | 221 | struct qdisc_skb_cb { |
222 | unsigned int pkt_len; | 222 | unsigned int pkt_len; |
223 | long data[]; | 223 | unsigned char data[24]; |
224 | }; | 224 | }; |
225 | 225 | ||
226 | static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz) | ||
227 | { | ||
228 | struct qdisc_skb_cb *qcb; | ||
229 | BUILD_BUG_ON(sizeof(skb->cb) < sizeof(unsigned int) + sz); | ||
230 | BUILD_BUG_ON(sizeof(qcb->data) < sz); | ||
231 | } | ||
232 | |||
226 | static inline int qdisc_qlen(const struct Qdisc *q) | 233 | static inline int qdisc_qlen(const struct Qdisc *q) |
227 | { | 234 | { |
228 | return q->q.qlen; | 235 | return q->q.qlen; |
diff --git a/include/net/sock.h b/include/net/sock.h index bb972d254dff..91c1c8baf020 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -55,6 +55,7 @@ | |||
55 | #include <linux/uaccess.h> | 55 | #include <linux/uaccess.h> |
56 | #include <linux/memcontrol.h> | 56 | #include <linux/memcontrol.h> |
57 | #include <linux/res_counter.h> | 57 | #include <linux/res_counter.h> |
58 | #include <linux/jump_label.h> | ||
58 | 59 | ||
59 | #include <linux/filter.h> | 60 | #include <linux/filter.h> |
60 | #include <linux/rculist_nulls.h> | 61 | #include <linux/rculist_nulls.h> |
@@ -226,6 +227,7 @@ struct cg_proto; | |||
226 | * @sk_ack_backlog: current listen backlog | 227 | * @sk_ack_backlog: current listen backlog |
227 | * @sk_max_ack_backlog: listen backlog set in listen() | 228 | * @sk_max_ack_backlog: listen backlog set in listen() |
228 | * @sk_priority: %SO_PRIORITY setting | 229 | * @sk_priority: %SO_PRIORITY setting |
230 | * @sk_cgrp_prioidx: socket group's priority map index | ||
229 | * @sk_type: socket type (%SOCK_STREAM, etc) | 231 | * @sk_type: socket type (%SOCK_STREAM, etc) |
230 | * @sk_protocol: which protocol this socket belongs in this network family | 232 | * @sk_protocol: which protocol this socket belongs in this network family |
231 | * @sk_peer_pid: &struct pid for this socket's peer | 233 | * @sk_peer_pid: &struct pid for this socket's peer |
@@ -921,7 +923,7 @@ inline void sk_refcnt_debug_release(const struct sock *sk) | |||
921 | #define sk_refcnt_debug_release(sk) do { } while (0) | 923 | #define sk_refcnt_debug_release(sk) do { } while (0) |
922 | #endif /* SOCK_REFCNT_DEBUG */ | 924 | #endif /* SOCK_REFCNT_DEBUG */ |
923 | 925 | ||
924 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_KMEM | 926 | #if defined(CONFIG_CGROUP_MEM_RES_CTLR_KMEM) && defined(CONFIG_NET) |
925 | extern struct jump_label_key memcg_socket_limit_enabled; | 927 | extern struct jump_label_key memcg_socket_limit_enabled; |
926 | static inline struct cg_proto *parent_cg_proto(struct proto *proto, | 928 | static inline struct cg_proto *parent_cg_proto(struct proto *proto, |
927 | struct cg_proto *cg_proto) | 929 | struct cg_proto *cg_proto) |
@@ -1007,9 +1009,8 @@ static inline void memcg_memory_allocated_add(struct cg_proto *prot, | |||
1007 | struct res_counter *fail; | 1009 | struct res_counter *fail; |
1008 | int ret; | 1010 | int ret; |
1009 | 1011 | ||
1010 | ret = res_counter_charge(prot->memory_allocated, | 1012 | ret = res_counter_charge_nofail(prot->memory_allocated, |
1011 | amt << PAGE_SHIFT, &fail); | 1013 | amt << PAGE_SHIFT, &fail); |
1012 | |||
1013 | if (ret < 0) | 1014 | if (ret < 0) |
1014 | *parent_status = OVER_LIMIT; | 1015 | *parent_status = OVER_LIMIT; |
1015 | } | 1016 | } |
@@ -1053,12 +1054,11 @@ sk_memory_allocated_add(struct sock *sk, int amt, int *parent_status) | |||
1053 | } | 1054 | } |
1054 | 1055 | ||
1055 | static inline void | 1056 | static inline void |
1056 | sk_memory_allocated_sub(struct sock *sk, int amt, int parent_status) | 1057 | sk_memory_allocated_sub(struct sock *sk, int amt) |
1057 | { | 1058 | { |
1058 | struct proto *prot = sk->sk_prot; | 1059 | struct proto *prot = sk->sk_prot; |
1059 | 1060 | ||
1060 | if (mem_cgroup_sockets_enabled && sk->sk_cgrp && | 1061 | if (mem_cgroup_sockets_enabled && sk->sk_cgrp) |
1061 | parent_status != OVER_LIMIT) /* Otherwise was uncharged already */ | ||
1062 | memcg_memory_allocated_sub(sk->sk_cgrp, amt); | 1062 | memcg_memory_allocated_sub(sk->sk_cgrp, amt); |
1063 | 1063 | ||
1064 | atomic_long_sub(amt, prot->memory_allocated); | 1064 | atomic_long_sub(amt, prot->memory_allocated); |
diff --git a/include/net/tcp.h b/include/net/tcp.h index 0118ea999f67..42c29bfbcee3 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -273,6 +273,14 @@ static inline int between(__u32 seq1, __u32 seq2, __u32 seq3) | |||
273 | return seq3 - seq2 >= seq1 - seq2; | 273 | return seq3 - seq2 >= seq1 - seq2; |
274 | } | 274 | } |
275 | 275 | ||
276 | static inline bool tcp_out_of_memory(struct sock *sk) | ||
277 | { | ||
278 | if (sk->sk_wmem_queued > SOCK_MIN_SNDBUF && | ||
279 | sk_memory_allocated(sk) > sk_prot_mem_limits(sk, 2)) | ||
280 | return true; | ||
281 | return false; | ||
282 | } | ||
283 | |||
276 | static inline bool tcp_too_many_orphans(struct sock *sk, int shift) | 284 | static inline bool tcp_too_many_orphans(struct sock *sk, int shift) |
277 | { | 285 | { |
278 | struct percpu_counter *ocp = sk->sk_prot->orphan_count; | 286 | struct percpu_counter *ocp = sk->sk_prot->orphan_count; |
@@ -283,13 +291,11 @@ static inline bool tcp_too_many_orphans(struct sock *sk, int shift) | |||
283 | if (orphans << shift > sysctl_tcp_max_orphans) | 291 | if (orphans << shift > sysctl_tcp_max_orphans) |
284 | return true; | 292 | return true; |
285 | } | 293 | } |
286 | |||
287 | if (sk->sk_wmem_queued > SOCK_MIN_SNDBUF && | ||
288 | sk_memory_allocated(sk) > sk_prot_mem_limits(sk, 2)) | ||
289 | return true; | ||
290 | return false; | 294 | return false; |
291 | } | 295 | } |
292 | 296 | ||
297 | extern bool tcp_check_oom(struct sock *sk, int shift); | ||
298 | |||
293 | /* syncookies: remember time of last synqueue overflow */ | 299 | /* syncookies: remember time of last synqueue overflow */ |
294 | static inline void tcp_synq_overflow(struct sock *sk) | 300 | static inline void tcp_synq_overflow(struct sock *sk) |
295 | { | 301 | { |
@@ -311,6 +317,8 @@ extern struct proto tcp_prot; | |||
311 | #define TCP_ADD_STATS_USER(net, field, val) SNMP_ADD_STATS_USER((net)->mib.tcp_statistics, field, val) | 317 | #define TCP_ADD_STATS_USER(net, field, val) SNMP_ADD_STATS_USER((net)->mib.tcp_statistics, field, val) |
312 | #define TCP_ADD_STATS(net, field, val) SNMP_ADD_STATS((net)->mib.tcp_statistics, field, val) | 318 | #define TCP_ADD_STATS(net, field, val) SNMP_ADD_STATS((net)->mib.tcp_statistics, field, val) |
313 | 319 | ||
320 | extern void tcp_init_mem(struct net *net); | ||
321 | |||
314 | extern void tcp_v4_err(struct sk_buff *skb, u32); | 322 | extern void tcp_v4_err(struct sk_buff *skb, u32); |
315 | 323 | ||
316 | extern void tcp_shutdown (struct sock *sk, int how); | 324 | extern void tcp_shutdown (struct sock *sk, int how); |