diff options
-rw-r--r-- | net/batman-adv/gateway_client.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c index e6c8382c79ba..ccf70bed0d0c 100644 --- a/net/batman-adv/gateway_client.c +++ b/net/batman-adv/gateway_client.c | |||
@@ -527,11 +527,12 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv, | |||
527 | * gets dereferenced. | 527 | * gets dereferenced. |
528 | */ | 528 | */ |
529 | spin_lock_bh(&bat_priv->gw.list_lock); | 529 | spin_lock_bh(&bat_priv->gw.list_lock); |
530 | hlist_del_init_rcu(&gw_node->list); | 530 | if (!hlist_unhashed(&gw_node->list)) { |
531 | hlist_del_init_rcu(&gw_node->list); | ||
532 | batadv_gw_node_free_ref(gw_node); | ||
533 | } | ||
531 | spin_unlock_bh(&bat_priv->gw.list_lock); | 534 | spin_unlock_bh(&bat_priv->gw.list_lock); |
532 | 535 | ||
533 | batadv_gw_node_free_ref(gw_node); | ||
534 | |||
535 | curr_gw = batadv_gw_get_selected_gw_node(bat_priv); | 536 | curr_gw = batadv_gw_get_selected_gw_node(bat_priv); |
536 | if (gw_node == curr_gw) | 537 | if (gw_node == curr_gw) |
537 | batadv_gw_reselect(bat_priv); | 538 | batadv_gw_reselect(bat_priv); |