aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
Diffstat (limited to 'include/net')
-rw-r--r--include/net/9p/9p.h33
-rw-r--r--include/net/9p/client.h2
-rw-r--r--include/net/caif/cfctrl.h4
-rw-r--r--include/net/cfg80211.h15
-rw-r--r--include/net/cls_cgroup.h63
-rw-r--r--include/net/dn_dev.h8
-rw-r--r--include/net/dn_nsp.h16
-rw-r--r--include/net/dn_route.h4
-rw-r--r--include/net/dst.h6
-rw-r--r--include/net/genetlink.h15
-rw-r--r--include/net/ip.h13
-rw-r--r--include/net/ip6_fib.h10
-rw-r--r--include/net/ip6_tunnel.h2
-rw-r--r--include/net/ipip.h2
-rw-r--r--include/net/ipv6.h10
-rw-r--r--include/net/ipx.h8
-rw-r--r--include/net/mip6.h2
-rw-r--r--include/net/ndisc.h2
-rw-r--r--include/net/netfilter/nf_conntrack.h6
-rw-r--r--include/net/phonet/pn_dev.h1
-rw-r--r--include/net/pkt_sched.h2
-rw-r--r--include/net/route.h6
-rw-r--r--include/net/sch_generic.h27
-rw-r--r--include/net/sctp/structs.h6
-rw-r--r--include/net/sock.h57
-rw-r--r--include/net/tcp.h3
26 files changed, 209 insertions, 114 deletions
diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h
index a7fb54808a23..156c26bb8bd7 100644
--- a/include/net/9p/9p.h
+++ b/include/net/9p/9p.h
@@ -86,6 +86,10 @@ do { \
86 86
87/** 87/**
88 * enum p9_msg_t - 9P message types 88 * enum p9_msg_t - 9P message types
89 * @P9_TSTATFS: file system status request
90 * @P9_RSTATFS: file system status response
91 * @P9_TRENAME: rename request
92 * @P9_RRENAME: rename response
89 * @P9_TVERSION: version handshake request 93 * @P9_TVERSION: version handshake request
90 * @P9_RVERSION: version handshake response 94 * @P9_RVERSION: version handshake response
91 * @P9_TAUTH: request to establish authentication channel 95 * @P9_TAUTH: request to establish authentication channel
@@ -125,6 +129,10 @@ do { \
125 */ 129 */
126 130
127enum p9_msg_t { 131enum p9_msg_t {
132 P9_TSTATFS = 8,
133 P9_RSTATFS,
134 P9_TRENAME = 20,
135 P9_RRENAME,
128 P9_TVERSION = 100, 136 P9_TVERSION = 100,
129 P9_RVERSION, 137 P9_RVERSION,
130 P9_TAUTH = 102, 138 P9_TAUTH = 102,
@@ -350,6 +358,31 @@ struct p9_wstat {
350}; 358};
351 359
352/* Structures for Protocol Operations */ 360/* Structures for Protocol Operations */
361struct p9_tstatfs {
362 u32 fid;
363};
364
365struct p9_rstatfs {
366 u32 type;
367 u32 bsize;
368 u64 blocks;
369 u64 bfree;
370 u64 bavail;
371 u64 files;
372 u64 ffree;
373 u64 fsid;
374 u32 namelen;
375};
376
377struct p9_trename {
378 u32 fid;
379 u32 newdirfid;
380 struct p9_str name;
381};
382
383struct p9_rrename {
384};
385
353struct p9_tversion { 386struct p9_tversion {
354 u32 msize; 387 u32 msize;
355 struct p9_str version; 388 struct p9_str version;
diff --git a/include/net/9p/client.h b/include/net/9p/client.h
index 4f3760afc20f..7dd3ed85c782 100644
--- a/include/net/9p/client.h
+++ b/include/net/9p/client.h
@@ -195,6 +195,8 @@ struct p9_fid {
195 struct list_head dlist; /* list of all fids attached to a dentry */ 195 struct list_head dlist; /* list of all fids attached to a dentry */
196}; 196};
197 197
198int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb);
199int p9_client_rename(struct p9_fid *fid, struct p9_fid *newdirfid, char *name);
198int p9_client_version(struct p9_client *); 200int p9_client_version(struct p9_client *);
199struct p9_client *p9_client_create(const char *dev_name, char *options); 201struct p9_client *p9_client_create(const char *dev_name, char *options);
200void p9_client_destroy(struct p9_client *clnt); 202void p9_client_destroy(struct p9_client *clnt);
diff --git a/include/net/caif/cfctrl.h b/include/net/caif/cfctrl.h
index 997603f2bf4c..9402543fc20d 100644
--- a/include/net/caif/cfctrl.h
+++ b/include/net/caif/cfctrl.h
@@ -94,8 +94,8 @@ struct cfctrl_request_info {
94 enum cfctrl_cmd cmd; 94 enum cfctrl_cmd cmd;
95 u8 channel_id; 95 u8 channel_id;
96 struct cfctrl_link_param param; 96 struct cfctrl_link_param param;
97 struct cfctrl_request_info *next;
98 struct cflayer *client_layer; 97 struct cflayer *client_layer;
98 struct list_head list;
99}; 99};
100 100
101struct cfctrl { 101struct cfctrl {
@@ -103,7 +103,7 @@ struct cfctrl {
103 struct cfctrl_rsp res; 103 struct cfctrl_rsp res;
104 atomic_t req_seq_no; 104 atomic_t req_seq_no;
105 atomic_t rsp_seq_no; 105 atomic_t rsp_seq_no;
106 struct cfctrl_request_info *first_req; 106 struct list_head list;
107 /* Protects from simultaneous access to first_req list */ 107 /* Protects from simultaneous access to first_req list */
108 spinlock_t info_list_lock; 108 spinlock_t info_list_lock;
109#ifndef CAIF_NO_LOOP 109#ifndef CAIF_NO_LOOP
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 22ab9d88cf4a..a56bac1e69e0 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1369,26 +1369,15 @@ struct wiphy {
1369 char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); 1369 char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
1370}; 1370};
1371 1371
1372#ifdef CONFIG_NET_NS
1373static inline struct net *wiphy_net(struct wiphy *wiphy)
1374{
1375 return wiphy->_net;
1376}
1377
1378static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net)
1379{
1380 wiphy->_net = net;
1381}
1382#else
1383static inline struct net *wiphy_net(struct wiphy *wiphy) 1372static inline struct net *wiphy_net(struct wiphy *wiphy)
1384{ 1373{
1385 return &init_net; 1374 return read_pnet(&wiphy->_net);
1386} 1375}
1387 1376
1388static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net) 1377static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net)
1389{ 1378{
1379 write_pnet(&wiphy->_net, net);
1390} 1380}
1391#endif
1392 1381
1393/** 1382/**
1394 * wiphy_priv - return priv from wiphy 1383 * wiphy_priv - return priv from wiphy
diff --git a/include/net/cls_cgroup.h b/include/net/cls_cgroup.h
new file mode 100644
index 000000000000..726cc3536409
--- /dev/null
+++ b/include/net/cls_cgroup.h
@@ -0,0 +1,63 @@
1/*
2 * cls_cgroup.h Control Group Classifier
3 *
4 * Authors: Thomas Graf <tgraf@suug.ch>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
9 * any later version.
10 *
11 */
12
13#ifndef _NET_CLS_CGROUP_H
14#define _NET_CLS_CGROUP_H
15
16#include <linux/cgroup.h>
17#include <linux/hardirq.h>
18#include <linux/rcupdate.h>
19
20#ifdef CONFIG_CGROUPS
21struct cgroup_cls_state
22{
23 struct cgroup_subsys_state css;
24 u32 classid;
25};
26
27#ifdef CONFIG_NET_CLS_CGROUP
28static inline u32 task_cls_classid(struct task_struct *p)
29{
30 if (in_interrupt())
31 return 0;
32
33 return container_of(task_subsys_state(p, net_cls_subsys_id),
34 struct cgroup_cls_state, css)->classid;
35}
36#else
37extern int net_cls_subsys_id;
38
39static inline u32 task_cls_classid(struct task_struct *p)
40{
41 int id;
42 u32 classid = 0;
43
44 if (in_interrupt())
45 return 0;
46
47 rcu_read_lock();
48 id = rcu_dereference(net_cls_subsys_id);
49 if (id >= 0)
50 classid = container_of(task_subsys_state(p, id),
51 struct cgroup_cls_state, css)->classid;
52 rcu_read_unlock();
53
54 return classid;
55}
56#endif
57#else
58static inline u32 task_cls_classid(struct task_struct *p)
59{
60 return 0;
61}
62#endif
63#endif /* _NET_CLS_CGROUP_H */
diff --git a/include/net/dn_dev.h b/include/net/dn_dev.h
index 511a459ec10f..0916bbf3bdff 100644
--- a/include/net/dn_dev.h
+++ b/include/net/dn_dev.h
@@ -101,7 +101,7 @@ struct dn_short_packet {
101 __le16 dstnode; 101 __le16 dstnode;
102 __le16 srcnode; 102 __le16 srcnode;
103 __u8 forward; 103 __u8 forward;
104} __attribute__((packed)); 104} __packed;
105 105
106struct dn_long_packet { 106struct dn_long_packet {
107 __u8 msgflg; 107 __u8 msgflg;
@@ -115,7 +115,7 @@ struct dn_long_packet {
115 __u8 visit_ct; 115 __u8 visit_ct;
116 __u8 s_class; 116 __u8 s_class;
117 __u8 pt; 117 __u8 pt;
118} __attribute__((packed)); 118} __packed;
119 119
120/*------------------------- DRP - Routing messages ---------------------*/ 120/*------------------------- DRP - Routing messages ---------------------*/
121 121
@@ -132,7 +132,7 @@ struct endnode_hello_message {
132 __u8 mpd; 132 __u8 mpd;
133 __u8 datalen; 133 __u8 datalen;
134 __u8 data[2]; 134 __u8 data[2];
135} __attribute__((packed)); 135} __packed;
136 136
137struct rtnode_hello_message { 137struct rtnode_hello_message {
138 __u8 msgflg; 138 __u8 msgflg;
@@ -144,7 +144,7 @@ struct rtnode_hello_message {
144 __u8 area; 144 __u8 area;
145 __le16 timer; 145 __le16 timer;
146 __u8 mpd; 146 __u8 mpd;
147} __attribute__((packed)); 147} __packed;
148 148
149 149
150extern void dn_dev_init(void); 150extern void dn_dev_init(void);
diff --git a/include/net/dn_nsp.h b/include/net/dn_nsp.h
index 17d43d2db5ec..e43a2893f132 100644
--- a/include/net/dn_nsp.h
+++ b/include/net/dn_nsp.h
@@ -74,18 +74,18 @@ struct nsp_data_seg_msg {
74 __u8 msgflg; 74 __u8 msgflg;
75 __le16 dstaddr; 75 __le16 dstaddr;
76 __le16 srcaddr; 76 __le16 srcaddr;
77} __attribute__((packed)); 77} __packed;
78 78
79struct nsp_data_opt_msg { 79struct nsp_data_opt_msg {
80 __le16 acknum; 80 __le16 acknum;
81 __le16 segnum; 81 __le16 segnum;
82 __le16 lsflgs; 82 __le16 lsflgs;
83} __attribute__((packed)); 83} __packed;
84 84
85struct nsp_data_opt_msg1 { 85struct nsp_data_opt_msg1 {
86 __le16 acknum; 86 __le16 acknum;
87 __le16 segnum; 87 __le16 segnum;
88} __attribute__((packed)); 88} __packed;
89 89
90 90
91/* Acknowledgment Message (data/other data) */ 91/* Acknowledgment Message (data/other data) */
@@ -94,13 +94,13 @@ struct nsp_data_ack_msg {
94 __le16 dstaddr; 94 __le16 dstaddr;
95 __le16 srcaddr; 95 __le16 srcaddr;
96 __le16 acknum; 96 __le16 acknum;
97} __attribute__((packed)); 97} __packed;
98 98
99/* Connect Acknowledgment Message */ 99/* Connect Acknowledgment Message */
100struct nsp_conn_ack_msg { 100struct nsp_conn_ack_msg {
101 __u8 msgflg; 101 __u8 msgflg;
102 __le16 dstaddr; 102 __le16 dstaddr;
103} __attribute__((packed)); 103} __packed;
104 104
105 105
106/* Connect Initiate/Retransmit Initiate/Connect Confirm */ 106/* Connect Initiate/Retransmit Initiate/Connect Confirm */
@@ -117,7 +117,7 @@ struct nsp_conn_init_msg {
117#define NSP_FC_MASK 0x0c /* FC type mask */ 117#define NSP_FC_MASK 0x0c /* FC type mask */
118 __u8 info; 118 __u8 info;
119 __le16 segsize; 119 __le16 segsize;
120} __attribute__((packed)); 120} __packed;
121 121
122/* Disconnect Initiate/Disconnect Confirm */ 122/* Disconnect Initiate/Disconnect Confirm */
123struct nsp_disconn_init_msg { 123struct nsp_disconn_init_msg {
@@ -125,7 +125,7 @@ struct nsp_disconn_init_msg {
125 __le16 dstaddr; 125 __le16 dstaddr;
126 __le16 srcaddr; 126 __le16 srcaddr;
127 __le16 reason; 127 __le16 reason;
128} __attribute__((packed)); 128} __packed;
129 129
130 130
131 131
@@ -135,7 +135,7 @@ struct srcobj_fmt {
135 __le16 grpcode; 135 __le16 grpcode;
136 __le16 usrcode; 136 __le16 usrcode;
137 __u8 dlen; 137 __u8 dlen;
138} __attribute__((packed)); 138} __packed;
139 139
140/* 140/*
141 * A collection of functions for manipulating the sequence 141 * A collection of functions for manipulating the sequence
diff --git a/include/net/dn_route.h b/include/net/dn_route.h
index 60c9f22d8694..ccadab3aa3f6 100644
--- a/include/net/dn_route.h
+++ b/include/net/dn_route.h
@@ -65,9 +65,7 @@ extern void dn_rt_cache_flush(int delay);
65 * packets to the originating host. 65 * packets to the originating host.
66 */ 66 */
67struct dn_route { 67struct dn_route {
68 union { 68 struct dst_entry dst;
69 struct dst_entry dst;
70 } u;
71 69
72 struct flowi fl; 70 struct flowi fl;
73 71
diff --git a/include/net/dst.h b/include/net/dst.h
index 612069beda73..81d1413a8701 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -250,11 +250,11 @@ static inline void skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev)
250 * Linux networking. Thus, destinations are stackable. 250 * Linux networking. Thus, destinations are stackable.
251 */ 251 */
252 252
253static inline struct dst_entry *dst_pop(struct dst_entry *dst) 253static inline struct dst_entry *skb_dst_pop(struct sk_buff *skb)
254{ 254{
255 struct dst_entry *child = dst_clone(dst->child); 255 struct dst_entry *child = skb_dst(skb)->child;
256 256
257 dst_release(dst); 257 skb_dst_drop(skb);
258 return child; 258 return child;
259} 259}
260 260
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index eb551baafc04..f7dcd2c70412 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -68,26 +68,15 @@ struct genl_info {
68#endif 68#endif
69}; 69};
70 70
71#ifdef CONFIG_NET_NS
72static inline struct net *genl_info_net(struct genl_info *info) 71static inline struct net *genl_info_net(struct genl_info *info)
73{ 72{
74 return info->_net; 73 return read_pnet(&info->_net);
75} 74}
76 75
77static inline void genl_info_net_set(struct genl_info *info, struct net *net) 76static inline void genl_info_net_set(struct genl_info *info, struct net *net)
78{ 77{
79 info->_net = net; 78 write_pnet(&info->_net, net);
80} 79}
81#else
82static inline struct net *genl_info_net(struct genl_info *info)
83{
84 return &init_net;
85}
86
87static inline void genl_info_net_set(struct genl_info *info, struct net *net)
88{
89}
90#endif
91 80
92/** 81/**
93 * struct genl_ops - generic netlink operations 82 * struct genl_ops - generic netlink operations
diff --git a/include/net/ip.h b/include/net/ip.h
index 63548f0a44b1..d52f01180361 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -61,11 +61,14 @@ struct ipcm_cookie {
61struct ip_ra_chain { 61struct ip_ra_chain {
62 struct ip_ra_chain *next; 62 struct ip_ra_chain *next;
63 struct sock *sk; 63 struct sock *sk;
64 void (*destructor)(struct sock *); 64 union {
65 void (*destructor)(struct sock *);
66 struct sock *saved_sk;
67 };
68 struct rcu_head rcu;
65}; 69};
66 70
67extern struct ip_ra_chain *ip_ra_chain; 71extern struct ip_ra_chain *ip_ra_chain;
68extern rwlock_t ip_ra_lock;
69 72
70/* IP flags. */ 73/* IP flags. */
71#define IP_CE 0x8000 /* Flag: "Congestion" */ 74#define IP_CE 0x8000 /* Flag: "Congestion" */
@@ -358,11 +361,11 @@ enum ip_defrag_users {
358 IP_DEFRAG_LOCAL_DELIVER, 361 IP_DEFRAG_LOCAL_DELIVER,
359 IP_DEFRAG_CALL_RA_CHAIN, 362 IP_DEFRAG_CALL_RA_CHAIN,
360 IP_DEFRAG_CONNTRACK_IN, 363 IP_DEFRAG_CONNTRACK_IN,
361 __IP_DEFRAG_CONNTRACK_IN_END = IP_DEFRAG_CONNTRACK_IN + USHORT_MAX, 364 __IP_DEFRAG_CONNTRACK_IN_END = IP_DEFRAG_CONNTRACK_IN + USHRT_MAX,
362 IP_DEFRAG_CONNTRACK_OUT, 365 IP_DEFRAG_CONNTRACK_OUT,
363 __IP_DEFRAG_CONNTRACK_OUT_END = IP_DEFRAG_CONNTRACK_OUT + USHORT_MAX, 366 __IP_DEFRAG_CONNTRACK_OUT_END = IP_DEFRAG_CONNTRACK_OUT + USHRT_MAX,
364 IP_DEFRAG_CONNTRACK_BRIDGE_IN, 367 IP_DEFRAG_CONNTRACK_BRIDGE_IN,
365 __IP_DEFRAG_CONNTRACK_BRIDGE_IN = IP_DEFRAG_CONNTRACK_BRIDGE_IN + USHORT_MAX, 368 __IP_DEFRAG_CONNTRACK_BRIDGE_IN = IP_DEFRAG_CONNTRACK_BRIDGE_IN + USHRT_MAX,
366 IP_DEFRAG_VS_IN, 369 IP_DEFRAG_VS_IN,
367 IP_DEFRAG_VS_OUT, 370 IP_DEFRAG_VS_OUT,
368 IP_DEFRAG_VS_FWD 371 IP_DEFRAG_VS_FWD
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
index 4b1dc1161c37..062a823d311c 100644
--- a/include/net/ip6_fib.h
+++ b/include/net/ip6_fib.h
@@ -84,13 +84,11 @@ struct rt6key {
84struct fib6_table; 84struct fib6_table;
85 85
86struct rt6_info { 86struct rt6_info {
87 union { 87 struct dst_entry dst;
88 struct dst_entry dst;
89 } u;
90 88
91#define rt6i_dev u.dst.dev 89#define rt6i_dev dst.dev
92#define rt6i_nexthop u.dst.neighbour 90#define rt6i_nexthop dst.neighbour
93#define rt6i_expires u.dst.expires 91#define rt6i_expires dst.expires
94 92
95 /* 93 /*
96 * Tail elements of dst_entry (__refcnt etc.) 94 * Tail elements of dst_entry (__refcnt etc.)
diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h
index fbf9d1cda27b..fc94ec568a50 100644
--- a/include/net/ip6_tunnel.h
+++ b/include/net/ip6_tunnel.h
@@ -27,6 +27,6 @@ struct ipv6_tlv_tnl_enc_lim {
27 __u8 type; /* type-code for option */ 27 __u8 type; /* type-code for option */
28 __u8 length; /* option length */ 28 __u8 length; /* option length */
29 __u8 encap_limit; /* tunnel encapsulation limit */ 29 __u8 encap_limit; /* tunnel encapsulation limit */
30} __attribute__ ((packed)); 30} __packed;
31 31
32#endif 32#endif
diff --git a/include/net/ipip.h b/include/net/ipip.h
index 11e8513d2d07..65caea8b414f 100644
--- a/include/net/ipip.h
+++ b/include/net/ipip.h
@@ -50,7 +50,7 @@ struct ip_tunnel_prl_entry {
50 int pkt_len = skb->len - skb_transport_offset(skb); \ 50 int pkt_len = skb->len - skb_transport_offset(skb); \
51 \ 51 \
52 skb->ip_summed = CHECKSUM_NONE; \ 52 skb->ip_summed = CHECKSUM_NONE; \
53 ip_select_ident(iph, &rt->u.dst, NULL); \ 53 ip_select_ident(iph, &rt->dst, NULL); \
54 \ 54 \
55 err = ip_local_out(skb); \ 55 err = ip_local_out(skb); \
56 if (likely(net_xmit_eval(err) == 0)) { \ 56 if (likely(net_xmit_eval(err) == 0)) { \
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index eba5cc00325a..f5808d596aab 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -354,11 +354,11 @@ struct inet_frag_queue;
354enum ip6_defrag_users { 354enum ip6_defrag_users {
355 IP6_DEFRAG_LOCAL_DELIVER, 355 IP6_DEFRAG_LOCAL_DELIVER,
356 IP6_DEFRAG_CONNTRACK_IN, 356 IP6_DEFRAG_CONNTRACK_IN,
357 __IP6_DEFRAG_CONNTRACK_IN = IP6_DEFRAG_CONNTRACK_IN + USHORT_MAX, 357 __IP6_DEFRAG_CONNTRACK_IN = IP6_DEFRAG_CONNTRACK_IN + USHRT_MAX,
358 IP6_DEFRAG_CONNTRACK_OUT, 358 IP6_DEFRAG_CONNTRACK_OUT,
359 __IP6_DEFRAG_CONNTRACK_OUT = IP6_DEFRAG_CONNTRACK_OUT + USHORT_MAX, 359 __IP6_DEFRAG_CONNTRACK_OUT = IP6_DEFRAG_CONNTRACK_OUT + USHRT_MAX,
360 IP6_DEFRAG_CONNTRACK_BRIDGE_IN, 360 IP6_DEFRAG_CONNTRACK_BRIDGE_IN,
361 __IP6_DEFRAG_CONNTRACK_BRIDGE_IN = IP6_DEFRAG_CONNTRACK_BRIDGE_IN + USHORT_MAX, 361 __IP6_DEFRAG_CONNTRACK_BRIDGE_IN = IP6_DEFRAG_CONNTRACK_BRIDGE_IN + USHRT_MAX,
362}; 362};
363 363
364struct ip6_create_arg { 364struct ip6_create_arg {
@@ -551,6 +551,10 @@ extern int ipv6_ext_hdr(u8 nexthdr);
551 551
552extern int ipv6_find_tlv(struct sk_buff *skb, int offset, int type); 552extern int ipv6_find_tlv(struct sk_buff *skb, int offset, int type);
553 553
554extern struct in6_addr *fl6_update_dst(struct flowi *fl,
555 const struct ipv6_txoptions *opt,
556 struct in6_addr *orig);
557
554/* 558/*
555 * socket options (ipv6_sockglue.c) 559 * socket options (ipv6_sockglue.c)
556 */ 560 */
diff --git a/include/net/ipx.h b/include/net/ipx.h
index ef51a668ba19..05d7e4a88b49 100644
--- a/include/net/ipx.h
+++ b/include/net/ipx.h
@@ -27,9 +27,9 @@ struct ipx_address {
27#define IPX_MAX_PPROP_HOPS 8 27#define IPX_MAX_PPROP_HOPS 8
28 28
29struct ipxhdr { 29struct ipxhdr {
30 __be16 ipx_checksum __attribute__ ((packed)); 30 __be16 ipx_checksum __packed;
31#define IPX_NO_CHECKSUM cpu_to_be16(0xFFFF) 31#define IPX_NO_CHECKSUM cpu_to_be16(0xFFFF)
32 __be16 ipx_pktsize __attribute__ ((packed)); 32 __be16 ipx_pktsize __packed;
33 __u8 ipx_tctrl; 33 __u8 ipx_tctrl;
34 __u8 ipx_type; 34 __u8 ipx_type;
35#define IPX_TYPE_UNKNOWN 0x00 35#define IPX_TYPE_UNKNOWN 0x00
@@ -38,8 +38,8 @@ struct ipxhdr {
38#define IPX_TYPE_SPX 0x05 /* SPX protocol */ 38#define IPX_TYPE_SPX 0x05 /* SPX protocol */
39#define IPX_TYPE_NCP 0x11 /* $lots for docs on this (SPIT) */ 39#define IPX_TYPE_NCP 0x11 /* $lots for docs on this (SPIT) */
40#define IPX_TYPE_PPROP 0x14 /* complicated flood fill brdcast */ 40#define IPX_TYPE_PPROP 0x14 /* complicated flood fill brdcast */
41 struct ipx_address ipx_dest __attribute__ ((packed)); 41 struct ipx_address ipx_dest __packed;
42 struct ipx_address ipx_source __attribute__ ((packed)); 42 struct ipx_address ipx_source __packed;
43}; 43};
44 44
45static __inline__ struct ipxhdr *ipx_hdr(struct sk_buff *skb) 45static __inline__ struct ipxhdr *ipx_hdr(struct sk_buff *skb)
diff --git a/include/net/mip6.h b/include/net/mip6.h
index a83ad1982a90..26ba99b5a4b1 100644
--- a/include/net/mip6.h
+++ b/include/net/mip6.h
@@ -39,7 +39,7 @@ struct ip6_mh {
39 __u16 ip6mh_cksum; 39 __u16 ip6mh_cksum;
40 /* Followed by type specific messages */ 40 /* Followed by type specific messages */
41 __u8 data[0]; 41 __u8 data[0];
42} __attribute__ ((__packed__)); 42} __packed;
43 43
44#define IP6_MH_TYPE_BRR 0 /* Binding Refresh Request */ 44#define IP6_MH_TYPE_BRR 0 /* Binding Refresh Request */
45#define IP6_MH_TYPE_HOTI 1 /* HOTI Message */ 45#define IP6_MH_TYPE_HOTI 1 /* HOTI Message */
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index f76f22d05721..895997bc2ead 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -82,7 +82,7 @@ struct ra_msg {
82struct nd_opt_hdr { 82struct nd_opt_hdr {
83 __u8 nd_opt_type; 83 __u8 nd_opt_type;
84 __u8 nd_opt_len; 84 __u8 nd_opt_len;
85} __attribute__((__packed__)); 85} __packed;
86 86
87 87
88extern int ndisc_init(void); 88extern int ndisc_init(void);
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
index bde095f7e845..bbfdd9453087 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
@@ -152,11 +152,7 @@ extern struct net init_net;
152 152
153static inline struct net *nf_ct_net(const struct nf_conn *ct) 153static inline struct net *nf_ct_net(const struct nf_conn *ct)
154{ 154{
155#ifdef CONFIG_NET_NS 155 return read_pnet(&ct->ct_net);
156 return ct->ct_net;
157#else
158 return &init_net;
159#endif
160} 156}
161 157
162/* Alter reply tuple (maybe alter helper). */ 158/* Alter reply tuple (maybe alter helper). */
diff --git a/include/net/phonet/pn_dev.h b/include/net/phonet/pn_dev.h
index d7b989ca3d63..2d16783d5e20 100644
--- a/include/net/phonet/pn_dev.h
+++ b/include/net/phonet/pn_dev.h
@@ -34,6 +34,7 @@ struct phonet_device {
34 struct list_head list; 34 struct list_head list;
35 struct net_device *netdev; 35 struct net_device *netdev;
36 DECLARE_BITMAP(addrs, 64); 36 DECLARE_BITMAP(addrs, 64);
37 struct rcu_head rcu;
37}; 38};
38 39
39int phonet_device_init(void); 40int phonet_device_init(void);
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h
index 9d4d87cc970e..d9549af6929a 100644
--- a/include/net/pkt_sched.h
+++ b/include/net/pkt_sched.h
@@ -95,7 +95,7 @@ extern void __qdisc_run(struct Qdisc *q);
95 95
96static inline void qdisc_run(struct Qdisc *q) 96static inline void qdisc_run(struct Qdisc *q)
97{ 97{
98 if (!test_and_set_bit(__QDISC_STATE_RUNNING, &q->state)) 98 if (qdisc_run_begin(q))
99 __qdisc_run(q); 99 __qdisc_run(q);
100} 100}
101 101
diff --git a/include/net/route.h b/include/net/route.h
index af6cf4b4c9dc..bd732d62e1c3 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -50,9 +50,7 @@
50struct fib_nh; 50struct fib_nh;
51struct inet_peer; 51struct inet_peer;
52struct rtable { 52struct rtable {
53 union { 53 struct dst_entry dst;
54 struct dst_entry dst;
55 } u;
56 54
57 /* Cache lookup keys */ 55 /* Cache lookup keys */
58 struct flowi fl; 56 struct flowi fl;
@@ -144,7 +142,7 @@ extern void fib_add_ifaddr(struct in_ifaddr *);
144static inline void ip_rt_put(struct rtable * rt) 142static inline void ip_rt_put(struct rtable * rt)
145{ 143{
146 if (rt) 144 if (rt)
147 dst_release(&rt->u.dst); 145 dst_release(&rt->dst);
148} 146}
149 147
150#define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3) 148#define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3)
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 03ca5d826757..b35301b0c7b6 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -23,11 +23,17 @@ struct qdisc_rate_table {
23}; 23};
24 24
25enum qdisc_state_t { 25enum qdisc_state_t {
26 __QDISC_STATE_RUNNING,
27 __QDISC_STATE_SCHED, 26 __QDISC_STATE_SCHED,
28 __QDISC_STATE_DEACTIVATED, 27 __QDISC_STATE_DEACTIVATED,
29}; 28};
30 29
30/*
31 * following bits are only changed while qdisc lock is held
32 */
33enum qdisc___state_t {
34 __QDISC___STATE_RUNNING,
35};
36
31struct qdisc_size_table { 37struct qdisc_size_table {
32 struct list_head list; 38 struct list_head list;
33 struct tc_sizespec szopts; 39 struct tc_sizespec szopts;
@@ -72,10 +78,27 @@ struct Qdisc {
72 unsigned long state; 78 unsigned long state;
73 struct sk_buff_head q; 79 struct sk_buff_head q;
74 struct gnet_stats_basic_packed bstats; 80 struct gnet_stats_basic_packed bstats;
81 unsigned long __state;
75 struct gnet_stats_queue qstats; 82 struct gnet_stats_queue qstats;
76 struct rcu_head rcu_head; 83 struct rcu_head rcu_head;
84 spinlock_t busylock;
77}; 85};
78 86
87static inline bool qdisc_is_running(struct Qdisc *qdisc)
88{
89 return test_bit(__QDISC___STATE_RUNNING, &qdisc->__state);
90}
91
92static inline bool qdisc_run_begin(struct Qdisc *qdisc)
93{
94 return !__test_and_set_bit(__QDISC___STATE_RUNNING, &qdisc->__state);
95}
96
97static inline void qdisc_run_end(struct Qdisc *qdisc)
98{
99 __clear_bit(__QDISC___STATE_RUNNING, &qdisc->__state);
100}
101
79struct Qdisc_class_ops { 102struct Qdisc_class_ops {
80 /* Child qdisc manipulation */ 103 /* Child qdisc manipulation */
81 struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *); 104 struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 6173c619913a..f9e7473613bd 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -443,7 +443,7 @@ struct sctp_signed_cookie {
443 __u8 signature[SCTP_SECRET_SIZE]; 443 __u8 signature[SCTP_SECRET_SIZE];
444 __u32 __pad; /* force sctp_cookie alignment to 64 bits */ 444 __u32 __pad; /* force sctp_cookie alignment to 64 bits */
445 struct sctp_cookie c; 445 struct sctp_cookie c;
446} __attribute__((packed)); 446} __packed;
447 447
448/* This is another convenience type to allocate memory for address 448/* This is another convenience type to allocate memory for address
449 * params for the maximum size and pass such structures around 449 * params for the maximum size and pass such structures around
@@ -488,7 +488,7 @@ typedef struct sctp_sender_hb_info {
488 union sctp_addr daddr; 488 union sctp_addr daddr;
489 unsigned long sent_at; 489 unsigned long sent_at;
490 __u64 hb_nonce; 490 __u64 hb_nonce;
491} __attribute__((packed)) sctp_sender_hb_info_t; 491} __packed sctp_sender_hb_info_t;
492 492
493/* 493/*
494 * RFC 2960 1.3.2 Sequenced Delivery within Streams 494 * RFC 2960 1.3.2 Sequenced Delivery within Streams
@@ -876,7 +876,7 @@ struct sctp_transport {
876 876
877 /* Reference counting. */ 877 /* Reference counting. */
878 atomic_t refcnt; 878 atomic_t refcnt;
879 int dead:1, 879 __u32 dead:1,
880 /* RTO-Pending : A flag used to track if one of the DATA 880 /* RTO-Pending : A flag used to track if one of the DATA
881 * chunks sent to this address is currently being 881 * chunks sent to this address is currently being
882 * used to compute a RTT. If this flag is 0, 882 * used to compute a RTT. If this flag is 0,
diff --git a/include/net/sock.h b/include/net/sock.h
index 5697caf8cc76..f8acf38f092f 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -312,7 +312,7 @@ struct sock {
312 void *sk_security; 312 void *sk_security;
313#endif 313#endif
314 __u32 sk_mark; 314 __u32 sk_mark;
315 /* XXX 4 bytes hole on 64 bit */ 315 u32 sk_classid;
316 void (*sk_state_change)(struct sock *sk); 316 void (*sk_state_change)(struct sock *sk);
317 void (*sk_data_ready)(struct sock *sk, int bytes); 317 void (*sk_data_ready)(struct sock *sk, int bytes);
318 void (*sk_write_space)(struct sock *sk); 318 void (*sk_write_space)(struct sock *sk);
@@ -1026,15 +1026,23 @@ extern void release_sock(struct sock *sk);
1026 SINGLE_DEPTH_NESTING) 1026 SINGLE_DEPTH_NESTING)
1027#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) 1027#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock))
1028 1028
1029static inline void lock_sock_bh(struct sock *sk) 1029extern bool lock_sock_fast(struct sock *sk);
1030/**
1031 * unlock_sock_fast - complement of lock_sock_fast
1032 * @sk: socket
1033 * @slow: slow mode
1034 *
1035 * fast unlock socket for user context.
1036 * If slow mode is on, we call regular release_sock()
1037 */
1038static inline void unlock_sock_fast(struct sock *sk, bool slow)
1030{ 1039{
1031 spin_lock_bh(&sk->sk_lock.slock); 1040 if (slow)
1041 release_sock(sk);
1042 else
1043 spin_unlock_bh(&sk->sk_lock.slock);
1032} 1044}
1033 1045
1034static inline void unlock_sock_bh(struct sock *sk)
1035{
1036 spin_unlock_bh(&sk->sk_lock.slock);
1037}
1038 1046
1039extern struct sock *sk_alloc(struct net *net, int family, 1047extern struct sock *sk_alloc(struct net *net, int family,
1040 gfp_t priority, 1048 gfp_t priority,
@@ -1074,6 +1082,14 @@ extern void *sock_kmalloc(struct sock *sk, int size,
1074extern void sock_kfree_s(struct sock *sk, void *mem, int size); 1082extern void sock_kfree_s(struct sock *sk, void *mem, int size);
1075extern void sk_send_sigurg(struct sock *sk); 1083extern void sk_send_sigurg(struct sock *sk);
1076 1084
1085#ifdef CONFIG_CGROUPS
1086extern void sock_update_classid(struct sock *sk);
1087#else
1088static inline void sock_update_classid(struct sock *sk)
1089{
1090}
1091#endif
1092
1077/* 1093/*
1078 * Functions to fill in entries in struct proto_ops when a protocol 1094 * Functions to fill in entries in struct proto_ops when a protocol
1079 * does not implement a particular function. 1095 * does not implement a particular function.
@@ -1404,7 +1420,7 @@ static inline int sk_has_allocations(const struct sock *sk)
1404 1420
1405/** 1421/**
1406 * wq_has_sleeper - check if there are any waiting processes 1422 * wq_has_sleeper - check if there are any waiting processes
1407 * @sk: struct socket_wq 1423 * @wq: struct socket_wq
1408 * 1424 *
1409 * Returns true if socket_wq has waiting processes 1425 * Returns true if socket_wq has waiting processes
1410 * 1426 *
@@ -1508,20 +1524,7 @@ extern void sk_stop_timer(struct sock *sk, struct timer_list* timer);
1508 1524
1509extern int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb); 1525extern int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
1510 1526
1511static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) 1527extern int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb);
1512{
1513 /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces
1514 number of warnings when compiling with -W --ANK
1515 */
1516 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
1517 (unsigned)sk->sk_rcvbuf)
1518 return -ENOMEM;
1519 skb_set_owner_r(skb, sk);
1520 skb_queue_tail(&sk->sk_error_queue, skb);
1521 if (!sock_flag(sk, SOCK_DEAD))
1522 sk->sk_data_ready(sk, skb->len);
1523 return 0;
1524}
1525 1528
1526/* 1529/*
1527 * Recover an error report and clear atomically 1530 * Recover an error report and clear atomically
@@ -1708,19 +1711,13 @@ static inline void sk_eat_skb(struct sock *sk, struct sk_buff *skb, int copied_e
1708static inline 1711static inline
1709struct net *sock_net(const struct sock *sk) 1712struct net *sock_net(const struct sock *sk)
1710{ 1713{
1711#ifdef CONFIG_NET_NS 1714 return read_pnet(&sk->sk_net);
1712 return sk->sk_net;
1713#else
1714 return &init_net;
1715#endif
1716} 1715}
1717 1716
1718static inline 1717static inline
1719void sock_net_set(struct sock *sk, struct net *net) 1718void sock_net_set(struct sock *sk, struct net *net)
1720{ 1719{
1721#ifdef CONFIG_NET_NS 1720 write_pnet(&sk->sk_net, net);
1722 sk->sk_net = net;
1723#endif
1724} 1721}
1725 1722
1726/* 1723/*
diff --git a/include/net/tcp.h b/include/net/tcp.h
index a1449144848a..573166484413 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1413,7 +1413,8 @@ struct tcp_iter_state {
1413 sa_family_t family; 1413 sa_family_t family;
1414 enum tcp_seq_states state; 1414 enum tcp_seq_states state;
1415 struct sock *syn_wait_sk; 1415 struct sock *syn_wait_sk;
1416 int bucket, sbucket, num, uid; 1416 int bucket, offset, sbucket, num, uid;
1417 loff_t last_pos;
1417}; 1418};
1418 1419
1419extern int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo); 1420extern int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo);