clear_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state);
        }
 
-       if (vsi->type == ICE_VSI_PF)
-               ice_devlink_destroy_pf_port(pf);
-
        if (test_bit(ICE_FLAG_RSS_ENA, pf->flags))
                ice_rss_clean(vsi);
 
                }
        }
 
+       if (vsi->type == ICE_VSI_PF)
+               ice_devlink_destroy_pf_port(pf);
+
        if (vsi->type == ICE_VSI_VF &&
            vsi->agg_node && vsi->agg_node->valid)
                vsi->agg_node->num_vsis--;
 
        if (!vsi || !vsi->netdev)
                return -EIO;
 
+       err = ice_devlink_create_pf_port(pf);
+       if (err)
+               goto err_devlink_create;
+
        err = register_netdev(vsi->netdev);
        if (err)
                goto err_register_netdev;
        set_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state);
        netif_carrier_off(vsi->netdev);
        netif_tx_stop_all_queues(vsi->netdev);
-       err = ice_devlink_create_pf_port(pf);
-       if (err)
-               goto err_devlink_create;
 
        devlink_port_type_eth_set(&pf->devlink_port, vsi->netdev);
 
        return 0;
-err_devlink_create:
-       unregister_netdev(vsi->netdev);
-       clear_bit(ICE_VSI_NETDEV_REGISTERED, vsi->state);
 err_register_netdev:
+       ice_devlink_destroy_pf_port(pf);
+err_devlink_create:
        free_netdev(vsi->netdev);
        vsi->netdev = NULL;
        clear_bit(ICE_VSI_NETDEV_ALLOCD, vsi->state);
 
        if (!vf->repr)
                return;
 
-       ice_devlink_destroy_vf_port(vf);
        kfree(vf->repr->q_vector);
        vf->repr->q_vector = NULL;
        unregister_netdev(vf->repr->netdev);
+       ice_devlink_destroy_vf_port(vf);
        free_netdev(vf->repr->netdev);
        vf->repr->netdev = NULL;
 #ifdef CONFIG_ICE_SWITCHDEV