mac80211: always force mesh_path deletions
PATCH 7/10 mac80211: always force mesh_path deletions
Postponing the deletion is not really useful anymore.
Signed-off-by Luis Carlos Cobo <[email protected]>
--- net/mac80211/cfg.c | 2 +- net/mac80211/mesh.h | 4 +--- net/mac80211/mesh_hwmp.c | 8 +------- net/mac80211/mesh_pathtbl.c | 24 ++++++++---------------- 4 files changed, 11 insertions(+), 27 deletions(-)
net/mac80211/cfg.c +1 -1
@@ -785,7 +785,7 @@ static int ieee80211_del_mpath(struct wiphy *wiphy, struct net_device *dev, u8 *dst) {if (dst) -return mesh_path_del (dst, dev, false); +return mesh_path_del (dst, dev);mesh_path_flush (dev);return 0 ;
net/mac80211/mesh.h +1 -3
@@ -30,7 +30,6 @@* @MESH_PATH_FIXED: the mesh path has been manually set and should not be * modified * @MESH_PATH_RESOLVED: the mesh path can has been resolved -* @MESH_PATH_DELETE: the mesh path is scheduled to be deleted * * MESH_PATH_RESOLVED and MESH_PATH_DELETE are used by the mesh path timer to * decide when to stop or cancel the mesh path discovery.
@@ -41,7 +40,6 @@ enum mesh_path_flags {MESH_PATH_DSN_VALID =BIT (2 ),MESH_PATH_FIXED =BIT (3 ), MESH_PATH_RESOLVED = BIT(4), - MESH_PATH_DELETE = BIT(5), };/**
@@ -254,7 +252,7 @@ void mesh_path_flush_pending(struct mesh_path *mpath);void mesh_path_tx_pending (struct mesh_path *mpath);int mesh_pathtbl_init (void );void mesh_pathtbl_unregister (void ); -int mesh_path_del (u8 *addr,struct net_device *dev,bool force); +int mesh_path_del (u8 *addr,struct net_device *dev);void mesh_path_timer (unsigned long data);void mesh_path_flush_by_nexthop (struct sta_info *sta);void mesh_path_discard_frame (struct sk_buff *skb,struct net_device *dev);
net/mac80211/mesh_hwmp.c +1 -7
@@ -828,7 +828,6 @@ void mesh_path_timer(unsigned long data) {struct ieee80211_sub_if_data *sdata;struct mesh_path *mpath; -bool delete = false;rcu_read_lock (); mpath = (struct mesh_path *) data;
@@ -837,10 +836,7 @@ void mesh_path_timer(unsigned long data) goto endmpathtimer;spin_lock_bh (&mpath->state_lock); sdata =IEEE80211_DEV_TO_SUB_IF (mpath->dev); -if (mpath->flags &MESH_PATH_DELETE ) { - mpath->flags =0 ; - delete = true; - }else if (mpath->flags &MESH_PATH_RESOLVED || +if (mpath->flags &MESH_PATH_RESOLVED || (!(mpath->flags &MESH_PATH_RESOLVING ))) mpath->flags &= ~(MESH_PATH_RESOLVING |MESH_PATH_RESOLVED );else if (mpath->discovery_retries <max_preq_retries (sdata)) {
@@ -856,6 +852,4 @@ void mesh_path_timer(unsigned long data)spin_unlock_bh (&mpath->state_lock); endmpathtimer:rcu_read_unlock (); -if (delete) -mesh_path_del (mpath->dst, mpath->dev, false); }
net/mac80211/mesh_pathtbl.c +8 -16
@@ -277,7 +277,7 @@ void mesh_path_flush_by_nexthop(struct sta_info *sta)for_each_mesh_entry (mesh_paths, p, node, i) { mpath = node->mpath;if (mpath->next_hop == sta) -mesh_path_del (mpath->dst, mpath->dev, true); +mesh_path_del (mpath->dst, mpath->dev); } }
@@ -291,7 +291,7 @@ void mesh_path_flush(struct net_device *dev)for_each_mesh_entry (mesh_paths, p, node, i) { mpath = node->mpath;if (mpath->dev == dev) -mesh_path_del (mpath->dst, mpath->dev, false); +mesh_path_del (mpath->dst, mpath->dev); } }
@@ -314,12 +314,8 @@ static void mesh_path_node_reclaim(struct rcu_head *rp)* @dev: local interface * * Returns: 0 if succesful -* -* State: if the path is being resolved, the deletion will be postponed until -* the path resolution completes or times out, unless the force parameter -* is given. */ -int mesh_path_del (u8 *addr,struct net_device *dev,bool force) +int mesh_path_del (u8 *addr,struct net_device *dev) {struct mesh_path *mpath;struct mpath_node *node;
@@ -338,14 +334,10 @@ int mesh_path_del(u8 *addr, struct net_device *dev, bool force)if (mpath->dev == dev &&memcmp (addr, mpath->dst,ETH_ALEN ) ==0 ) {spin_lock_bh (&mpath->state_lock); -if (!force && mpath->flags &MESH_PATH_RESOLVING ) { - mpath->flags |=MESH_PATH_DELETE ; - }else { - mpath->flags |=MESH_PATH_RESOLVING ; -hlist_del_rcu (&node->list); -call_rcu (&node->rcu, mesh_path_node_reclaim); -atomic_dec (&mesh_paths->entries); - } + mpath->flags |=MESH_PATH_RESOLVING ; +hlist_del_rcu (&node->list); +call_rcu (&node->rcu, mesh_path_node_reclaim); +atomic_dec (&mesh_paths->entries);spin_unlock_bh (&mpath->state_lock); goto enddel; }
@@ -508,7 +500,7 @@ void mesh_path_expire(struct net_device *dev) time_after(jiffies, mpath->exp_time + MESH_PATH_EXPIRE)) {spin_unlock_bh (&mpath->state_lock); -mesh_path_del (mpath->dst, mpath->dev, false); +mesh_path_del (mpath->dst, mpath->dev); } else spin_unlock_bh(&mpath->state_lock); }
Signature · 1 line
1.5.2.5