struct ieee80211_local *local = sdata->local;
        struct ieee80211_chanctx_conf *conf;
        struct ieee80211_chanctx *curr_ctx = NULL;
-       int ret = 0;
+       int ret;
 
        if (WARN_ON(sdata->vif.type == NL80211_IFTYPE_NAN))
                return -EOPNOTSUPP;
                ieee80211_recalc_chanctx_min_def(local, new_ctx, link);
 
                ret = drv_assign_vif_chanctx(local, sdata, link->conf, new_ctx);
-               if (ret)
-                       goto out;
-
-               conf = &new_ctx->conf;
-               list_add(&link->assigned_chanctx_list,
-                        &new_ctx->assigned_links);
+               if (!ret) {
+                       /* succeeded, so commit it to the data structures */
+                       conf = &new_ctx->conf;
+                       list_add(&link->assigned_chanctx_list,
+                                &new_ctx->assigned_links);
+               }
+       } else {
+               ret = 0;
        }
 
-out:
        rcu_assign_pointer(link->conf->chanctx_conf, conf);
 
        sdata->vif.cfg.idle = !conf;