struct netlink_ext_ack *extack;
        int err = NOTIFY_DONE;
 
+       if (!dsa_slave_dev_check(dev))
+               return err;
+
        extack = netdev_notifier_info_to_extack(&info->info);
 
        if (netif_is_bridge_master(info->upper_dev)) {
 {
        struct dsa_port *dp = dsa_slave_to_port(dev);
 
+       if (!dsa_slave_dev_check(dev))
+               return NOTIFY_DONE;
+
        if (netif_is_bridge_master(info->upper_dev) && !info->linking)
                dsa_port_pre_bridge_leave(dp, info->upper_dev);
        else if (netif_is_lag_master(info->upper_dev) && !info->linking)
        int err = NOTIFY_DONE;
        struct dsa_port *dp;
 
+       if (!netif_is_lag_master(dev))
+               return err;
+
        netdev_for_each_lower_dev(dev, lower, iter) {
                if (!dsa_slave_dev_check(lower))
                        continue;
        int err = NOTIFY_DONE;
        struct dsa_port *dp;
 
+       if (!netif_is_lag_master(dev))
+               return err;
+
        netdev_for_each_lower_dev(dev, lower, iter) {
                if (!dsa_slave_dev_check(lower))
                        continue;
                if (err != NOTIFY_DONE)
                        return err;
 
-               if (dsa_slave_dev_check(dev))
-                       return dsa_slave_prechangeupper(dev, ptr);
+               err = dsa_slave_prechangeupper(dev, ptr);
+               if (notifier_to_errno(err))
+                       return err;
 
-               if (netif_is_lag_master(dev))
-                       return dsa_slave_lag_prechangeupper(dev, ptr);
+               err = dsa_slave_lag_prechangeupper(dev, ptr);
+               if (notifier_to_errno(err))
+                       return err;
 
                break;
        }
-       case NETDEV_CHANGEUPPER:
-               if (dsa_slave_dev_check(dev))
-                       return dsa_slave_changeupper(dev, ptr);
+       case NETDEV_CHANGEUPPER: {
+               int err;
+
+               err = dsa_slave_changeupper(dev, ptr);
+               if (notifier_to_errno(err))
+                       return err;
 
-               if (netif_is_lag_master(dev))
-                       return dsa_slave_lag_changeupper(dev, ptr);
+               err = dsa_slave_lag_changeupper(dev, ptr);
+               if (notifier_to_errno(err))
+                       return err;
 
                break;
+       }
        case NETDEV_CHANGELOWERSTATE: {
                struct netdev_notifier_changelowerstate_info *info = ptr;
                struct dsa_port *dp;