diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index ea8abdb56df300d04f265641060109a15d9234ff..79d4c9d253e020c1fdad5dfee689cba25c7b3d22 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c @@ -710,7 +710,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry) rcu_assign_pointer(*pp, p->next); hlist_del_init(&p->mglist); del_timer(&p->timer); - call_rcu_bh(&p->rcu, br_multicast_free_pg); + kfree_rcu(p, rcu); err = 0; if (!mp->ports && !mp->host_joined && diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 83a5931a7784f6643b6e418180f2f3850f8884f5..5b8cfef8bc4dd36e96eb36da0e0b4cecde8ca721 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -160,22 +160,6 @@ struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br, return br_mdb_ip_get_rcu(br, &ip); } -void br_multicast_free_pg(struct rcu_head *head) -{ - struct net_bridge_port_group *p = - container_of(head, struct net_bridge_port_group, rcu); - - kfree(p); -} - -static void br_multicast_free_group(struct rcu_head *head) -{ - struct net_bridge_mdb_entry *mp = - container_of(head, struct net_bridge_mdb_entry, rcu); - - kfree(mp); -} - static void br_multicast_group_expired(struct timer_list *t) { struct net_bridge_mdb_entry *mp = from_timer(mp, t, timer); @@ -195,7 +179,7 @@ static void br_multicast_group_expired(struct timer_list *t) br_mdb_rht_params); hlist_del_rcu(&mp->mdb_node); - call_rcu_bh(&mp->rcu, br_multicast_free_group); + kfree_rcu(mp, rcu); out: spin_unlock(&br->multicast_lock); @@ -223,7 +207,7 @@ static void br_multicast_del_pg(struct net_bridge *br, del_timer(&p->timer); br_mdb_notify(br->dev, p->port, &pg->addr, RTM_DELMDB, p->flags); - call_rcu_bh(&p->rcu, br_multicast_free_pg); + kfree_rcu(p, rcu); if (!mp->ports && !mp->host_joined && netif_running(br->dev)) @@ -1425,7 +1409,7 @@ br_multicast_leave_group(struct net_bridge *br, rcu_assign_pointer(*pp, p->next); hlist_del_init(&p->mglist); del_timer(&p->timer); - call_rcu_bh(&p->rcu, br_multicast_free_pg); + kfree_rcu(p, rcu); br_mdb_notify(br->dev, port, group, RTM_DELMDB, p->flags); @@ -1839,11 +1823,11 @@ void br_multicast_dev_del(struct net_bridge *br) rhashtable_remove_fast(&br->mdb_hash_tbl, &mp->rhnode, br_mdb_rht_params); hlist_del_rcu(&mp->mdb_node); - call_rcu_bh(&mp->rcu, br_multicast_free_group); + kfree_rcu(mp, rcu); } spin_unlock_bh(&br->multicast_lock); - rcu_barrier_bh(); + rcu_barrier(); } int br_multicast_set_router(struct net_bridge *br, unsigned long val) diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index a0ce0822921c6614e3033bb7cb1038c93fa2731b..cf1f7365deb36b09a93591eaae97df9b8640fa2f 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -679,7 +679,6 @@ struct net_bridge_mdb_entry * br_mdb_ip_get(struct net_bridge *br, struct br_ip *dst); struct net_bridge_mdb_entry * br_multicast_new_group(struct net_bridge *br, struct br_ip *group); -void br_multicast_free_pg(struct rcu_head *head); struct net_bridge_port_group * br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group, struct net_bridge_port_group __rcu *next,