diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2011-05-20 14:31:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-05-21 02:05:22 -0400 |
commit | 0a384b226f61b310586701669b573b49cfcbf436 (patch) | |
tree | e1fb1a74d916b14f327cb01cbb02f2b45ae6cf35 /net/802 | |
parent | 0f6c6392dca9c4825c98322a1bf74991e4f0f54d (diff) |
garp: use kfree_rcu()
Use kfree_rcu() instead of call_rcu(), remove garp_cleanup_module()
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/802')
-rw-r--r-- | net/802/garp.c | 20 |
1 files changed, 2 insertions, 18 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); | ||