diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-21 03:13:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-21 03:13:03 -0400 |
commit | c21fd1a8c68ce3f49b00caf10337169262cfb8ad (patch) | |
tree | 37bb9c0511ece948cc3913f4df21166768379f5e | |
parent | 1a4022f88d40e1255920b017556092ab926d7f66 (diff) | |
parent | 5d414521663295ce25c90164f4d41a07ac846468 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
sctp: Fix build failure.
garp: use kfree_rcu()
ipv6: copy prefsrc setting when copying route entry
-rw-r--r-- | net/802/garp.c | 20 | ||||
-rw-r--r-- | net/ipv6/route.c | 1 | ||||
-rw-r--r-- | net/sctp/bind_addr.c | 2 |
3 files changed, 4 insertions, 19 deletions
diff --git a/net/802/garp.c b/net/802/garp.c index f8300a8b5fbc..16102951d36a 100644 --- a/net/802/garp.c +++ b/net/802/garp.c | |||
@@ -544,11 +544,6 @@ static int garp_init_port(struct net_device *dev) | |||
544 | return 0; | 544 | return 0; |
545 | } | 545 | } |
546 | 546 | ||
547 | static void garp_kfree_rcu(struct rcu_head *head) | ||
548 | { | ||
549 | kfree(container_of(head, struct garp_port, rcu)); | ||
550 | } | ||
551 | |||
552 | static void garp_release_port(struct net_device *dev) | 547 | static void garp_release_port(struct net_device *dev) |
553 | { | 548 | { |
554 | struct garp_port *port = rtnl_dereference(dev->garp_port); | 549 | struct garp_port *port = rtnl_dereference(dev->garp_port); |
@@ -559,7 +554,7 @@ static void garp_release_port(struct net_device *dev) | |||
559 | return; | 554 | return; |
560 | } | 555 | } |
561 | rcu_assign_pointer(dev->garp_port, NULL); | 556 | rcu_assign_pointer(dev->garp_port, NULL); |
562 | call_rcu(&port->rcu, garp_kfree_rcu); | 557 | kfree_rcu(port, rcu); |
563 | } | 558 | } |
564 | 559 | ||
565 | int garp_init_applicant(struct net_device *dev, struct garp_application *appl) | 560 | int garp_init_applicant(struct net_device *dev, struct garp_application *appl) |
@@ -603,11 +598,6 @@ err1: | |||
603 | } | 598 | } |
604 | EXPORT_SYMBOL_GPL(garp_init_applicant); | 599 | EXPORT_SYMBOL_GPL(garp_init_applicant); |
605 | 600 | ||
606 | static void garp_app_kfree_rcu(struct rcu_head *head) | ||
607 | { | ||
608 | kfree(container_of(head, struct garp_applicant, rcu)); | ||
609 | } | ||
610 | |||
611 | void garp_uninit_applicant(struct net_device *dev, struct garp_application *appl) | 601 | void garp_uninit_applicant(struct net_device *dev, struct garp_application *appl) |
612 | { | 602 | { |
613 | struct garp_port *port = rtnl_dereference(dev->garp_port); | 603 | struct garp_port *port = rtnl_dereference(dev->garp_port); |
@@ -625,7 +615,7 @@ void garp_uninit_applicant(struct net_device *dev, struct garp_application *appl | |||
625 | garp_queue_xmit(app); | 615 | garp_queue_xmit(app); |
626 | 616 | ||
627 | dev_mc_del(dev, appl->proto.group_address); | 617 | dev_mc_del(dev, appl->proto.group_address); |
628 | call_rcu(&app->rcu, garp_app_kfree_rcu); | 618 | kfree_rcu(app, rcu); |
629 | garp_release_port(dev); | 619 | garp_release_port(dev); |
630 | } | 620 | } |
631 | EXPORT_SYMBOL_GPL(garp_uninit_applicant); | 621 | EXPORT_SYMBOL_GPL(garp_uninit_applicant); |
@@ -643,9 +633,3 @@ void garp_unregister_application(struct garp_application *appl) | |||
643 | stp_proto_unregister(&appl->proto); | 633 | stp_proto_unregister(&appl->proto); |
644 | } | 634 | } |
645 | EXPORT_SYMBOL_GPL(garp_unregister_application); | 635 | EXPORT_SYMBOL_GPL(garp_unregister_application); |
646 | |||
647 | static void __exit garp_cleanup_module(void) | ||
648 | { | ||
649 | rcu_barrier(); /* Wait for completion of call_rcu()'s */ | ||
650 | } | ||
651 | module_exit(garp_cleanup_module); | ||
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index f1be5c5c85ef..de2b1decd786 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -1756,6 +1756,7 @@ static struct rt6_info * ip6_rt_copy(struct rt6_info *ort) | |||
1756 | #ifdef CONFIG_IPV6_SUBTREES | 1756 | #ifdef CONFIG_IPV6_SUBTREES |
1757 | memcpy(&rt->rt6i_src, &ort->rt6i_src, sizeof(struct rt6key)); | 1757 | memcpy(&rt->rt6i_src, &ort->rt6i_src, sizeof(struct rt6key)); |
1758 | #endif | 1758 | #endif |
1759 | memcpy(&rt->rt6i_prefsrc, &ort->rt6i_prefsrc, sizeof(struct rt6key)); | ||
1759 | rt->rt6i_table = ort->rt6i_table; | 1760 | rt->rt6i_table = ort->rt6i_table; |
1760 | } | 1761 | } |
1761 | return rt; | 1762 | return rt; |
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c index 6338413376c8..83e3011c19ca 100644 --- a/net/sctp/bind_addr.c +++ b/net/sctp/bind_addr.c | |||
@@ -145,7 +145,7 @@ static void sctp_bind_addr_clean(struct sctp_bind_addr *bp) | |||
145 | /* Empty the bind address list. */ | 145 | /* Empty the bind address list. */ |
146 | list_for_each_entry_safe(addr, temp, &bp->address_list, list) { | 146 | list_for_each_entry_safe(addr, temp, &bp->address_list, list) { |
147 | list_del_rcu(&addr->list); | 147 | list_del_rcu(&addr->list); |
148 | call_rcu(&addr->rcu, sctp_local_addr_free); | 148 | kfree_rcu(addr, rcu); |
149 | SCTP_DBG_OBJCNT_DEC(addr); | 149 | SCTP_DBG_OBJCNT_DEC(addr); |
150 | } | 150 | } |
151 | } | 151 | } |