if (test_and_clear_bit(ICE_FLAG_PLUG_AUX_DEV, pf->flags))
                ice_plug_aux_dev(pf);
 
+       if (test_and_clear_bit(ICE_FLAG_MTU_CHANGED, pf->flags)) {
+               struct iidc_event *event;
+
+               event = kzalloc(sizeof(*event), GFP_KERNEL);
+               if (event) {
+                       set_bit(IIDC_EVENT_AFTER_MTU_CHANGE, event->type);
+                       ice_send_event_to_aux(pf, event);
+                       kfree(event);
+               }
+       }
+
        ice_clean_adminq_subtask(pf);
        ice_check_media_subtask(pf);
        ice_check_for_hang_subtask(pf);
        struct ice_netdev_priv *np = netdev_priv(netdev);
        struct ice_vsi *vsi = np->vsi;
        struct ice_pf *pf = vsi->back;
-       struct iidc_event *event;
        u8 count = 0;
        int err = 0;
 
                return -EBUSY;
        }
 
-       event = kzalloc(sizeof(*event), GFP_KERNEL);
-       if (!event)
-               return -ENOMEM;
-
-       set_bit(IIDC_EVENT_BEFORE_MTU_CHANGE, event->type);
-       ice_send_event_to_aux(pf, event);
-       clear_bit(IIDC_EVENT_BEFORE_MTU_CHANGE, event->type);
-
        netdev->mtu = (unsigned int)new_mtu;
 
        /* if VSI is up, bring it down and then back up */
                err = ice_down(vsi);
                if (err) {
                        netdev_err(netdev, "change MTU if_down err %d\n", err);
-                       goto event_after;
+                       return err;
                }
 
                err = ice_up(vsi);
                if (err) {
                        netdev_err(netdev, "change MTU if_up err %d\n", err);
-                       goto event_after;
+                       return err;
                }
        }
 
        netdev_dbg(netdev, "changed MTU to %d\n", new_mtu);
-event_after:
-       set_bit(IIDC_EVENT_AFTER_MTU_CHANGE, event->type);
-       ice_send_event_to_aux(pf, event);
-       kfree(event);
+       set_bit(ICE_FLAG_MTU_CHANGED, pf->flags);
 
        return err;
 }