diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-11-18 13:23:21 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-11-18 13:23:21 -0500 |
commit | 638cbac8de9b57345a9446e107b6aebc10b58970 (patch) | |
tree | e445fe3a1b8ad718d7ee770ed1c7a43e3eb5a611 /net | |
parent | f055408957750cf759162c364c2a4dfe19765844 (diff) | |
parent | fc71fe40d2bedcc57d3406bf2050481f8b3441b6 (diff) |
Merge branch 'master'
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/ip_fragment.c | 40 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_conntrack_ftp.c | 4 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_conntrack_irc.c | 4 | ||||
-rw-r--r-- | net/ipv4/netfilter/ip_conntrack_tftp.c | 4 | ||||
-rw-r--r-- | net/ipv4/tcp_highspeed.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 4 | ||||
-rw-r--r-- | net/ipv6/addrconf.c | 5 | ||||
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 2 | ||||
-rw-r--r-- | net/ipv6/reassembly.c | 41 | ||||
-rw-r--r-- | net/ipv6/route.c | 2 | ||||
-rw-r--r-- | net/llc/af_llc.c | 5 | ||||
-rw-r--r-- | net/llc/llc_c_ac.c | 20 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_core.c | 9 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_standalone.c | 2 | ||||
-rw-r--r-- | net/sched/Kconfig | 37 | ||||
-rw-r--r-- | net/sunrpc/svcsock.c | 1 |
16 files changed, 77 insertions, 105 deletions
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index e7d26d9943c2..8ce0ce2ee48e 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -71,7 +71,7 @@ struct ipfrag_skb_cb | |||
71 | 71 | ||
72 | /* Describe an entry in the "incomplete datagrams" queue. */ | 72 | /* Describe an entry in the "incomplete datagrams" queue. */ |
73 | struct ipq { | 73 | struct ipq { |
74 | struct ipq *next; /* linked list pointers */ | 74 | struct hlist_node list; |
75 | struct list_head lru_list; /* lru list member */ | 75 | struct list_head lru_list; /* lru list member */ |
76 | u32 user; | 76 | u32 user; |
77 | u32 saddr; | 77 | u32 saddr; |
@@ -89,7 +89,6 @@ struct ipq { | |||
89 | spinlock_t lock; | 89 | spinlock_t lock; |
90 | atomic_t refcnt; | 90 | atomic_t refcnt; |
91 | struct timer_list timer; /* when will this queue expire? */ | 91 | struct timer_list timer; /* when will this queue expire? */ |
92 | struct ipq **pprev; | ||
93 | int iif; | 92 | int iif; |
94 | struct timeval stamp; | 93 | struct timeval stamp; |
95 | }; | 94 | }; |
@@ -99,7 +98,7 @@ struct ipq { | |||
99 | #define IPQ_HASHSZ 64 | 98 | #define IPQ_HASHSZ 64 |
100 | 99 | ||
101 | /* Per-bucket lock is easy to add now. */ | 100 | /* Per-bucket lock is easy to add now. */ |
102 | static struct ipq *ipq_hash[IPQ_HASHSZ]; | 101 | static struct hlist_head ipq_hash[IPQ_HASHSZ]; |
103 | static DEFINE_RWLOCK(ipfrag_lock); | 102 | static DEFINE_RWLOCK(ipfrag_lock); |
104 | static u32 ipfrag_hash_rnd; | 103 | static u32 ipfrag_hash_rnd; |
105 | static LIST_HEAD(ipq_lru_list); | 104 | static LIST_HEAD(ipq_lru_list); |
@@ -107,9 +106,7 @@ int ip_frag_nqueues = 0; | |||
107 | 106 | ||
108 | static __inline__ void __ipq_unlink(struct ipq *qp) | 107 | static __inline__ void __ipq_unlink(struct ipq *qp) |
109 | { | 108 | { |
110 | if(qp->next) | 109 | hlist_del(&qp->list); |
111 | qp->next->pprev = qp->pprev; | ||
112 | *qp->pprev = qp->next; | ||
113 | list_del(&qp->lru_list); | 110 | list_del(&qp->lru_list); |
114 | ip_frag_nqueues--; | 111 | ip_frag_nqueues--; |
115 | } | 112 | } |
@@ -139,27 +136,18 @@ static void ipfrag_secret_rebuild(unsigned long dummy) | |||
139 | get_random_bytes(&ipfrag_hash_rnd, sizeof(u32)); | 136 | get_random_bytes(&ipfrag_hash_rnd, sizeof(u32)); |
140 | for (i = 0; i < IPQ_HASHSZ; i++) { | 137 | for (i = 0; i < IPQ_HASHSZ; i++) { |
141 | struct ipq *q; | 138 | struct ipq *q; |
139 | struct hlist_node *p, *n; | ||
142 | 140 | ||
143 | q = ipq_hash[i]; | 141 | hlist_for_each_entry_safe(q, p, n, &ipq_hash[i], list) { |
144 | while (q) { | ||
145 | struct ipq *next = q->next; | ||
146 | unsigned int hval = ipqhashfn(q->id, q->saddr, | 142 | unsigned int hval = ipqhashfn(q->id, q->saddr, |
147 | q->daddr, q->protocol); | 143 | q->daddr, q->protocol); |
148 | 144 | ||
149 | if (hval != i) { | 145 | if (hval != i) { |
150 | /* Unlink. */ | 146 | hlist_del(&q->list); |
151 | if (q->next) | ||
152 | q->next->pprev = q->pprev; | ||
153 | *q->pprev = q->next; | ||
154 | 147 | ||
155 | /* Relink to new hash chain. */ | 148 | /* Relink to new hash chain. */ |
156 | if ((q->next = ipq_hash[hval]) != NULL) | 149 | hlist_add_head(&q->list, &ipq_hash[hval]); |
157 | q->next->pprev = &q->next; | ||
158 | ipq_hash[hval] = q; | ||
159 | q->pprev = &ipq_hash[hval]; | ||
160 | } | 150 | } |
161 | |||
162 | q = next; | ||
163 | } | 151 | } |
164 | } | 152 | } |
165 | write_unlock(&ipfrag_lock); | 153 | write_unlock(&ipfrag_lock); |
@@ -310,14 +298,16 @@ out: | |||
310 | static struct ipq *ip_frag_intern(unsigned int hash, struct ipq *qp_in) | 298 | static struct ipq *ip_frag_intern(unsigned int hash, struct ipq *qp_in) |
311 | { | 299 | { |
312 | struct ipq *qp; | 300 | struct ipq *qp; |
313 | 301 | #ifdef CONFIG_SMP | |
302 | struct hlist_node *n; | ||
303 | #endif | ||
314 | write_lock(&ipfrag_lock); | 304 | write_lock(&ipfrag_lock); |
315 | #ifdef CONFIG_SMP | 305 | #ifdef CONFIG_SMP |
316 | /* With SMP race we have to recheck hash table, because | 306 | /* With SMP race we have to recheck hash table, because |
317 | * such entry could be created on other cpu, while we | 307 | * such entry could be created on other cpu, while we |
318 | * promoted read lock to write lock. | 308 | * promoted read lock to write lock. |
319 | */ | 309 | */ |
320 | for(qp = ipq_hash[hash]; qp; qp = qp->next) { | 310 | hlist_for_each_entry(qp, n, &ipq_hash[hash], list) { |
321 | if(qp->id == qp_in->id && | 311 | if(qp->id == qp_in->id && |
322 | qp->saddr == qp_in->saddr && | 312 | qp->saddr == qp_in->saddr && |
323 | qp->daddr == qp_in->daddr && | 313 | qp->daddr == qp_in->daddr && |
@@ -337,10 +327,7 @@ static struct ipq *ip_frag_intern(unsigned int hash, struct ipq *qp_in) | |||
337 | atomic_inc(&qp->refcnt); | 327 | atomic_inc(&qp->refcnt); |
338 | 328 | ||
339 | atomic_inc(&qp->refcnt); | 329 | atomic_inc(&qp->refcnt); |
340 | if((qp->next = ipq_hash[hash]) != NULL) | 330 | hlist_add_head(&qp->list, &ipq_hash[hash]); |
341 | qp->next->pprev = &qp->next; | ||
342 | ipq_hash[hash] = qp; | ||
343 | qp->pprev = &ipq_hash[hash]; | ||
344 | INIT_LIST_HEAD(&qp->lru_list); | 331 | INIT_LIST_HEAD(&qp->lru_list); |
345 | list_add_tail(&qp->lru_list, &ipq_lru_list); | 332 | list_add_tail(&qp->lru_list, &ipq_lru_list); |
346 | ip_frag_nqueues++; | 333 | ip_frag_nqueues++; |
@@ -392,9 +379,10 @@ static inline struct ipq *ip_find(struct iphdr *iph, u32 user) | |||
392 | __u8 protocol = iph->protocol; | 379 | __u8 protocol = iph->protocol; |
393 | unsigned int hash = ipqhashfn(id, saddr, daddr, protocol); | 380 | unsigned int hash = ipqhashfn(id, saddr, daddr, protocol); |
394 | struct ipq *qp; | 381 | struct ipq *qp; |
382 | struct hlist_node *n; | ||
395 | 383 | ||
396 | read_lock(&ipfrag_lock); | 384 | read_lock(&ipfrag_lock); |
397 | for(qp = ipq_hash[hash]; qp; qp = qp->next) { | 385 | hlist_for_each_entry(qp, n, &ipq_hash[hash], list) { |
398 | if(qp->id == id && | 386 | if(qp->id == id && |
399 | qp->saddr == saddr && | 387 | qp->saddr == saddr && |
400 | qp->daddr == daddr && | 388 | qp->daddr == daddr && |
diff --git a/net/ipv4/netfilter/ip_conntrack_ftp.c b/net/ipv4/netfilter/ip_conntrack_ftp.c index d77d6b3f5f80..59e12b02b22c 100644 --- a/net/ipv4/netfilter/ip_conntrack_ftp.c +++ b/net/ipv4/netfilter/ip_conntrack_ftp.c | |||
@@ -29,9 +29,9 @@ static char *ftp_buffer; | |||
29 | static DEFINE_SPINLOCK(ip_ftp_lock); | 29 | static DEFINE_SPINLOCK(ip_ftp_lock); |
30 | 30 | ||
31 | #define MAX_PORTS 8 | 31 | #define MAX_PORTS 8 |
32 | static short ports[MAX_PORTS]; | 32 | static unsigned short ports[MAX_PORTS]; |
33 | static int ports_c; | 33 | static int ports_c; |
34 | module_param_array(ports, short, &ports_c, 0400); | 34 | module_param_array(ports, ushort, &ports_c, 0400); |
35 | 35 | ||
36 | static int loose; | 36 | static int loose; |
37 | module_param(loose, int, 0600); | 37 | module_param(loose, int, 0600); |
diff --git a/net/ipv4/netfilter/ip_conntrack_irc.c b/net/ipv4/netfilter/ip_conntrack_irc.c index 15457415a4f3..2dea1db14406 100644 --- a/net/ipv4/netfilter/ip_conntrack_irc.c +++ b/net/ipv4/netfilter/ip_conntrack_irc.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include <linux/moduleparam.h> | 34 | #include <linux/moduleparam.h> |
35 | 35 | ||
36 | #define MAX_PORTS 8 | 36 | #define MAX_PORTS 8 |
37 | static short ports[MAX_PORTS]; | 37 | static unsigned short ports[MAX_PORTS]; |
38 | static int ports_c; | 38 | static int ports_c; |
39 | static int max_dcc_channels = 8; | 39 | static int max_dcc_channels = 8; |
40 | static unsigned int dcc_timeout = 300; | 40 | static unsigned int dcc_timeout = 300; |
@@ -52,7 +52,7 @@ EXPORT_SYMBOL_GPL(ip_nat_irc_hook); | |||
52 | MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>"); | 52 | MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>"); |
53 | MODULE_DESCRIPTION("IRC (DCC) connection tracking helper"); | 53 | MODULE_DESCRIPTION("IRC (DCC) connection tracking helper"); |
54 | MODULE_LICENSE("GPL"); | 54 | MODULE_LICENSE("GPL"); |
55 | module_param_array(ports, short, &ports_c, 0400); | 55 | module_param_array(ports, ushort, &ports_c, 0400); |
56 | MODULE_PARM_DESC(ports, "port numbers of IRC servers"); | 56 | MODULE_PARM_DESC(ports, "port numbers of IRC servers"); |
57 | module_param(max_dcc_channels, int, 0400); | 57 | module_param(max_dcc_channels, int, 0400); |
58 | MODULE_PARM_DESC(max_dcc_channels, "max number of expected DCC channels per IRC session"); | 58 | MODULE_PARM_DESC(max_dcc_channels, "max number of expected DCC channels per IRC session"); |
diff --git a/net/ipv4/netfilter/ip_conntrack_tftp.c b/net/ipv4/netfilter/ip_conntrack_tftp.c index a78736b8525d..d3c5a371f993 100644 --- a/net/ipv4/netfilter/ip_conntrack_tftp.c +++ b/net/ipv4/netfilter/ip_conntrack_tftp.c | |||
@@ -26,9 +26,9 @@ MODULE_DESCRIPTION("tftp connection tracking helper"); | |||
26 | MODULE_LICENSE("GPL"); | 26 | MODULE_LICENSE("GPL"); |
27 | 27 | ||
28 | #define MAX_PORTS 8 | 28 | #define MAX_PORTS 8 |
29 | static short ports[MAX_PORTS]; | 29 | static unsigned short ports[MAX_PORTS]; |
30 | static int ports_c; | 30 | static int ports_c; |
31 | module_param_array(ports, short, &ports_c, 0400); | 31 | module_param_array(ports, ushort, &ports_c, 0400); |
32 | MODULE_PARM_DESC(ports, "port numbers of tftp servers"); | 32 | MODULE_PARM_DESC(ports, "port numbers of tftp servers"); |
33 | 33 | ||
34 | #if 0 | 34 | #if 0 |
diff --git a/net/ipv4/tcp_highspeed.c b/net/ipv4/tcp_highspeed.c index 82b3c189bd7d..63cf7e540847 100644 --- a/net/ipv4/tcp_highspeed.c +++ b/net/ipv4/tcp_highspeed.c | |||
@@ -111,7 +111,7 @@ static void hstcp_init(struct sock *sk) | |||
111 | } | 111 | } |
112 | 112 | ||
113 | static void hstcp_cong_avoid(struct sock *sk, u32 adk, u32 rtt, | 113 | static void hstcp_cong_avoid(struct sock *sk, u32 adk, u32 rtt, |
114 | u32 in_flight, u32 pkts_acked) | 114 | u32 in_flight, int data_acked) |
115 | { | 115 | { |
116 | struct tcp_sock *tp = tcp_sk(sk); | 116 | struct tcp_sock *tp = tcp_sk(sk); |
117 | struct hstcp *ca = inet_csk_ca(sk); | 117 | struct hstcp *ca = inet_csk_ca(sk); |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 40a26b7157b4..bf2e23086bce 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -367,7 +367,7 @@ static void tcp_rcv_rtt_update(struct tcp_sock *tp, u32 sample, int win_dep) | |||
367 | * are stalled on filesystem I/O. | 367 | * are stalled on filesystem I/O. |
368 | * | 368 | * |
369 | * Also, since we are only going for a minimum in the | 369 | * Also, since we are only going for a minimum in the |
370 | * non-timestamp case, we do not smoother things out | 370 | * non-timestamp case, we do not smooth things out |
371 | * else with timestamps disabled convergence takes too | 371 | * else with timestamps disabled convergence takes too |
372 | * long. | 372 | * long. |
373 | */ | 373 | */ |
@@ -546,7 +546,7 @@ static void tcp_rtt_estimator(struct sock *sk, const __u32 mrtt) | |||
546 | * | 546 | * |
547 | * Funny. This algorithm seems to be very broken. | 547 | * Funny. This algorithm seems to be very broken. |
548 | * These formulae increase RTO, when it should be decreased, increase | 548 | * These formulae increase RTO, when it should be decreased, increase |
549 | * too slowly, when it should be increased fastly, decrease too fastly | 549 | * too slowly, when it should be increased quickly, decrease too quickly |
550 | * etc. I guess in BSD RTO takes ONE value, so that it is absolutely | 550 | * etc. I guess in BSD RTO takes ONE value, so that it is absolutely |
551 | * does not matter how to _calculate_ it. Seems, it was trap | 551 | * does not matter how to _calculate_ it. Seems, it was trap |
552 | * that VJ failed to avoid. 8) | 552 | * that VJ failed to avoid. 8) |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index ddcf7754eec2..56a09a4ac410 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -1045,9 +1045,10 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev, | |||
1045 | } | 1045 | } |
1046 | #endif | 1046 | #endif |
1047 | /* Rule 8: Use longest matching prefix */ | 1047 | /* Rule 8: Use longest matching prefix */ |
1048 | if (hiscore.rule < 8) | 1048 | if (hiscore.rule < 8) { |
1049 | hiscore.matchlen = ipv6_addr_diff(&ifa_result->addr, daddr); | 1049 | hiscore.matchlen = ipv6_addr_diff(&ifa_result->addr, daddr); |
1050 | score.rule++; | 1050 | hiscore.rule++; |
1051 | } | ||
1051 | score.matchlen = ipv6_addr_diff(&ifa->addr, daddr); | 1052 | score.matchlen = ipv6_addr_diff(&ifa->addr, daddr); |
1052 | if (score.matchlen > hiscore.matchlen) { | 1053 | if (score.matchlen > hiscore.matchlen) { |
1053 | score.rule = 8; | 1054 | score.rule = 8; |
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 003fd99ff597..25757ade989f 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -287,7 +287,7 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname, | |||
287 | { | 287 | { |
288 | struct ipv6_txoptions *opt; | 288 | struct ipv6_txoptions *opt; |
289 | if (optlen == 0) | 289 | if (optlen == 0) |
290 | optval = 0; | 290 | optval = NULL; |
291 | 291 | ||
292 | /* hop-by-hop / destination options are privileged option */ | 292 | /* hop-by-hop / destination options are privileged option */ |
293 | retv = -EPERM; | 293 | retv = -EPERM; |
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index e4fe9ee484dd..5d316cb72ec9 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c | |||
@@ -74,7 +74,7 @@ struct ip6frag_skb_cb | |||
74 | 74 | ||
75 | struct frag_queue | 75 | struct frag_queue |
76 | { | 76 | { |
77 | struct frag_queue *next; | 77 | struct hlist_node list; |
78 | struct list_head lru_list; /* lru list member */ | 78 | struct list_head lru_list; /* lru list member */ |
79 | 79 | ||
80 | __u32 id; /* fragment id */ | 80 | __u32 id; /* fragment id */ |
@@ -95,14 +95,13 @@ struct frag_queue | |||
95 | #define FIRST_IN 2 | 95 | #define FIRST_IN 2 |
96 | #define LAST_IN 1 | 96 | #define LAST_IN 1 |
97 | __u16 nhoffset; | 97 | __u16 nhoffset; |
98 | struct frag_queue **pprev; | ||
99 | }; | 98 | }; |
100 | 99 | ||
101 | /* Hash table. */ | 100 | /* Hash table. */ |
102 | 101 | ||
103 | #define IP6Q_HASHSZ 64 | 102 | #define IP6Q_HASHSZ 64 |
104 | 103 | ||
105 | static struct frag_queue *ip6_frag_hash[IP6Q_HASHSZ]; | 104 | static struct hlist_head ip6_frag_hash[IP6Q_HASHSZ]; |
106 | static DEFINE_RWLOCK(ip6_frag_lock); | 105 | static DEFINE_RWLOCK(ip6_frag_lock); |
107 | static u32 ip6_frag_hash_rnd; | 106 | static u32 ip6_frag_hash_rnd; |
108 | static LIST_HEAD(ip6_frag_lru_list); | 107 | static LIST_HEAD(ip6_frag_lru_list); |
@@ -110,9 +109,7 @@ int ip6_frag_nqueues = 0; | |||
110 | 109 | ||
111 | static __inline__ void __fq_unlink(struct frag_queue *fq) | 110 | static __inline__ void __fq_unlink(struct frag_queue *fq) |
112 | { | 111 | { |
113 | if(fq->next) | 112 | hlist_del(&fq->list); |
114 | fq->next->pprev = fq->pprev; | ||
115 | *fq->pprev = fq->next; | ||
116 | list_del(&fq->lru_list); | 113 | list_del(&fq->lru_list); |
117 | ip6_frag_nqueues--; | 114 | ip6_frag_nqueues--; |
118 | } | 115 | } |
@@ -163,28 +160,21 @@ static void ip6_frag_secret_rebuild(unsigned long dummy) | |||
163 | get_random_bytes(&ip6_frag_hash_rnd, sizeof(u32)); | 160 | get_random_bytes(&ip6_frag_hash_rnd, sizeof(u32)); |
164 | for (i = 0; i < IP6Q_HASHSZ; i++) { | 161 | for (i = 0; i < IP6Q_HASHSZ; i++) { |
165 | struct frag_queue *q; | 162 | struct frag_queue *q; |
163 | struct hlist_node *p, *n; | ||
166 | 164 | ||
167 | q = ip6_frag_hash[i]; | 165 | hlist_for_each_entry_safe(q, p, n, &ip6_frag_hash[i], list) { |
168 | while (q) { | ||
169 | struct frag_queue *next = q->next; | ||
170 | unsigned int hval = ip6qhashfn(q->id, | 166 | unsigned int hval = ip6qhashfn(q->id, |
171 | &q->saddr, | 167 | &q->saddr, |
172 | &q->daddr); | 168 | &q->daddr); |
173 | 169 | ||
174 | if (hval != i) { | 170 | if (hval != i) { |
175 | /* Unlink. */ | 171 | hlist_del(&q->list); |
176 | if (q->next) | ||
177 | q->next->pprev = q->pprev; | ||
178 | *q->pprev = q->next; | ||
179 | 172 | ||
180 | /* Relink to new hash chain. */ | 173 | /* Relink to new hash chain. */ |
181 | if ((q->next = ip6_frag_hash[hval]) != NULL) | 174 | hlist_add_head(&q->list, |
182 | q->next->pprev = &q->next; | 175 | &ip6_frag_hash[hval]); |
183 | ip6_frag_hash[hval] = q; | ||
184 | q->pprev = &ip6_frag_hash[hval]; | ||
185 | } | ||
186 | 176 | ||
187 | q = next; | 177 | } |
188 | } | 178 | } |
189 | } | 179 | } |
190 | write_unlock(&ip6_frag_lock); | 180 | write_unlock(&ip6_frag_lock); |
@@ -337,10 +327,13 @@ static struct frag_queue *ip6_frag_intern(unsigned int hash, | |||
337 | struct frag_queue *fq_in) | 327 | struct frag_queue *fq_in) |
338 | { | 328 | { |
339 | struct frag_queue *fq; | 329 | struct frag_queue *fq; |
330 | #ifdef CONFIG_SMP | ||
331 | struct hlist_node *n; | ||
332 | #endif | ||
340 | 333 | ||
341 | write_lock(&ip6_frag_lock); | 334 | write_lock(&ip6_frag_lock); |
342 | #ifdef CONFIG_SMP | 335 | #ifdef CONFIG_SMP |
343 | for (fq = ip6_frag_hash[hash]; fq; fq = fq->next) { | 336 | hlist_for_each_entry(fq, n, &ip6_frag_hash[hash], list) { |
344 | if (fq->id == fq_in->id && | 337 | if (fq->id == fq_in->id && |
345 | ipv6_addr_equal(&fq_in->saddr, &fq->saddr) && | 338 | ipv6_addr_equal(&fq_in->saddr, &fq->saddr) && |
346 | ipv6_addr_equal(&fq_in->daddr, &fq->daddr)) { | 339 | ipv6_addr_equal(&fq_in->daddr, &fq->daddr)) { |
@@ -358,10 +351,7 @@ static struct frag_queue *ip6_frag_intern(unsigned int hash, | |||
358 | atomic_inc(&fq->refcnt); | 351 | atomic_inc(&fq->refcnt); |
359 | 352 | ||
360 | atomic_inc(&fq->refcnt); | 353 | atomic_inc(&fq->refcnt); |
361 | if((fq->next = ip6_frag_hash[hash]) != NULL) | 354 | hlist_add_head(&fq->list, &ip6_frag_hash[hash]); |
362 | fq->next->pprev = &fq->next; | ||
363 | ip6_frag_hash[hash] = fq; | ||
364 | fq->pprev = &ip6_frag_hash[hash]; | ||
365 | INIT_LIST_HEAD(&fq->lru_list); | 355 | INIT_LIST_HEAD(&fq->lru_list); |
366 | list_add_tail(&fq->lru_list, &ip6_frag_lru_list); | 356 | list_add_tail(&fq->lru_list, &ip6_frag_lru_list); |
367 | ip6_frag_nqueues++; | 357 | ip6_frag_nqueues++; |
@@ -401,10 +391,11 @@ static __inline__ struct frag_queue * | |||
401 | fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst) | 391 | fq_find(u32 id, struct in6_addr *src, struct in6_addr *dst) |
402 | { | 392 | { |
403 | struct frag_queue *fq; | 393 | struct frag_queue *fq; |
394 | struct hlist_node *n; | ||
404 | unsigned int hash = ip6qhashfn(id, src, dst); | 395 | unsigned int hash = ip6qhashfn(id, src, dst); |
405 | 396 | ||
406 | read_lock(&ip6_frag_lock); | 397 | read_lock(&ip6_frag_lock); |
407 | for(fq = ip6_frag_hash[hash]; fq; fq = fq->next) { | 398 | hlist_for_each_entry(fq, n, &ip6_frag_hash[hash], list) { |
408 | if (fq->id == id && | 399 | if (fq->id == id && |
409 | ipv6_addr_equal(src, &fq->saddr) && | 400 | ipv6_addr_equal(src, &fq->saddr) && |
410 | ipv6_addr_equal(dst, &fq->daddr)) { | 401 | ipv6_addr_equal(dst, &fq->daddr)) { |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 9a71a8d1078a..a7a537b50595 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -1732,7 +1732,7 @@ int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb) | |||
1732 | /* | 1732 | /* |
1733 | * 2. allocate and initialize walker. | 1733 | * 2. allocate and initialize walker. |
1734 | */ | 1734 | */ |
1735 | w = kmalloc(sizeof(*w), GFP_KERNEL); | 1735 | w = kmalloc(sizeof(*w), GFP_ATOMIC); |
1736 | if (w == NULL) | 1736 | if (w == NULL) |
1737 | return -ENOMEM; | 1737 | return -ENOMEM; |
1738 | RT6_TRACE("dump<%p", w); | 1738 | RT6_TRACE("dump<%p", w); |
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c index 59d02cbbeb9e..c3f0b0783453 100644 --- a/net/llc/af_llc.c +++ b/net/llc/af_llc.c | |||
@@ -116,7 +116,9 @@ static int llc_ui_send_data(struct sock* sk, struct sk_buff *skb, int noblock) | |||
116 | struct llc_sock* llc = llc_sk(sk); | 116 | struct llc_sock* llc = llc_sk(sk); |
117 | int rc = 0; | 117 | int rc = 0; |
118 | 118 | ||
119 | if (unlikely(llc_data_accept_state(llc->state) || llc->p_flag)) { | 119 | if (unlikely(llc_data_accept_state(llc->state) || |
120 | llc->remote_busy_flag || | ||
121 | llc->p_flag)) { | ||
120 | long timeout = sock_sndtimeo(sk, noblock); | 122 | long timeout = sock_sndtimeo(sk, noblock); |
121 | 123 | ||
122 | rc = llc_ui_wait_for_busy_core(sk, timeout); | 124 | rc = llc_ui_wait_for_busy_core(sk, timeout); |
@@ -542,6 +544,7 @@ static int llc_ui_wait_for_busy_core(struct sock *sk, long timeout) | |||
542 | if (sk_wait_event(sk, &timeout, | 544 | if (sk_wait_event(sk, &timeout, |
543 | (sk->sk_shutdown & RCV_SHUTDOWN) || | 545 | (sk->sk_shutdown & RCV_SHUTDOWN) || |
544 | (!llc_data_accept_state(llc->state) && | 546 | (!llc_data_accept_state(llc->state) && |
547 | !llc->remote_busy_flag && | ||
545 | !llc->p_flag))) | 548 | !llc->p_flag))) |
546 | break; | 549 | break; |
547 | rc = -ERESTARTSYS; | 550 | rc = -ERESTARTSYS; |
diff --git a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c index b0bcfb1f12dd..8169f24ed33e 100644 --- a/net/llc/llc_c_ac.c +++ b/net/llc/llc_c_ac.c | |||
@@ -866,7 +866,8 @@ int llc_conn_ac_send_ack_if_needed(struct sock *sk, struct sk_buff *skb) | |||
866 | llc->ack_must_be_send = 1; | 866 | llc->ack_must_be_send = 1; |
867 | llc->ack_pf = pf_bit & 1; | 867 | llc->ack_pf = pf_bit & 1; |
868 | } | 868 | } |
869 | if (((llc->vR - llc->first_pdu_Ns + 129) % 128) >= llc->npta) { | 869 | if (((llc->vR - llc->first_pdu_Ns + 1 + LLC_2_SEQ_NBR_MODULO) |
870 | % LLC_2_SEQ_NBR_MODULO) >= llc->npta) { | ||
870 | llc_conn_ac_send_rr_rsp_f_set_ackpf(sk, skb); | 871 | llc_conn_ac_send_rr_rsp_f_set_ackpf(sk, skb); |
871 | llc->ack_must_be_send = 0; | 872 | llc->ack_must_be_send = 0; |
872 | llc->ack_pf = 0; | 873 | llc->ack_pf = 0; |
@@ -994,8 +995,8 @@ static int llc_conn_ac_inc_npta_value(struct sock *sk, struct sk_buff *skb) | |||
994 | llc->dec_step = 0; | 995 | llc->dec_step = 0; |
995 | llc->dec_cntr = llc->inc_cntr = 2; | 996 | llc->dec_cntr = llc->inc_cntr = 2; |
996 | ++llc->npta; | 997 | ++llc->npta; |
997 | if (llc->npta > 127) | 998 | if (llc->npta > (u8) ~LLC_2_SEQ_NBR_MODULO) |
998 | llc->npta = 127 ; | 999 | llc->npta = (u8) ~LLC_2_SEQ_NBR_MODULO; |
999 | } else | 1000 | } else |
1000 | --llc->inc_cntr; | 1001 | --llc->inc_cntr; |
1001 | return 0; | 1002 | return 0; |
@@ -1065,9 +1066,10 @@ int llc_conn_ac_dec_tx_win_size(struct sock *sk, struct sk_buff *skb) | |||
1065 | struct llc_sock *llc = llc_sk(sk); | 1066 | struct llc_sock *llc = llc_sk(sk); |
1066 | u8 unacked_pdu = skb_queue_len(&llc->pdu_unack_q); | 1067 | u8 unacked_pdu = skb_queue_len(&llc->pdu_unack_q); |
1067 | 1068 | ||
1068 | llc->k -= unacked_pdu; | 1069 | if (llc->k - unacked_pdu < 1) |
1069 | if (llc->k < 2) | 1070 | llc->k = 1; |
1070 | llc->k = 2; | 1071 | else |
1072 | llc->k -= unacked_pdu; | ||
1071 | return 0; | 1073 | return 0; |
1072 | } | 1074 | } |
1073 | 1075 | ||
@@ -1084,8 +1086,8 @@ int llc_conn_ac_inc_tx_win_size(struct sock *sk, struct sk_buff *skb) | |||
1084 | struct llc_sock *llc = llc_sk(sk); | 1086 | struct llc_sock *llc = llc_sk(sk); |
1085 | 1087 | ||
1086 | llc->k += 1; | 1088 | llc->k += 1; |
1087 | if (llc->k > 128) | 1089 | if (llc->k > (u8) ~LLC_2_SEQ_NBR_MODULO) |
1088 | llc->k = 128 ; | 1090 | llc->k = (u8) ~LLC_2_SEQ_NBR_MODULO; |
1089 | return 0; | 1091 | return 0; |
1090 | } | 1092 | } |
1091 | 1093 | ||
@@ -1309,7 +1311,7 @@ int llc_conn_ac_set_vs_nr(struct sock *sk, struct sk_buff *skb) | |||
1309 | 1311 | ||
1310 | static int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb) | 1312 | static int llc_conn_ac_inc_vs_by_1(struct sock *sk, struct sk_buff *skb) |
1311 | { | 1313 | { |
1312 | llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % 128; | 1314 | llc_sk(sk)->vS = (llc_sk(sk)->vS + 1) % LLC_2_SEQ_NBR_MODULO; |
1313 | return 0; | 1315 | return 0; |
1314 | } | 1316 | } |
1315 | 1317 | ||
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index 9a67c796b385..1da678303d78 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c | |||
@@ -387,7 +387,7 @@ nf_ct_invert_tuple(struct nf_conntrack_tuple *inverse, | |||
387 | static void nf_ct_unlink_expect(struct nf_conntrack_expect *exp) | 387 | static void nf_ct_unlink_expect(struct nf_conntrack_expect *exp) |
388 | { | 388 | { |
389 | ASSERT_WRITE_LOCK(&nf_conntrack_lock); | 389 | ASSERT_WRITE_LOCK(&nf_conntrack_lock); |
390 | NF_CT_ASSERT(!timer_pending(&exp_timeout)); | 390 | NF_CT_ASSERT(!timer_pending(&exp->timeout)); |
391 | list_del(&exp->list); | 391 | list_del(&exp->list); |
392 | NF_CT_STAT_INC(expect_delete); | 392 | NF_CT_STAT_INC(expect_delete); |
393 | exp->master->expecting--; | 393 | exp->master->expecting--; |
@@ -1395,6 +1395,13 @@ void nf_conntrack_cleanup(void) | |||
1395 | kmem_cache_destroy(nf_conntrack_expect_cachep); | 1395 | kmem_cache_destroy(nf_conntrack_expect_cachep); |
1396 | free_conntrack_hash(nf_conntrack_hash, nf_conntrack_vmalloc, | 1396 | free_conntrack_hash(nf_conntrack_hash, nf_conntrack_vmalloc, |
1397 | nf_conntrack_htable_size); | 1397 | nf_conntrack_htable_size); |
1398 | |||
1399 | /* free l3proto protocol tables */ | ||
1400 | for (i = 0; i < PF_MAX; i++) | ||
1401 | if (nf_ct_protos[i]) { | ||
1402 | kfree(nf_ct_protos[i]); | ||
1403 | nf_ct_protos[i] = NULL; | ||
1404 | } | ||
1398 | } | 1405 | } |
1399 | 1406 | ||
1400 | static struct list_head *alloc_hashtable(int size, int *vmalloced) | 1407 | static struct list_head *alloc_hashtable(int size, int *vmalloced) |
diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index 45224db4fe2f..5af381f9fe3d 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c | |||
@@ -694,7 +694,7 @@ static int init_or_cleanup(int init) | |||
694 | cleanup_proc_stat: | 694 | cleanup_proc_stat: |
695 | #endif | 695 | #endif |
696 | #ifdef CONFIG_PROC_FS | 696 | #ifdef CONFIG_PROC_FS |
697 | proc_net_remove("nf_conntrack_stat"); | 697 | remove_proc_entry("nf_conntrack", proc_net_stat); |
698 | cleanup_proc_exp: | 698 | cleanup_proc_exp: |
699 | proc_net_remove("nf_conntrack_expect"); | 699 | proc_net_remove("nf_conntrack_expect"); |
700 | cleanup_proc: | 700 | cleanup_proc: |
diff --git a/net/sched/Kconfig b/net/sched/Kconfig index 7f34e7fd767c..55cd5327fbd7 100644 --- a/net/sched/Kconfig +++ b/net/sched/Kconfig | |||
@@ -40,9 +40,10 @@ config NET_SCHED | |||
40 | The available schedulers are listed in the following questions; you | 40 | The available schedulers are listed in the following questions; you |
41 | can say Y to as many as you like. If unsure, say N now. | 41 | can say Y to as many as you like. If unsure, say N now. |
42 | 42 | ||
43 | if NET_SCHED | ||
44 | |||
43 | choice | 45 | choice |
44 | prompt "Packet scheduler clock source" | 46 | prompt "Packet scheduler clock source" |
45 | depends on NET_SCHED | ||
46 | default NET_SCH_CLK_JIFFIES | 47 | default NET_SCH_CLK_JIFFIES |
47 | ---help--- | 48 | ---help--- |
48 | Packet schedulers need a monotonic clock that increments at a static | 49 | Packet schedulers need a monotonic clock that increments at a static |
@@ -98,11 +99,9 @@ config NET_SCH_CLK_CPU | |||
98 | endchoice | 99 | endchoice |
99 | 100 | ||
100 | comment "Queueing/Scheduling" | 101 | comment "Queueing/Scheduling" |
101 | depends on NET_SCHED | ||
102 | 102 | ||
103 | config NET_SCH_CBQ | 103 | config NET_SCH_CBQ |
104 | tristate "Class Based Queueing (CBQ)" | 104 | tristate "Class Based Queueing (CBQ)" |
105 | depends on NET_SCHED | ||
106 | ---help--- | 105 | ---help--- |
107 | Say Y here if you want to use the Class-Based Queueing (CBQ) packet | 106 | Say Y here if you want to use the Class-Based Queueing (CBQ) packet |
108 | scheduling algorithm. This algorithm classifies the waiting packets | 107 | scheduling algorithm. This algorithm classifies the waiting packets |
@@ -120,7 +119,6 @@ config NET_SCH_CBQ | |||
120 | 119 | ||
121 | config NET_SCH_HTB | 120 | config NET_SCH_HTB |
122 | tristate "Hierarchical Token Bucket (HTB)" | 121 | tristate "Hierarchical Token Bucket (HTB)" |
123 | depends on NET_SCHED | ||
124 | ---help--- | 122 | ---help--- |
125 | Say Y here if you want to use the Hierarchical Token Buckets (HTB) | 123 | Say Y here if you want to use the Hierarchical Token Buckets (HTB) |
126 | packet scheduling algorithm. See | 124 | packet scheduling algorithm. See |
@@ -135,7 +133,6 @@ config NET_SCH_HTB | |||
135 | 133 | ||
136 | config NET_SCH_HFSC | 134 | config NET_SCH_HFSC |
137 | tristate "Hierarchical Fair Service Curve (HFSC)" | 135 | tristate "Hierarchical Fair Service Curve (HFSC)" |
138 | depends on NET_SCHED | ||
139 | ---help--- | 136 | ---help--- |
140 | Say Y here if you want to use the Hierarchical Fair Service Curve | 137 | Say Y here if you want to use the Hierarchical Fair Service Curve |
141 | (HFSC) packet scheduling algorithm. | 138 | (HFSC) packet scheduling algorithm. |
@@ -145,7 +142,7 @@ config NET_SCH_HFSC | |||
145 | 142 | ||
146 | config NET_SCH_ATM | 143 | config NET_SCH_ATM |
147 | tristate "ATM Virtual Circuits (ATM)" | 144 | tristate "ATM Virtual Circuits (ATM)" |
148 | depends on NET_SCHED && ATM | 145 | depends on ATM |
149 | ---help--- | 146 | ---help--- |
150 | Say Y here if you want to use the ATM pseudo-scheduler. This | 147 | Say Y here if you want to use the ATM pseudo-scheduler. This |
151 | provides a framework for invoking classifiers, which in turn | 148 | provides a framework for invoking classifiers, which in turn |
@@ -159,7 +156,6 @@ config NET_SCH_ATM | |||
159 | 156 | ||
160 | config NET_SCH_PRIO | 157 | config NET_SCH_PRIO |
161 | tristate "Multi Band Priority Queueing (PRIO)" | 158 | tristate "Multi Band Priority Queueing (PRIO)" |
162 | depends on NET_SCHED | ||
163 | ---help--- | 159 | ---help--- |
164 | Say Y here if you want to use an n-band priority queue packet | 160 | Say Y here if you want to use an n-band priority queue packet |
165 | scheduler. | 161 | scheduler. |
@@ -169,7 +165,6 @@ config NET_SCH_PRIO | |||
169 | 165 | ||
170 | config NET_SCH_RED | 166 | config NET_SCH_RED |
171 | tristate "Random Early Detection (RED)" | 167 | tristate "Random Early Detection (RED)" |
172 | depends on NET_SCHED | ||
173 | ---help--- | 168 | ---help--- |
174 | Say Y here if you want to use the Random Early Detection (RED) | 169 | Say Y here if you want to use the Random Early Detection (RED) |
175 | packet scheduling algorithm. | 170 | packet scheduling algorithm. |
@@ -181,7 +176,6 @@ config NET_SCH_RED | |||
181 | 176 | ||
182 | config NET_SCH_SFQ | 177 | config NET_SCH_SFQ |
183 | tristate "Stochastic Fairness Queueing (SFQ)" | 178 | tristate "Stochastic Fairness Queueing (SFQ)" |
184 | depends on NET_SCHED | ||
185 | ---help--- | 179 | ---help--- |
186 | Say Y here if you want to use the Stochastic Fairness Queueing (SFQ) | 180 | Say Y here if you want to use the Stochastic Fairness Queueing (SFQ) |
187 | packet scheduling algorithm . | 181 | packet scheduling algorithm . |
@@ -193,7 +187,6 @@ config NET_SCH_SFQ | |||
193 | 187 | ||
194 | config NET_SCH_TEQL | 188 | config NET_SCH_TEQL |
195 | tristate "True Link Equalizer (TEQL)" | 189 | tristate "True Link Equalizer (TEQL)" |
196 | depends on NET_SCHED | ||
197 | ---help--- | 190 | ---help--- |
198 | Say Y here if you want to use the True Link Equalizer (TLE) packet | 191 | Say Y here if you want to use the True Link Equalizer (TLE) packet |
199 | scheduling algorithm. This queueing discipline allows the combination | 192 | scheduling algorithm. This queueing discipline allows the combination |
@@ -206,7 +199,6 @@ config NET_SCH_TEQL | |||
206 | 199 | ||
207 | config NET_SCH_TBF | 200 | config NET_SCH_TBF |
208 | tristate "Token Bucket Filter (TBF)" | 201 | tristate "Token Bucket Filter (TBF)" |
209 | depends on NET_SCHED | ||
210 | ---help--- | 202 | ---help--- |
211 | Say Y here if you want to use the Token Bucket Filter (TBF) packet | 203 | Say Y here if you want to use the Token Bucket Filter (TBF) packet |
212 | scheduling algorithm. | 204 | scheduling algorithm. |
@@ -218,7 +210,6 @@ config NET_SCH_TBF | |||
218 | 210 | ||
219 | config NET_SCH_GRED | 211 | config NET_SCH_GRED |
220 | tristate "Generic Random Early Detection (GRED)" | 212 | tristate "Generic Random Early Detection (GRED)" |
221 | depends on NET_SCHED | ||
222 | ---help--- | 213 | ---help--- |
223 | Say Y here if you want to use the Generic Random Early Detection | 214 | Say Y here if you want to use the Generic Random Early Detection |
224 | (GRED) packet scheduling algorithm for some of your network devices | 215 | (GRED) packet scheduling algorithm for some of your network devices |
@@ -230,7 +221,6 @@ config NET_SCH_GRED | |||
230 | 221 | ||
231 | config NET_SCH_DSMARK | 222 | config NET_SCH_DSMARK |
232 | tristate "Differentiated Services marker (DSMARK)" | 223 | tristate "Differentiated Services marker (DSMARK)" |
233 | depends on NET_SCHED | ||
234 | ---help--- | 224 | ---help--- |
235 | Say Y if you want to schedule packets according to the | 225 | Say Y if you want to schedule packets according to the |
236 | Differentiated Services architecture proposed in RFC 2475. | 226 | Differentiated Services architecture proposed in RFC 2475. |
@@ -242,7 +232,6 @@ config NET_SCH_DSMARK | |||
242 | 232 | ||
243 | config NET_SCH_NETEM | 233 | config NET_SCH_NETEM |
244 | tristate "Network emulator (NETEM)" | 234 | tristate "Network emulator (NETEM)" |
245 | depends on NET_SCHED | ||
246 | ---help--- | 235 | ---help--- |
247 | Say Y if you want to emulate network delay, loss, and packet | 236 | Say Y if you want to emulate network delay, loss, and packet |
248 | re-ordering. This is often useful to simulate networks when | 237 | re-ordering. This is often useful to simulate networks when |
@@ -255,7 +244,6 @@ config NET_SCH_NETEM | |||
255 | 244 | ||
256 | config NET_SCH_INGRESS | 245 | config NET_SCH_INGRESS |
257 | tristate "Ingress Qdisc" | 246 | tristate "Ingress Qdisc" |
258 | depends on NET_SCHED | ||
259 | ---help--- | 247 | ---help--- |
260 | Say Y here if you want to use classifiers for incoming packets. | 248 | Say Y here if you want to use classifiers for incoming packets. |
261 | If unsure, say Y. | 249 | If unsure, say Y. |
@@ -264,14 +252,12 @@ config NET_SCH_INGRESS | |||
264 | module will be called sch_ingress. | 252 | module will be called sch_ingress. |
265 | 253 | ||
266 | comment "Classification" | 254 | comment "Classification" |
267 | depends on NET_SCHED | ||
268 | 255 | ||
269 | config NET_CLS | 256 | config NET_CLS |
270 | boolean | 257 | boolean |
271 | 258 | ||
272 | config NET_CLS_BASIC | 259 | config NET_CLS_BASIC |
273 | tristate "Elementary classification (BASIC)" | 260 | tristate "Elementary classification (BASIC)" |
274 | depends NET_SCHED | ||
275 | select NET_CLS | 261 | select NET_CLS |
276 | ---help--- | 262 | ---help--- |
277 | Say Y here if you want to be able to classify packets using | 263 | Say Y here if you want to be able to classify packets using |
@@ -282,7 +268,6 @@ config NET_CLS_BASIC | |||
282 | 268 | ||
283 | config NET_CLS_TCINDEX | 269 | config NET_CLS_TCINDEX |
284 | tristate "Traffic-Control Index (TCINDEX)" | 270 | tristate "Traffic-Control Index (TCINDEX)" |
285 | depends NET_SCHED | ||
286 | select NET_CLS | 271 | select NET_CLS |
287 | ---help--- | 272 | ---help--- |
288 | Say Y here if you want to be able to classify packets based on | 273 | Say Y here if you want to be able to classify packets based on |
@@ -294,7 +279,6 @@ config NET_CLS_TCINDEX | |||
294 | 279 | ||
295 | config NET_CLS_ROUTE4 | 280 | config NET_CLS_ROUTE4 |
296 | tristate "Routing decision (ROUTE)" | 281 | tristate "Routing decision (ROUTE)" |
297 | depends NET_SCHED | ||
298 | select NET_CLS_ROUTE | 282 | select NET_CLS_ROUTE |
299 | select NET_CLS | 283 | select NET_CLS |
300 | ---help--- | 284 | ---help--- |
@@ -306,11 +290,9 @@ config NET_CLS_ROUTE4 | |||
306 | 290 | ||
307 | config NET_CLS_ROUTE | 291 | config NET_CLS_ROUTE |
308 | bool | 292 | bool |
309 | default n | ||
310 | 293 | ||
311 | config NET_CLS_FW | 294 | config NET_CLS_FW |
312 | tristate "Netfilter mark (FW)" | 295 | tristate "Netfilter mark (FW)" |
313 | depends NET_SCHED | ||
314 | select NET_CLS | 296 | select NET_CLS |
315 | ---help--- | 297 | ---help--- |
316 | If you say Y here, you will be able to classify packets | 298 | If you say Y here, you will be able to classify packets |
@@ -321,7 +303,6 @@ config NET_CLS_FW | |||
321 | 303 | ||
322 | config NET_CLS_U32 | 304 | config NET_CLS_U32 |
323 | tristate "Universal 32bit comparisons w/ hashing (U32)" | 305 | tristate "Universal 32bit comparisons w/ hashing (U32)" |
324 | depends NET_SCHED | ||
325 | select NET_CLS | 306 | select NET_CLS |
326 | ---help--- | 307 | ---help--- |
327 | Say Y here to be able to classify packetes using a universal | 308 | Say Y here to be able to classify packetes using a universal |
@@ -345,7 +326,6 @@ config CLS_U32_MARK | |||
345 | 326 | ||
346 | config NET_CLS_RSVP | 327 | config NET_CLS_RSVP |
347 | tristate "IPv4 Resource Reservation Protocol (RSVP)" | 328 | tristate "IPv4 Resource Reservation Protocol (RSVP)" |
348 | depends on NET_SCHED | ||
349 | select NET_CLS | 329 | select NET_CLS |
350 | select NET_ESTIMATOR | 330 | select NET_ESTIMATOR |
351 | ---help--- | 331 | ---help--- |
@@ -361,7 +341,6 @@ config NET_CLS_RSVP | |||
361 | 341 | ||
362 | config NET_CLS_RSVP6 | 342 | config NET_CLS_RSVP6 |
363 | tristate "IPv6 Resource Reservation Protocol (RSVP6)" | 343 | tristate "IPv6 Resource Reservation Protocol (RSVP6)" |
364 | depends on NET_SCHED | ||
365 | select NET_CLS | 344 | select NET_CLS |
366 | select NET_ESTIMATOR | 345 | select NET_ESTIMATOR |
367 | ---help--- | 346 | ---help--- |
@@ -377,7 +356,6 @@ config NET_CLS_RSVP6 | |||
377 | 356 | ||
378 | config NET_EMATCH | 357 | config NET_EMATCH |
379 | bool "Extended Matches" | 358 | bool "Extended Matches" |
380 | depends NET_SCHED | ||
381 | select NET_CLS | 359 | select NET_CLS |
382 | ---help--- | 360 | ---help--- |
383 | Say Y here if you want to use extended matches on top of classifiers | 361 | Say Y here if you want to use extended matches on top of classifiers |
@@ -456,7 +434,7 @@ config NET_EMATCH_TEXT | |||
456 | 434 | ||
457 | config NET_CLS_ACT | 435 | config NET_CLS_ACT |
458 | bool "Actions" | 436 | bool "Actions" |
459 | depends on EXPERIMENTAL && NET_SCHED | 437 | depends on EXPERIMENTAL |
460 | select NET_ESTIMATOR | 438 | select NET_ESTIMATOR |
461 | ---help--- | 439 | ---help--- |
462 | Say Y here if you want to use traffic control actions. Actions | 440 | Say Y here if you want to use traffic control actions. Actions |
@@ -539,7 +517,7 @@ config NET_ACT_SIMP | |||
539 | 517 | ||
540 | config NET_CLS_POLICE | 518 | config NET_CLS_POLICE |
541 | bool "Traffic Policing (obsolete)" | 519 | bool "Traffic Policing (obsolete)" |
542 | depends on NET_SCHED && NET_CLS_ACT!=y | 520 | depends on NET_CLS_ACT!=y |
543 | select NET_ESTIMATOR | 521 | select NET_ESTIMATOR |
544 | ---help--- | 522 | ---help--- |
545 | Say Y here if you want to do traffic policing, i.e. strict | 523 | Say Y here if you want to do traffic policing, i.e. strict |
@@ -549,7 +527,7 @@ config NET_CLS_POLICE | |||
549 | 527 | ||
550 | config NET_CLS_IND | 528 | config NET_CLS_IND |
551 | bool "Incoming device classification" | 529 | bool "Incoming device classification" |
552 | depends on NET_SCHED && (NET_CLS_U32 || NET_CLS_FW) | 530 | depends on NET_CLS_U32 || NET_CLS_FW |
553 | ---help--- | 531 | ---help--- |
554 | Say Y here to extend the u32 and fw classifier to support | 532 | Say Y here to extend the u32 and fw classifier to support |
555 | classification based on the incoming device. This option is | 533 | classification based on the incoming device. This option is |
@@ -557,11 +535,12 @@ config NET_CLS_IND | |||
557 | 535 | ||
558 | config NET_ESTIMATOR | 536 | config NET_ESTIMATOR |
559 | bool "Rate estimator" | 537 | bool "Rate estimator" |
560 | depends on NET_SCHED | ||
561 | ---help--- | 538 | ---help--- |
562 | Say Y here to allow using rate estimators to estimate the current | 539 | Say Y here to allow using rate estimators to estimate the current |
563 | rate-of-flow for network devices, queues, etc. This module is | 540 | rate-of-flow for network devices, queues, etc. This module is |
564 | automaticaly selected if needed but can be selected manually for | 541 | automaticaly selected if needed but can be selected manually for |
565 | statstical purposes. | 542 | statstical purposes. |
566 | 543 | ||
544 | endif # NET_SCHED | ||
545 | |||
567 | endmenu | 546 | endmenu |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index e50e7cf43737..c6a51911e71e 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -1178,6 +1178,7 @@ svc_recv(struct svc_serv *serv, struct svc_rqst *rqstp, long timeout) | |||
1178 | arg->tail[0].iov_len = 0; | 1178 | arg->tail[0].iov_len = 0; |
1179 | 1179 | ||
1180 | try_to_freeze(); | 1180 | try_to_freeze(); |
1181 | cond_resched(); | ||
1181 | if (signalled()) | 1182 | if (signalled()) |
1182 | return -EINTR; | 1183 | return -EINTR; |
1183 | 1184 | ||