ath10k: Clean up peer when sta goes away.
authorBen Greear <greearb@candelatech.com>
Thu, 30 Jun 2016 12:23:59 +0000 (15:23 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 8 Jul 2016 06:48:22 +0000 (09:48 +0300)
If WMI and/or firmware has issues removing the peer object,
then we still need to clean up the peer object in the driver.

Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/mac.c

index 60a53242cecf1e641098d5180c51bf78766c0ad0..532c077560228d8b825ba54ff065ea2d2dce437c 100644 (file)
@@ -5997,9 +5997,17 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
                                continue;
 
                        if (peer->sta == sta) {
-                               ath10k_warn(ar, "found sta peer %pM entry on vdev %i after it was supposedly removed\n",
-                                           sta->addr, arvif->vdev_id);
+                               ath10k_warn(ar, "found sta peer %pM (ptr %p id %d) entry on vdev %i after it was supposedly removed\n",
+                                           sta->addr, peer, i, arvif->vdev_id);
                                peer->sta = NULL;
+
+                               /* Clean up the peer object as well since we
+                                * must have failed to do this above.
+                                */
+                               list_del(&peer->list);
+                               ar->peer_map[i] = NULL;
+                               kfree(peer);
+                               ar->num_peers--;
                        }
                }
                spin_unlock_bh(&ar->data_lock);