Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Eric Dumazet and committed by
David S. Miller
0a384b22 0f6c6392

+2 -18
+2 -18
net/802/garp.c
··· 544 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 547 static void garp_release_port(struct net_device *dev) 553 548 { 554 549 struct garp_port *port = rtnl_dereference(dev->garp_port); ··· 554 559 return; 555 560 } 556 561 rcu_assign_pointer(dev->garp_port, NULL); 557 - call_rcu(&port->rcu, garp_kfree_rcu); 562 + kfree_rcu(port, rcu); 558 563 } 559 564 560 565 int garp_init_applicant(struct net_device *dev, struct garp_application *appl) ··· 598 603 } 599 604 EXPORT_SYMBOL_GPL(garp_init_applicant); 600 605 601 - static void garp_app_kfree_rcu(struct rcu_head *head) 602 - { 603 - kfree(container_of(head, struct garp_applicant, rcu)); 604 - } 605 - 606 606 void garp_uninit_applicant(struct net_device *dev, struct garp_application *appl) 607 607 { 608 608 struct garp_port *port = rtnl_dereference(dev->garp_port); ··· 615 625 garp_queue_xmit(app); 616 626 617 627 dev_mc_del(dev, appl->proto.group_address); 618 - call_rcu(&app->rcu, garp_app_kfree_rcu); 628 + kfree_rcu(app, rcu); 619 629 garp_release_port(dev); 620 630 } 621 631 EXPORT_SYMBOL_GPL(garp_uninit_applicant); ··· 633 643 stp_proto_unregister(&appl->proto); 634 644 } 635 645 EXPORT_SYMBOL_GPL(garp_unregister_application); 636 - 637 - static void __exit garp_cleanup_module(void) 638 - { 639 - rcu_barrier(); /* Wait for completion of call_rcu()'s */ 640 - } 641 - module_exit(garp_cleanup_module);