aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/802/tr.c5
-rw-r--r--net/core/neighbour.c48
-rw-r--r--net/core/skbuff.c6
-rw-r--r--net/core/wireless.c9
-rw-r--r--net/ipv4/ip_output.c3
-rw-r--r--net/ipv6/ip6_flowlabel.c2
-rw-r--r--net/sunrpc/svcsock.c2
7 files changed, 37 insertions, 38 deletions
diff --git a/net/802/tr.c b/net/802/tr.c
index 1eaa3d19d8bf..afd8385c0c9c 100644
--- a/net/802/tr.c
+++ b/net/802/tr.c
@@ -340,9 +340,10 @@ static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
340 unsigned int hash, rii_p = 0; 340 unsigned int hash, rii_p = 0;
341 unsigned long flags; 341 unsigned long flags;
342 struct rif_cache *entry; 342 struct rif_cache *entry;
343 343 unsigned char saddr0;
344 344
345 spin_lock_irqsave(&rif_lock, flags); 345 spin_lock_irqsave(&rif_lock, flags);
346 saddr0 = trh->saddr[0];
346 347
347 /* 348 /*
348 * Firstly see if the entry exists 349 * Firstly see if the entry exists
@@ -395,7 +396,6 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
395 entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK); 396 entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK);
396 memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short)); 397 memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short));
397 entry->local_ring = 0; 398 entry->local_ring = 0;
398 trh->saddr[0]|=TR_RII; /* put the routing indicator back for tcpdump */
399 } 399 }
400 else 400 else
401 { 401 {
@@ -422,6 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
422 } 422 }
423 entry->last_used=jiffies; 423 entry->last_used=jiffies;
424 } 424 }
425 trh->saddr[0]=saddr0; /* put the routing indicator back for tcpdump */
425 spin_unlock_irqrestore(&rif_lock, flags); 426 spin_unlock_irqrestore(&rif_lock, flags);
426} 427}
427 428
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 4128fc76ac3a..1dcf7fa1f0fe 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -175,39 +175,10 @@ static void pneigh_queue_purge(struct sk_buff_head *list)
175 } 175 }
176} 176}
177 177
178void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev) 178static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev)
179{ 179{
180 int i; 180 int i;
181 181
182 write_lock_bh(&tbl->lock);
183
184 for (i=0; i <= tbl->hash_mask; i++) {
185 struct neighbour *n, **np;
186
187 np = &tbl->hash_buckets[i];
188 while ((n = *np) != NULL) {
189 if (dev && n->dev != dev) {
190 np = &n->next;
191 continue;
192 }
193 *np = n->next;
194 write_lock_bh(&n->lock);
195 n->dead = 1;
196 neigh_del_timer(n);
197 write_unlock_bh(&n->lock);
198 neigh_release(n);
199 }
200 }
201
202 write_unlock_bh(&tbl->lock);
203}
204
205int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
206{
207 int i;
208
209 write_lock_bh(&tbl->lock);
210
211 for (i = 0; i <= tbl->hash_mask; i++) { 182 for (i = 0; i <= tbl->hash_mask; i++) {
212 struct neighbour *n, **np = &tbl->hash_buckets[i]; 183 struct neighbour *n, **np = &tbl->hash_buckets[i];
213 184
@@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
243 neigh_release(n); 214 neigh_release(n);
244 } 215 }
245 } 216 }
217}
246 218
219void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
220{
221 write_lock_bh(&tbl->lock);
222 neigh_flush_dev(tbl, dev);
223 write_unlock_bh(&tbl->lock);
224}
225
226int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
227{
228 write_lock_bh(&tbl->lock);
229 neigh_flush_dev(tbl, dev);
247 pneigh_ifdown(tbl, dev); 230 pneigh_ifdown(tbl, dev);
248 write_unlock_bh(&tbl->lock); 231 write_unlock_bh(&tbl->lock);
249 232
@@ -732,6 +715,7 @@ static inline void neigh_add_timer(struct neighbour *n, unsigned long when)
732 if (unlikely(mod_timer(&n->timer, when))) { 715 if (unlikely(mod_timer(&n->timer, when))) {
733 printk("NEIGH: BUG, double timer add, state is %x\n", 716 printk("NEIGH: BUG, double timer add, state is %x\n",
734 n->nud_state); 717 n->nud_state);
718 dump_stack();
735 } 719 }
736} 720}
737 721
@@ -815,10 +799,10 @@ static void neigh_timer_handler(unsigned long arg)
815 } 799 }
816 800
817 if (neigh->nud_state & NUD_IN_TIMER) { 801 if (neigh->nud_state & NUD_IN_TIMER) {
818 neigh_hold(neigh);
819 if (time_before(next, jiffies + HZ/2)) 802 if (time_before(next, jiffies + HZ/2))
820 next = jiffies + HZ/2; 803 next = jiffies + HZ/2;
821 neigh_add_timer(neigh, next); 804 if (!mod_timer(&neigh->timer, next))
805 neigh_hold(neigh);
822 } 806 }
823 if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { 807 if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) {
824 struct sk_buff *skb = skb_peek(&neigh->arp_queue); 808 struct sk_buff *skb = skb_peek(&neigh->arp_queue);
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index af9b1516e21f..02cd4cde2112 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -410,6 +410,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
410 C(nfct); 410 C(nfct);
411 nf_conntrack_get(skb->nfct); 411 nf_conntrack_get(skb->nfct);
412 C(nfctinfo); 412 C(nfctinfo);
413#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
414 C(ipvs_property);
415#endif
413#ifdef CONFIG_BRIDGE_NETFILTER 416#ifdef CONFIG_BRIDGE_NETFILTER
414 C(nf_bridge); 417 C(nf_bridge);
415 nf_bridge_get(skb->nf_bridge); 418 nf_bridge_get(skb->nf_bridge);
@@ -467,6 +470,9 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
467 new->nfct = old->nfct; 470 new->nfct = old->nfct;
468 nf_conntrack_get(old->nfct); 471 nf_conntrack_get(old->nfct);
469 new->nfctinfo = old->nfctinfo; 472 new->nfctinfo = old->nfctinfo;
473#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
474 new->ipvs_property = old->ipvs_property;
475#endif
470#ifdef CONFIG_BRIDGE_NETFILTER 476#ifdef CONFIG_BRIDGE_NETFILTER
471 new->nf_bridge = old->nf_bridge; 477 new->nf_bridge = old->nf_bridge;
472 nf_bridge_get(old->nf_bridge); 478 nf_bridge_get(old->nf_bridge);
diff --git a/net/core/wireless.c b/net/core/wireless.c
index d17f1583ea3e..271ddb35b0b2 100644
--- a/net/core/wireless.c
+++ b/net/core/wireless.c
@@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
455 455
456 /* Old location, field to be removed in next WE */ 456 /* Old location, field to be removed in next WE */
457 if(dev->get_wireless_stats) { 457 if(dev->get_wireless_stats) {
458 printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n", 458 static int printed_message;
459 dev->name); 459
460 if (!printed_message++)
461 printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
462 dev->name);
463
460 return dev->get_wireless_stats(dev); 464 return dev->get_wireless_stats(dev);
461 } 465 }
466
462 /* Not found */ 467 /* Not found */
463 return (struct iw_statistics *) NULL; 468 return (struct iw_statistics *) NULL;
464} 469}
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 3f1a263e1249..1ad5202e556b 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -391,6 +391,9 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
391 to->nfct = from->nfct; 391 to->nfct = from->nfct;
392 nf_conntrack_get(to->nfct); 392 nf_conntrack_get(to->nfct);
393 to->nfctinfo = from->nfctinfo; 393 to->nfctinfo = from->nfctinfo;
394#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
395 to->ipvs_property = from->ipvs_property;
396#endif
394#ifdef CONFIG_BRIDGE_NETFILTER 397#ifdef CONFIG_BRIDGE_NETFILTER
395 nf_bridge_put(to->nf_bridge); 398 nf_bridge_put(to->nf_bridge);
396 to->nf_bridge = from->nf_bridge; 399 to->nf_bridge = from->nf_bridge;
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
index f841bde30c18..bbbe80cdaf72 100644
--- a/net/ipv6/ip6_flowlabel.c
+++ b/net/ipv6/ip6_flowlabel.c
@@ -483,7 +483,7 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen)
483 goto done; 483 goto done;
484 } 484 }
485 fl1 = sfl->fl; 485 fl1 = sfl->fl;
486 atomic_inc(&fl->users); 486 atomic_inc(&fl1->users);
487 break; 487 break;
488 } 488 }
489 } 489 }
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 30ec3efc48a6..691dea4a58e7 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -587,7 +587,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
587 struct timeval tv; 587 struct timeval tv;
588 588
589 tv.tv_sec = xtime.tv_sec; 589 tv.tv_sec = xtime.tv_sec;
590 tv.tv_usec = xtime.tv_nsec * 1000; 590 tv.tv_usec = xtime.tv_nsec / NSEC_PER_USEC;
591 skb_set_timestamp(skb, &tv); 591 skb_set_timestamp(skb, &tv);
592 /* Don't enable netstamp, sunrpc doesn't 592 /* Don't enable netstamp, sunrpc doesn't
593 need that much accuracy */ 593 need that much accuracy */