ath6kl_dbg(ATH6KL_DBG_TRC, "%s: got wmi @ 0x%p.\n", __func__, ar->wmi);
 
+       wlan_node_table_init(&ar->scan_table);
+
        /*
         * The reason we have to wait for the target here is that the
         * driver layer has to init BMI in order to set the host block
         */
        if (htc_wait_target(ar->htc_target)) {
                status = -EIO;
-               goto err_wmi_cleanup;
+               goto err_node_cleanup;
        }
 
        if (ath6kl_init_service_ep(ar)) {
        ath6kl_cleanup_amsdu_rxbufs(ar);
 err_cleanup_scatter:
        ath6kl_hif_cleanup_scatter(ar);
-err_wmi_cleanup:
+err_node_cleanup:
+       wlan_node_table_cleanup(&ar->scan_table);
        ath6kl_wmi_shutdown(ar->wmi);
        clear_bit(WMI_ENABLED, &ar->flag);
        ar->wmi = NULL;
 
        free_netdev(dev);
 
+       wlan_node_table_cleanup(&ar->scan_table);
+
        ath6kl_cfg80211_deinit(ar);
 }
 
 
        wmi->parent_dev = dev;
 
-       wlan_node_table_init(&dev->scan_table);
        ath6kl_wmi_qos_state_init(wmi);
 
        wmi->pwr_mode = REC_POWER;
        if (!wmi)
                return;
 
-       wlan_node_table_cleanup(&wmi->parent_dev->scan_table);
        kfree(wmi);
 }