Commit e46dc1dab969550d4136e9be0e7919ca09e49573
Exists in
master
and in
20 other branches
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [IPv6]: Fix ICMPv6 redirect handling with target multicast address [PKT_SCHED] cls_u32: error code isn't been propogated properly [ROSE]: Fix rose.ko oops on unload [TCP]: Fix fastpath_cnt_hint when GSO skb is partially ACKed
Showing 6 changed files Side-by-side Diff
include/net/rose.h
... | ... | @@ -188,7 +188,7 @@ |
188 | 188 | extern void rose_enquiry_response(struct sock *); |
189 | 189 | |
190 | 190 | /* rose_route.c */ |
191 | -extern struct rose_neigh rose_loopback_neigh; | |
191 | +extern struct rose_neigh *rose_loopback_neigh; | |
192 | 192 | extern const struct file_operations rose_neigh_fops; |
193 | 193 | extern const struct file_operations rose_nodes_fops; |
194 | 194 | extern const struct file_operations rose_routes_fops; |
net/ipv4/tcp_input.c
... | ... | @@ -2420,6 +2420,9 @@ |
2420 | 2420 | __u32 dval = min(tp->fackets_out, packets_acked); |
2421 | 2421 | tp->fackets_out -= dval; |
2422 | 2422 | } |
2423 | + /* hint's skb might be NULL but we don't need to care */ | |
2424 | + tp->fastpath_cnt_hint -= min_t(u32, packets_acked, | |
2425 | + tp->fastpath_cnt_hint); | |
2423 | 2426 | tp->packets_out -= packets_acked; |
2424 | 2427 | |
2425 | 2428 | BUG_ON(tcp_skb_pcount(skb) == 0); |
net/ipv6/ndisc.c
... | ... | @@ -1268,9 +1268,10 @@ |
1268 | 1268 | |
1269 | 1269 | if (ipv6_addr_equal(dest, target)) { |
1270 | 1270 | on_link = 1; |
1271 | - } else if (!(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) { | |
1271 | + } else if (ipv6_addr_type(target) != | |
1272 | + (IPV6_ADDR_UNICAST|IPV6_ADDR_LINKLOCAL)) { | |
1272 | 1273 | ND_PRINTK2(KERN_WARNING |
1273 | - "ICMPv6 Redirect: target address is not link-local.\n"); | |
1274 | + "ICMPv6 Redirect: target address is not link-local unicast.\n"); | |
1274 | 1275 | return; |
1275 | 1276 | } |
1276 | 1277 | |
1277 | 1278 | |
... | ... | @@ -1344,9 +1345,9 @@ |
1344 | 1345 | } |
1345 | 1346 | |
1346 | 1347 | if (!ipv6_addr_equal(&ipv6_hdr(skb)->daddr, target) && |
1347 | - !(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) { | |
1348 | + ipv6_addr_type(target) != (IPV6_ADDR_UNICAST|IPV6_ADDR_LINKLOCAL)) { | |
1348 | 1349 | ND_PRINTK2(KERN_WARNING |
1349 | - "ICMPv6 Redirect: target address is not link-local.\n"); | |
1350 | + "ICMPv6 Redirect: target address is not link-local unicast.\n"); | |
1350 | 1351 | return; |
1351 | 1352 | } |
1352 | 1353 |
net/rose/rose_loopback.c
... | ... | @@ -79,7 +79,7 @@ |
79 | 79 | |
80 | 80 | skb_reset_transport_header(skb); |
81 | 81 | |
82 | - sk = rose_find_socket(lci_o, &rose_loopback_neigh); | |
82 | + sk = rose_find_socket(lci_o, rose_loopback_neigh); | |
83 | 83 | if (sk) { |
84 | 84 | if (rose_process_rx_frame(sk, skb) == 0) |
85 | 85 | kfree_skb(skb); |
... | ... | @@ -88,7 +88,7 @@ |
88 | 88 | |
89 | 89 | if (frametype == ROSE_CALL_REQUEST) { |
90 | 90 | if ((dev = rose_dev_get(dest)) != NULL) { |
91 | - if (rose_rx_call_request(skb, dev, &rose_loopback_neigh, lci_o) == 0) | |
91 | + if (rose_rx_call_request(skb, dev, rose_loopback_neigh, lci_o) == 0) | |
92 | 92 | kfree_skb(skb); |
93 | 93 | } else { |
94 | 94 | kfree_skb(skb); |
net/rose/rose_route.c
... | ... | @@ -45,7 +45,7 @@ |
45 | 45 | static struct rose_route *rose_route_list; |
46 | 46 | static DEFINE_SPINLOCK(rose_route_list_lock); |
47 | 47 | |
48 | -struct rose_neigh rose_loopback_neigh; | |
48 | +struct rose_neigh *rose_loopback_neigh; | |
49 | 49 | |
50 | 50 | /* |
51 | 51 | * Add a new route to a node, and in the process add the node and the |
52 | 52 | |
... | ... | @@ -362,8 +362,13 @@ |
362 | 362 | */ |
363 | 363 | void rose_add_loopback_neigh(void) |
364 | 364 | { |
365 | - struct rose_neigh *sn = &rose_loopback_neigh; | |
365 | + struct rose_neigh *sn; | |
366 | 366 | |
367 | + rose_loopback_neigh = kmalloc(sizeof(struct rose_neigh), GFP_KERNEL); | |
368 | + if (!rose_loopback_neigh) | |
369 | + return; | |
370 | + sn = rose_loopback_neigh; | |
371 | + | |
367 | 372 | sn->callsign = null_ax25_address; |
368 | 373 | sn->digipeat = NULL; |
369 | 374 | sn->ax25 = NULL; |
370 | 375 | |
... | ... | @@ -417,13 +422,13 @@ |
417 | 422 | rose_node->mask = 10; |
418 | 423 | rose_node->count = 1; |
419 | 424 | rose_node->loopback = 1; |
420 | - rose_node->neighbour[0] = &rose_loopback_neigh; | |
425 | + rose_node->neighbour[0] = rose_loopback_neigh; | |
421 | 426 | |
422 | 427 | /* Insert at the head of list. Address is always mask=10 */ |
423 | 428 | rose_node->next = rose_node_list; |
424 | 429 | rose_node_list = rose_node; |
425 | 430 | |
426 | - rose_loopback_neigh.count++; | |
431 | + rose_loopback_neigh->count++; | |
427 | 432 | |
428 | 433 | out: |
429 | 434 | spin_unlock_bh(&rose_node_list_lock); |
... | ... | @@ -454,7 +459,7 @@ |
454 | 459 | |
455 | 460 | rose_remove_node(rose_node); |
456 | 461 | |
457 | - rose_loopback_neigh.count--; | |
462 | + rose_loopback_neigh->count--; | |
458 | 463 | |
459 | 464 | out: |
460 | 465 | spin_unlock_bh(&rose_node_list_lock); |
net/sched/cls_u32.c