summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/batman-adv/routing.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 2ecfca246be4..b494e435686f 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -100,10 +100,6 @@ static void _batadv_update_route(struct batadv_priv *bat_priv,
100 if (curr_router) 100 if (curr_router)
101 batadv_neigh_node_put(curr_router); 101 batadv_neigh_node_put(curr_router);
102 102
103 /* increase refcount of new best neighbor */
104 if (neigh_node && !kref_get_unless_zero(&neigh_node->refcount))
105 neigh_node = NULL;
106
107 spin_lock_bh(&orig_node->neigh_list_lock); 103 spin_lock_bh(&orig_node->neigh_list_lock);
108 /* curr_router used earlier may not be the current orig_ifinfo->router 104 /* curr_router used earlier may not be the current orig_ifinfo->router
109 * anymore because it was dereferenced outside of the neigh_list_lock 105 * anymore because it was dereferenced outside of the neigh_list_lock
@@ -114,6 +110,10 @@ static void _batadv_update_route(struct batadv_priv *bat_priv,
114 */ 110 */
115 curr_router = rcu_dereference_protected(orig_ifinfo->router, true); 111 curr_router = rcu_dereference_protected(orig_ifinfo->router, true);
116 112
113 /* increase refcount of new best neighbor */
114 if (neigh_node)
115 kref_get(&neigh_node->refcount);
116
117 rcu_assign_pointer(orig_ifinfo->router, neigh_node); 117 rcu_assign_pointer(orig_ifinfo->router, neigh_node);
118 spin_unlock_bh(&orig_node->neigh_list_lock); 118 spin_unlock_bh(&orig_node->neigh_list_lock);
119 batadv_orig_ifinfo_put(orig_ifinfo); 119 batadv_orig_ifinfo_put(orig_ifinfo);