might_sleep();
 
+       sdata = get_bss_sdata(sdata);
        check_sdata_in_driver(sdata);
 
        trace_drv_set_key(local, cmd, sdata, sta, key);
        if (sta)
                ista = &sta->sta;
 
+       sdata = get_bss_sdata(sdata);
        check_sdata_in_driver(sdata);
 
        trace_drv_update_tkip_key(local, sdata, conf, ista, iv32);
 
                 */
                if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE))
                        goto out_unsupported;
-               sdata = container_of(sdata->bss,
-                                    struct ieee80211_sub_if_data,
-                                    u.ap);
        }
 
        ret = drv_set_key(key->local, SET_KEY, sdata, sta, &key->conf);
              (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
                increment_tailroom_need_count(sdata);
 
-       if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-               sdata = container_of(sdata->bss,
-                                    struct ieee80211_sub_if_data,
-                                    u.ap);
-
        ret = drv_set_key(key->local, DISABLE_KEY, sdata,
                          sta, &key->conf);
 
 
        /* tear down aggregation sessions and remove STAs */
        mutex_lock(&local->sta_mtx);
        list_for_each_entry(sta, &local->sta_list, list) {
-               if (sta->uploaded) {
-                       sdata = sta->sdata;
-                       if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-                               sdata = container_of(sdata->bss,
-                                            struct ieee80211_sub_if_data,
-                                            u.ap);
-
-                       drv_sta_remove(local, sdata, &sta->sta);
-               }
+               if (sta->uploaded)
+                       drv_sta_remove(local, sta->sdata, &sta->sta);
 
                mesh_plink_quiesce(sta);
        }
 
                }
        }
 
-       if (sta->uploaded) {
-               if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-                       sdata = container_of(sdata->bss,
-                                            struct ieee80211_sub_if_data,
-                                            u.ap);
+       if (sta->uploaded)
                drv_sta_remove(local, sdata, &sta->sta);
-               sdata = sta->sdata;
-       }
 
        /*
         * At this point, after we wait for an RCU grace period,
 
        /* add STAs back */
        mutex_lock(&local->sta_mtx);
        list_for_each_entry(sta, &local->sta_list, list) {
-               if (sta->uploaded) {
-                       sdata = sta->sdata;
-                       if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
-                               sdata = container_of(sdata->bss,
-                                            struct ieee80211_sub_if_data,
-                                            u.ap);
-
-                       WARN_ON(drv_sta_add(local, sdata, &sta->sta));
-               }
+               if (sta->uploaded)
+                       WARN_ON(drv_sta_add(local, sta->sdata, &sta->sta));
        }
        mutex_unlock(&local->sta_mtx);