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 | } |
