}
 EXPORT_SYMBOL(b53_phylink_mac_link_up);
 
-int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                      struct switchdev_trans *trans)
+int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering)
 {
        struct b53_device *dev = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        b53_enable_vlan(dev, dev->vlan_enabled, vlan_filtering);
 
        return 0;
 
                             struct phy_device *phydev,
                             int speed, int duplex,
                             bool tx_pause, bool rx_pause);
-int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                      struct switchdev_trans *trans);
+int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering);
 int b53_vlan_prepare(struct dsa_switch *ds, int port,
                     const struct switchdev_obj_port_vlan *vlan);
 void b53_vlan_add(struct dsa_switch *ds, int port,
 
 }
 
 static int dsa_loop_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                       bool vlan_filtering,
-                                       struct switchdev_trans *trans)
+                                       bool vlan_filtering)
 {
        dev_dbg(ds->dev, "%s: port: %d, vlan_filtering: %d\n",
                __func__, port, vlan_filtering);
 
 }
 
 static int hellcreek_vlan_filtering(struct dsa_switch *ds, int port,
-                                   bool vlan_filtering,
-                                   struct switchdev_trans *trans)
+                                   bool vlan_filtering)
 {
        struct hellcreek *hellcreek = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        dev_dbg(hellcreek->dev, "%s VLAN filtering on port %d\n",
                vlan_filtering ? "Enable" : "Disable", port);
 
 
 }
 
 static int gswip_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                    bool vlan_filtering,
-                                    struct switchdev_trans *trans)
+                                    bool vlan_filtering)
 {
+       struct net_device *bridge = dsa_to_port(ds, port)->bridge_dev;
        struct gswip_priv *priv = ds->priv;
 
        /* Do not allow changing the VLAN filtering options while in bridge */
-       if (switchdev_trans_ph_prepare(trans)) {
-               struct net_device *bridge = dsa_to_port(ds, port)->bridge_dev;
-
-               if (!bridge)
-                       return 0;
-
-               if (!!(priv->port_vlan_filter & BIT(port)) != vlan_filtering)
-                       return -EIO;
-
-               return 0;
-       }
+       if (bridge && !!(priv->port_vlan_filter & BIT(port)) != vlan_filtering)
+               return -EIO;
 
        if (vlan_filtering) {
                /* Use port based VLAN tag */
 
        /* disable port fetch/store dma on all ports */
        for (i = 0; i < priv->hw_info->max_ports; i++) {
-               struct switchdev_trans trans;
-
-               /* Skip the prepare phase, this shouldn't return an error
-                * during setup.
-                */
-               trans.ph_prepare = false;
-
                gswip_port_disable(ds, i);
-               gswip_port_vlan_filtering(ds, i, false, &trans);
+               gswip_port_vlan_filtering(ds, i, false);
        }
 
        /* enable Switch */
 
 }
 
 static int ksz8795_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                      bool flag,
-                                      struct switchdev_trans *trans)
+                                      bool flag)
 {
        struct ksz_device *dev = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        ksz_cfg(dev, S_MIRROR_CTRL, SW_VLAN_ENABLE, flag);
 
        return 0;
 
 }
 
 static int ksz9477_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                      bool flag,
-                                      struct switchdev_trans *trans)
+                                      bool flag)
 {
        struct ksz_device *dev = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (flag) {
                ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL,
                             PORT_VLAN_LOOKUP_VID_0, true);
 
 
 static int
 mt7530_port_vlan_filtering(struct dsa_switch *ds, int port,
-                          bool vlan_filtering,
-                          struct switchdev_trans *trans)
+                          bool vlan_filtering)
 {
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (vlan_filtering) {
                /* The port is being kept as VLAN-unaware port when bridge is
                 * set up with vlan_filtering not being set, Otherwise, the
 
 }
 
 static int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port,
-                                        bool vlan_filtering,
-                                        struct switchdev_trans *trans)
+                                        bool vlan_filtering)
 {
        struct mv88e6xxx_chip *chip = ds->priv;
        u16 mode = vlan_filtering ? MV88E6XXX_PORT_CTL2_8021Q_MODE_SECURE :
                MV88E6XXX_PORT_CTL2_8021Q_MODE_DISABLED;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return mv88e6xxx_max_vid(chip) ? 0 : -EOPNOTSUPP;
+       if (!mv88e6xxx_max_vid(chip))
+               return -EOPNOTSUPP;
 
        mv88e6xxx_reg_lock(chip);
        err = mv88e6xxx_port_set_8021q_mode(chip, port, mode);
 
                                   flags & BRIDGE_VLAN_INFO_UNTAGGED);
 }
 
-static int felix_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
-                               struct switchdev_trans *trans)
+static int felix_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
 {
        struct ocelot *ocelot = ds->priv;
 
-       return ocelot_port_vlan_filtering(ocelot, port, enabled, trans);
+       return ocelot_port_vlan_filtering(ocelot, port, enabled);
 }
 
 static void felix_vlan_add(struct dsa_switch *ds, int port,
 
 }
 
 static int
-qca8k_port_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                         struct switchdev_trans *trans)
+qca8k_port_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering)
 {
        struct qca8k_priv *priv = ds->priv;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (vlan_filtering) {
                qca8k_rmw(priv, QCA8K_PORT_LOOKUP_CTRL(port),
                          QCA8K_PORT_LOOKUP_VLAN_MODE,
 
 int rtl8366_reset_vlan(struct realtek_smi *smi);
 int rtl8366_init_vlan(struct realtek_smi *smi);
 int rtl8366_vlan_filtering(struct dsa_switch *ds, int port,
-                          bool vlan_filtering,
-                          struct switchdev_trans *trans);
+                          bool vlan_filtering);
 int rtl8366_vlan_prepare(struct dsa_switch *ds, int port,
                         const struct switchdev_obj_port_vlan *vlan);
 void rtl8366_vlan_add(struct dsa_switch *ds, int port,
 
 }
 EXPORT_SYMBOL_GPL(rtl8366_init_vlan);
 
-int rtl8366_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering,
-                          struct switchdev_trans *trans)
+int rtl8366_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering)
 {
        struct realtek_smi *smi = ds->priv;
        struct rtl8366_vlan_4k vlan4k;
        int ret;
 
        /* Use VLAN nr port + 1 since VLAN0 is not valid */
-       if (switchdev_trans_ph_prepare(trans)) {
-               if (!smi->ops->is_vlan_valid(smi, port + 1))
-                       return -EINVAL;
-
-               return 0;
-       }
+       if (!smi->ops->is_vlan_valid(smi, port + 1))
+               return -EINVAL;
 
        dev_info(smi->dev, "%s filtering on port %d\n",
                 vlan_filtering ? "enable" : "disable",
 
 
 int sja1105_static_config_reload(struct sja1105_private *priv,
                                 enum sja1105_reset_reason reason);
-int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
-                          struct switchdev_trans *trans);
+int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled);
 void sja1105_frame_memory_partitioning(struct sja1105_private *priv);
 
 /* From sja1105_devlink.c */
 
 
        rtnl_lock();
        for (port = 0; port < ds->num_ports; port++) {
-               struct switchdev_trans trans;
                struct dsa_port *dp;
 
                if (!dsa_is_user_port(ds, port))
                dp = dsa_to_port(ds, port);
                vlan_filtering = dsa_port_is_vlan_filtering(dp);
 
-               trans.ph_prepare = true;
-               rc = sja1105_vlan_filtering(ds, port, vlan_filtering, &trans);
-               if (rc)
-                       break;
-
-               trans.ph_prepare = false;
-               rc = sja1105_vlan_filtering(ds, port, vlan_filtering, &trans);
+               rc = sja1105_vlan_filtering(ds, port, vlan_filtering);
                if (rc)
                        break;
        }
 
  * which can only be partially reconfigured at runtime (and not the TPID).
  * So a switch reset is required.
  */
-int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled,
-                          struct switchdev_trans *trans)
+int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
 {
        struct sja1105_l2_lookup_params_entry *l2_lookup_params;
        struct sja1105_general_params_entry *general_params;
        u16 tpid, tpid2;
        int rc;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               list_for_each_entry(rule, &priv->flow_block.rules, list) {
-                       if (rule->type == SJA1105_RULE_VL) {
-                               dev_err(ds->dev,
-                                       "Cannot change VLAN filtering with active VL rules\n");
-                               return -EBUSY;
-                       }
+       list_for_each_entry(rule, &priv->flow_block.rules, list) {
+               if (rule->type == SJA1105_RULE_VL) {
+                       dev_err(ds->dev,
+                               "Cannot change VLAN filtering with active VL rules\n");
+                       return -EBUSY;
                }
-
-               return 0;
        }
 
        if (enabled) {
 
 }
 
 static int prestera_port_attr_br_flags_set(struct prestera_port *port,
-                                          struct switchdev_trans *trans,
                                           struct net_device *dev,
                                           unsigned long flags)
 {
        struct prestera_bridge_port *br_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        br_port = prestera_bridge_port_by_dev(port->sw->swdev, dev);
        if (!br_port)
                return 0;
 }
 
 static int prestera_port_attr_br_ageing_set(struct prestera_port *port,
-                                           struct switchdev_trans *trans,
                                            unsigned long ageing_clock_t)
 {
        unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t);
        u32 ageing_time_ms = jiffies_to_msecs(ageing_jiffies);
        struct prestera_switch *sw = port->sw;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               if (ageing_time_ms < PRESTERA_MIN_AGEING_TIME_MS ||
-                   ageing_time_ms > PRESTERA_MAX_AGEING_TIME_MS)
-                       return -ERANGE;
-               else
-                       return 0;
-       }
+       if (ageing_time_ms < PRESTERA_MIN_AGEING_TIME_MS ||
+           ageing_time_ms > PRESTERA_MAX_AGEING_TIME_MS)
+               return -ERANGE;
 
        return prestera_hw_switch_ageing_set(sw, ageing_time_ms);
 }
 
 static int prestera_port_attr_br_vlan_set(struct prestera_port *port,
-                                         struct switchdev_trans *trans,
                                          struct net_device *dev,
                                          bool vlan_enabled)
 {
        struct prestera_switch *sw = port->sw;
        struct prestera_bridge *bridge;
 
-       if (!switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge = prestera_bridge_by_dev(sw->swdev, dev);
        if (WARN_ON(!bridge))
                return -EINVAL;
 }
 
 static int presterar_port_attr_stp_state_set(struct prestera_port *port,
-                                            struct switchdev_trans *trans,
                                             struct net_device *dev,
                                             u8 state)
 {
        int err;
        u16 vid;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        br_port = prestera_bridge_port_by_dev(port->sw->swdev, dev);
        if (!br_port)
                return 0;
 }
 
 static int prestera_port_obj_attr_set(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans)
+                                     const struct switchdev_attr *attr)
 {
        struct prestera_port *port = netdev_priv(dev);
        int err = 0;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               err = presterar_port_attr_stp_state_set(port, trans,
-                                                       attr->orig_dev,
+               err = presterar_port_attr_stp_state_set(port, attr->orig_dev,
                                                        attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
                        err = -EINVAL;
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               err = prestera_port_attr_br_flags_set(port, trans,
-                                                     attr->orig_dev,
+               err = prestera_port_attr_br_flags_set(port, attr->orig_dev,
                                                      attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
-               err = prestera_port_attr_br_ageing_set(port, trans,
+               err = prestera_port_attr_br_ageing_set(port,
                                                       attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               err = prestera_port_attr_br_vlan_set(port, trans,
-                                                    attr->orig_dev,
+               err = prestera_port_attr_br_vlan_set(port, attr->orig_dev,
                                                     attr->u.vlan_filtering);
                break;
        default:
 
 }
 
 static int mlxsw_sp_port_attr_stp_state_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                           struct switchdev_trans *trans,
                                            struct net_device *orig_dev,
                                            u8 state)
 {
        struct mlxsw_sp_bridge_vlan *bridge_vlan;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* It's possible we failed to enslave the port, yet this
         * operation is executed due to it being deferred.
         */
 
 static int mlxsw_sp_port_attr_br_pre_flags_set(struct mlxsw_sp_port
                                               *mlxsw_sp_port,
-                                              struct switchdev_trans *trans,
                                               unsigned long brport_flags)
 {
        if (brport_flags & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD))
 }
 
 static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                          struct switchdev_trans *trans,
                                           struct net_device *orig_dev,
                                           unsigned long brport_flags)
 {
        struct mlxsw_sp_bridge_port *bridge_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge,
                                                orig_dev);
        if (!bridge_port)
 }
 
 static int mlxsw_sp_port_attr_br_ageing_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                           struct switchdev_trans *trans,
                                            unsigned long ageing_clock_t)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t);
        u32 ageing_time = jiffies_to_msecs(ageing_jiffies) / 1000;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               if (ageing_time < MLXSW_SP_MIN_AGEING_TIME ||
-                   ageing_time > MLXSW_SP_MAX_AGEING_TIME)
-                       return -ERANGE;
-               else
-                       return 0;
-       }
+       if (ageing_time < MLXSW_SP_MIN_AGEING_TIME ||
+           ageing_time > MLXSW_SP_MAX_AGEING_TIME)
+               return -ERANGE;
 
        return mlxsw_sp_ageing_set(mlxsw_sp, ageing_time);
 }
 
 static int mlxsw_sp_port_attr_br_vlan_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                         struct switchdev_trans *trans,
                                          struct net_device *orig_dev,
                                          bool vlan_enabled)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        struct mlxsw_sp_bridge_device *bridge_device;
 
-       if (!switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev);
        if (WARN_ON(!bridge_device))
                return -EINVAL;
 }
 
 static int mlxsw_sp_port_attr_br_vlan_proto_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                               struct switchdev_trans *trans,
                                                struct net_device *orig_dev,
                                                u16 vlan_proto)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        struct mlxsw_sp_bridge_device *bridge_device;
 
-       if (!switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev);
        if (WARN_ON(!bridge_device))
                return -EINVAL;
 }
 
 static int mlxsw_sp_port_attr_mrouter_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                         struct switchdev_trans *trans,
                                          struct net_device *orig_dev,
                                          bool is_port_mrouter)
 {
        struct mlxsw_sp_bridge_port *bridge_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge,
                                                orig_dev);
        if (!bridge_port)
 }
 
 static int mlxsw_sp_port_mc_disabled_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                        struct switchdev_trans *trans,
                                         struct net_device *orig_dev,
                                         bool mc_disabled)
 {
        struct mlxsw_sp_bridge_port *bridge_port;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* It's possible we failed to enslave the port, yet this
         * operation is executed due to it being deferred.
         */
 
 static int
 mlxsw_sp_port_attr_br_mrouter_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                 struct switchdev_trans *trans,
                                  struct net_device *orig_dev,
                                  bool is_mrouter)
 {
        struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
        struct mlxsw_sp_bridge_device *bridge_device;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* It's possible we failed to enslave the port, yet this
         * operation is executed due to it being deferred.
         */
 }
 
 static int mlxsw_sp_port_attr_set(struct net_device *dev,
-                                 const struct switchdev_attr *attr,
-                                 struct switchdev_trans *trans)
+                                 const struct switchdev_attr *attr)
 {
        struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
        int err;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               err = mlxsw_sp_port_attr_stp_state_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_stp_state_set(mlxsw_sp_port,
                                                       attr->orig_dev,
                                                       attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
                err = mlxsw_sp_port_attr_br_pre_flags_set(mlxsw_sp_port,
-                                                         trans,
                                                          attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               err = mlxsw_sp_port_attr_br_flags_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_flags_set(mlxsw_sp_port,
                                                      attr->orig_dev,
                                                      attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
-               err = mlxsw_sp_port_attr_br_ageing_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_ageing_set(mlxsw_sp_port,
                                                       attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               err = mlxsw_sp_port_attr_br_vlan_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_vlan_set(mlxsw_sp_port,
                                                     attr->orig_dev,
                                                     attr->u.vlan_filtering);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL:
-               err = mlxsw_sp_port_attr_br_vlan_proto_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_vlan_proto_set(mlxsw_sp_port,
                                                           attr->orig_dev,
                                                           attr->u.vlan_protocol);
                break;
        case SWITCHDEV_ATTR_ID_PORT_MROUTER:
-               err = mlxsw_sp_port_attr_mrouter_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_mrouter_set(mlxsw_sp_port,
                                                     attr->orig_dev,
                                                     attr->u.mrouter);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
-               err = mlxsw_sp_port_mc_disabled_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_mc_disabled_set(mlxsw_sp_port,
                                                    attr->orig_dev,
                                                    attr->u.mc_disabled);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MROUTER:
-               err = mlxsw_sp_port_attr_br_mrouter_set(mlxsw_sp_port, trans,
+               err = mlxsw_sp_port_attr_br_mrouter_set(mlxsw_sp_port,
                                                        attr->orig_dev,
                                                        attr->u.mrouter);
                break;
                break;
        }
 
-       if (switchdev_trans_ph_commit(trans))
-               mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp);
+       mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp);
 
        return err;
 }
 
 }
 
 int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port,
-                              bool vlan_aware, struct switchdev_trans *trans)
+                              bool vlan_aware)
 {
+       struct ocelot_vcap_block *block = &ocelot->block[VCAP_IS1];
        struct ocelot_port *ocelot_port = ocelot->ports[port];
+       struct ocelot_vcap_filter *filter;
        u32 val;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               struct ocelot_vcap_block *block = &ocelot->block[VCAP_IS1];
-               struct ocelot_vcap_filter *filter;
-
-               list_for_each_entry(filter, &block->rules, list) {
-                       if (filter->ingress_port_mask & BIT(port) &&
-                           filter->action.vid_replace_ena) {
-                               dev_err(ocelot->dev,
-                                       "Cannot change VLAN state with vlan modify rules active\n");
-                               return -EBUSY;
-                       }
+       list_for_each_entry(filter, &block->rules, list) {
+               if (filter->ingress_port_mask & BIT(port) &&
+                   filter->action.vid_replace_ena) {
+                       dev_err(ocelot->dev,
+                               "Cannot change VLAN state with vlan modify rules active\n");
+                       return -EBUSY;
                }
-
-               return 0;
        }
 
        ocelot_port->vlan_aware = vlan_aware;
                             struct net_device *bridge)
 {
        struct ocelot_vlan pvid = {0}, native_vlan = {0};
-       struct switchdev_trans trans;
        int ret;
 
        ocelot->bridge_mask &= ~BIT(port);
        if (!ocelot->bridge_mask)
                ocelot->hw_bridge_dev = NULL;
 
-       trans.ph_prepare = true;
-       ret = ocelot_port_vlan_filtering(ocelot, port, false, &trans);
-       if (ret)
-               return ret;
-
-       trans.ph_prepare = false;
-       ret = ocelot_port_vlan_filtering(ocelot, port, false, &trans);
+       ret = ocelot_port_vlan_filtering(ocelot, port, false);
        if (ret)
                return ret;
 
 
 };
 
 static void ocelot_port_attr_stp_state_set(struct ocelot *ocelot, int port,
-                                          struct switchdev_trans *trans,
                                           u8 state)
 {
-       if (switchdev_trans_ph_prepare(trans))
-               return;
-
        ocelot_bridge_stp_state_set(ocelot, port, state);
 }
 
 }
 
 static int ocelot_port_attr_set(struct net_device *dev,
-                               const struct switchdev_attr *attr,
-                               struct switchdev_trans *trans)
+                               const struct switchdev_attr *attr)
 {
        struct ocelot_port_private *priv = netdev_priv(dev);
        struct ocelot *ocelot = priv->port.ocelot;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               ocelot_port_attr_stp_state_set(ocelot, port, trans,
-                                              attr->u.stp_state);
+               ocelot_port_attr_stp_state_set(ocelot, port, attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
                ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               ocelot_port_vlan_filtering(ocelot, port,
-                                          attr->u.vlan_filtering, trans);
+               ocelot_port_vlan_filtering(ocelot, port, attr->u.vlan_filtering);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED:
                ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled);
 
        int (*port_attr_stp_state_set)(struct rocker_port *rocker_port,
                                       u8 state);
        int (*port_attr_bridge_flags_set)(struct rocker_port *rocker_port,
-                                         unsigned long brport_flags,
-                                         struct switchdev_trans *trans);
+                                         unsigned long brport_flags);
        int (*port_attr_bridge_flags_support_get)(const struct rocker_port *
                                                  rocker_port,
                                                  unsigned long *
                                                  p_brport_flags);
        int (*port_attr_bridge_ageing_time_set)(struct rocker_port *rocker_port,
-                                               u32 ageing_time,
-                                               struct switchdev_trans *trans);
+                                               u32 ageing_time);
        int (*port_obj_vlan_add)(struct rocker_port *rocker_port,
                                 const struct switchdev_obj_port_vlan *vlan);
        int (*port_obj_vlan_del)(struct rocker_port *rocker_port,
 
 }
 
 static int rocker_world_port_attr_stp_state_set(struct rocker_port *rocker_port,
-                                               u8 state,
-                                               struct switchdev_trans *trans)
+                                               u8 state)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
 
        if (!wops->port_attr_stp_state_set)
                return -EOPNOTSUPP;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        return wops->port_attr_stp_state_set(rocker_port, state);
 }
 
 
 static int
 rocker_world_port_attr_pre_bridge_flags_set(struct rocker_port *rocker_port,
-                                           unsigned long brport_flags,
-                                           struct switchdev_trans *trans)
+                                           unsigned long brport_flags)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
        unsigned long brport_flags_s;
 
 static int
 rocker_world_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
-                                       unsigned long brport_flags,
-                                       struct switchdev_trans *trans)
+                                       unsigned long brport_flags)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
 
        if (!wops->port_attr_bridge_flags_set)
                return -EOPNOTSUPP;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
-       return wops->port_attr_bridge_flags_set(rocker_port, brport_flags,
-                                               trans);
+       return wops->port_attr_bridge_flags_set(rocker_port, brport_flags);
 }
 
 static int
 rocker_world_port_attr_bridge_ageing_time_set(struct rocker_port *rocker_port,
-                                             u32 ageing_time,
-                                             struct switchdev_trans *trans)
-
+                                             u32 ageing_time)
 {
        struct rocker_world_ops *wops = rocker_port->rocker->wops;
 
        if (!wops->port_attr_bridge_ageing_time_set)
                return -EOPNOTSUPP;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
-       return wops->port_attr_bridge_ageing_time_set(rocker_port, ageing_time,
-                                                     trans);
+       return wops->port_attr_bridge_ageing_time_set(rocker_port, ageing_time);
 }
 
 static int
  ********************/
 
 static int rocker_port_attr_set(struct net_device *dev,
-                               const struct switchdev_attr *attr,
-                               struct switchdev_trans *trans)
+                               const struct switchdev_attr *attr)
 {
        struct rocker_port *rocker_port = netdev_priv(dev);
        int err = 0;
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
                err = rocker_world_port_attr_stp_state_set(rocker_port,
-                                                          attr->u.stp_state,
-                                                          trans);
+                                                          attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
                err = rocker_world_port_attr_pre_bridge_flags_set(rocker_port,
-                                                             attr->u.brport_flags,
-                                                             trans);
+                                                             attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
                err = rocker_world_port_attr_bridge_flags_set(rocker_port,
-                                                             attr->u.brport_flags,
-                                                             trans);
+                                                             attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
                err = rocker_world_port_attr_bridge_ageing_time_set(rocker_port,
-                                                                   attr->u.ageing_time,
-                                                                   trans);
+                                                                   attr->u.ageing_time);
                break;
        default:
                err = -EOPNOTSUPP;
 {
        int err;
 
-       err = rocker_port_attr_set(netdev, port_attr_info->attr,
-                                  port_attr_info->trans);
+       err = rocker_port_attr_set(netdev, port_attr_info->attr);
 
        port_attr_info->handled = true;
        return notifier_from_errno(err);
 
 }
 
 static int ofdpa_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
-                                           unsigned long brport_flags,
-                                           struct switchdev_trans *trans)
+                                           unsigned long brport_flags)
 {
        struct ofdpa_port *ofdpa_port = rocker_port->wpriv;
        unsigned long orig_flags;
 
        orig_flags = ofdpa_port->brport_flags;
        ofdpa_port->brport_flags = brport_flags;
-       if ((orig_flags ^ ofdpa_port->brport_flags) & BR_LEARNING &&
-           !switchdev_trans_ph_prepare(trans))
+
+       if ((orig_flags ^ ofdpa_port->brport_flags) & BR_LEARNING)
                err = rocker_port_set_learning(ofdpa_port->rocker_port,
                                               !!(ofdpa_port->brport_flags & BR_LEARNING));
 
-       if (switchdev_trans_ph_prepare(trans))
-               ofdpa_port->brport_flags = orig_flags;
-
        return err;
 }
 
 
 static int
 ofdpa_port_attr_bridge_ageing_time_set(struct rocker_port *rocker_port,
-                                      u32 ageing_time,
-                                      struct switchdev_trans *trans)
+                                      u32 ageing_time)
 {
        struct ofdpa_port *ofdpa_port = rocker_port->wpriv;
        struct ofdpa *ofdpa = ofdpa_port->ofdpa;
 
-       if (!switchdev_trans_ph_prepare(trans)) {
-               ofdpa_port->ageing_time = clock_t_to_jiffies(ageing_time);
-               if (ofdpa_port->ageing_time < ofdpa->ageing_time)
-                       ofdpa->ageing_time = ofdpa_port->ageing_time;
-               mod_timer(&ofdpa_port->ofdpa->fdb_cleanup_timer, jiffies);
-       }
+       ofdpa_port->ageing_time = clock_t_to_jiffies(ageing_time);
+       if (ofdpa_port->ageing_time < ofdpa->ageing_time)
+               ofdpa->ageing_time = ofdpa_port->ageing_time;
+       mod_timer(&ofdpa_port->ofdpa->fdb_cleanup_timer, jiffies);
 
        return 0;
 }
 
        unsigned long event;
 };
 
-static int cpsw_port_stp_state_set(struct cpsw_priv *priv,
-                                  struct switchdev_trans *trans, u8 state)
+static int cpsw_port_stp_state_set(struct cpsw_priv *priv, u8 state)
 {
        struct cpsw_common *cpsw = priv->cpsw;
        u8 cpsw_state;
        int ret = 0;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        switch (state) {
        case BR_STATE_FORWARDING:
                cpsw_state = ALE_PORT_STATE_FORWARD;
 }
 
 static int cpsw_port_attr_br_flags_set(struct cpsw_priv *priv,
-                                      struct switchdev_trans *trans,
                                       struct net_device *orig_dev,
                                       unsigned long brport_flags)
 {
        struct cpsw_common *cpsw = priv->cpsw;
        bool unreg_mcast_add = false;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (brport_flags & BR_MCAST_FLOOD)
                unreg_mcast_add = true;
        dev_dbg(priv->dev, "BR_MCAST_FLOOD: %d port %u\n",
 }
 
 static int cpsw_port_attr_br_flags_pre_set(struct net_device *netdev,
-                                          struct switchdev_trans *trans,
                                           unsigned long flags)
 {
        if (flags & ~(BR_LEARNING | BR_MCAST_FLOOD))
 }
 
 static int cpsw_port_attr_set(struct net_device *ndev,
-                             const struct switchdev_attr *attr,
-                             struct switchdev_trans *trans)
+                             const struct switchdev_attr *attr)
 {
        struct cpsw_priv *priv = netdev_priv(ndev);
        int ret;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
-               ret = cpsw_port_attr_br_flags_pre_set(ndev, trans,
+               ret = cpsw_port_attr_br_flags_pre_set(ndev,
                                                      attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               ret = cpsw_port_stp_state_set(priv, trans, attr->u.stp_state);
+               ret = cpsw_port_stp_state_set(priv, attr->u.stp_state);
                dev_dbg(priv->dev, "stp state: %u\n", attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               ret = cpsw_port_attr_br_flags_set(priv, trans, attr->orig_dev,
+               ret = cpsw_port_attr_br_flags_set(priv, attr->orig_dev,
                                                  attr->u.brport_flags);
                break;
        default:
 
 }
 
 static int dpaa2_switch_port_attr_stp_state_set(struct net_device *netdev,
-                                               struct switchdev_trans *trans,
                                                u8 state)
 {
        struct ethsw_port_priv *port_priv = netdev_priv(netdev);
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        return dpaa2_switch_port_set_stp_state(port_priv, state);
 }
 
 static int dpaa2_switch_port_attr_br_flags_pre_set(struct net_device *netdev,
-                                                  struct switchdev_trans *trans,
                                                   unsigned long flags)
 {
        if (flags & ~(BR_LEARNING | BR_FLOOD))
 }
 
 static int dpaa2_switch_port_attr_br_flags_set(struct net_device *netdev,
-                                              struct switchdev_trans *trans,
                                               unsigned long flags)
 {
        struct ethsw_port_priv *port_priv = netdev_priv(netdev);
        int err = 0;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        /* Learning is enabled per switch */
        err = dpaa2_switch_set_learning(port_priv->ethsw_data,
                                        !!(flags & BR_LEARNING));
 }
 
 static int dpaa2_switch_port_attr_set(struct net_device *netdev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans)
+                                     const struct switchdev_attr *attr)
 {
        int err = 0;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               err = dpaa2_switch_port_attr_stp_state_set(netdev, trans,
+               err = dpaa2_switch_port_attr_stp_state_set(netdev,
                                                           attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
-               err = dpaa2_switch_port_attr_br_flags_pre_set(netdev, trans,
+               err = dpaa2_switch_port_attr_br_flags_pre_set(netdev,
                                                              attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               err = dpaa2_switch_port_attr_br_flags_set(netdev, trans,
+               err = dpaa2_switch_port_attr_br_flags_set(netdev,
                                                          attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
 {
        int err;
 
-       err = dpaa2_switch_port_attr_set(netdev, port_attr_info->attr,
-                                        port_attr_info->trans);
+       err = dpaa2_switch_port_attr_set(netdev, port_attr_info->attr);
 
        port_attr_info->handled = true;
        return notifier_from_errno(err);
 
         * VLAN support
         */
        int     (*port_vlan_filtering)(struct dsa_switch *ds, int port,
-                                      bool vlan_filtering,
-                                      struct switchdev_trans *trans);
+                                      bool vlan_filtering);
        int (*port_vlan_prepare)(struct dsa_switch *ds, int port,
                                 const struct switchdev_obj_port_vlan *vlan);
        void (*port_vlan_add)(struct dsa_switch *ds, int port,
 
 struct switchdev_notifier_port_attr_info {
        struct switchdev_notifier_info info; /* must be first */
        const struct switchdev_attr *attr;
-       struct switchdev_trans *trans;
        bool handled;
 };
 
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans));
+                                     const struct switchdev_attr *attr));
 #else
 
 static inline void switchdev_deferred_process(void)
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans))
+                                     const struct switchdev_attr *attr))
 {
        return 0;
 }
 
 void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs);
 void ocelot_adjust_link(struct ocelot *ocelot, int port,
                        struct phy_device *phydev);
-int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port, bool enabled,
-                              struct switchdev_trans *trans);
+int ocelot_port_vlan_filtering(struct ocelot *ocelot, int port, bool enabled);
 void ocelot_bridge_stp_state_set(struct ocelot *ocelot, int port, u8 state);
 int ocelot_port_bridge_join(struct ocelot *ocelot, int port,
                            struct net_device *bridge);
 
 }
 
 /* port.c */
-int dsa_port_set_state(struct dsa_port *dp, u8 state,
-                      struct switchdev_trans *trans);
+int dsa_port_set_state(struct dsa_port *dp, u8 state);
 int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy);
 int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);
 void dsa_port_disable_rt(struct dsa_port *dp);
 void dsa_port_disable(struct dsa_port *dp);
 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br);
 void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);
-int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
-                           struct switchdev_trans *trans);
+int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering);
 bool dsa_port_skip_vlan_configuration(struct dsa_port *dp);
-int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
-                        struct switchdev_trans *trans);
+int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock);
 int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu,
                        bool propagate_upstream);
 int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
                     const struct switchdev_obj_port_mdb *mdb);
 int dsa_port_mdb_del(const struct dsa_port *dp,
                     const struct switchdev_obj_port_mdb *mdb);
-int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                             struct switchdev_trans *trans);
-int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                         struct switchdev_trans *trans);
-int dsa_port_mrouter(struct dsa_port *dp, bool mrouter,
-                    struct switchdev_trans *trans);
+int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags);
+int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags);
+int dsa_port_mrouter(struct dsa_port *dp, bool mrouter);
 int dsa_port_vlan_add(struct dsa_port *dp,
                      const struct switchdev_obj_port_vlan *vlan);
 int dsa_port_vlan_del(struct dsa_port *dp,
 
        return notifier_to_errno(err);
 }
 
-int dsa_port_set_state(struct dsa_port *dp, u8 state,
-                      struct switchdev_trans *trans)
+int dsa_port_set_state(struct dsa_port *dp, u8 state)
 {
        struct dsa_switch *ds = dp->ds;
        int port = dp->index;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return ds->ops->port_stp_state_set ? 0 : -EOPNOTSUPP;
+       if (!ds->ops->port_stp_state_set)
+               return -EOPNOTSUPP;
 
-       if (ds->ops->port_stp_state_set)
-               ds->ops->port_stp_state_set(ds, port, state);
+       ds->ops->port_stp_state_set(ds, port, state);
 
        if (ds->ops->port_fast_age) {
                /* Fast age FDB entries or flush appropriate forwarding database
 {
        int err;
 
-       err = dsa_port_set_state(dp, state, NULL);
+       err = dsa_port_set_state(dp, state);
        if (err)
                pr_err("DSA: failed to set STP state %u (%d)\n", state, err);
 }
        int err;
 
        /* Set the flooding mode before joining the port in the switch */
-       err = dsa_port_bridge_flags(dp, BR_FLOOD | BR_MCAST_FLOOD, NULL);
+       err = dsa_port_bridge_flags(dp, BR_FLOOD | BR_MCAST_FLOOD);
        if (err)
                return err;
 
 
        /* The bridging is rolled back on error */
        if (err) {
-               dsa_port_bridge_flags(dp, 0, NULL);
+               dsa_port_bridge_flags(dp, 0);
                dp->bridge_dev = NULL;
        }
 
                pr_err("DSA: failed to notify DSA_NOTIFIER_BRIDGE_LEAVE\n");
 
        /* Port is leaving the bridge, disable flooding */
-       dsa_port_bridge_flags(dp, 0, NULL);
+       dsa_port_bridge_flags(dp, 0);
 
        /* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
         * so allow it to be in BR_STATE_FORWARDING to be kept functional
        return true;
 }
 
-int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
-                           struct switchdev_trans *trans)
+int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering)
 {
        struct dsa_switch *ds = dp->ds;
+       bool apply;
        int err;
 
-       if (switchdev_trans_ph_prepare(trans)) {
-               bool apply;
-
-               if (!ds->ops->port_vlan_filtering)
-                       return -EOPNOTSUPP;
+       if (!ds->ops->port_vlan_filtering)
+               return -EOPNOTSUPP;
 
-               /* We are called from dsa_slave_switchdev_blocking_event(),
-                * which is not under rcu_read_lock(), unlike
-                * dsa_slave_switchdev_event().
-                */
-               rcu_read_lock();
-               apply = dsa_port_can_apply_vlan_filtering(dp, vlan_filtering);
-               rcu_read_unlock();
-               if (!apply)
-                       return -EINVAL;
-       }
+       /* We are called from dsa_slave_switchdev_blocking_event(),
+        * which is not under rcu_read_lock(), unlike
+        * dsa_slave_switchdev_event().
+        */
+       rcu_read_lock();
+       apply = dsa_port_can_apply_vlan_filtering(dp, vlan_filtering);
+       rcu_read_unlock();
+       if (!apply)
+               return -EINVAL;
 
        if (dsa_port_is_vlan_filtering(dp) == vlan_filtering)
                return 0;
 
-       err = ds->ops->port_vlan_filtering(ds, dp->index, vlan_filtering,
-                                          trans);
+       err = ds->ops->port_vlan_filtering(ds, dp->index, vlan_filtering);
        if (err)
                return err;
 
-       if (switchdev_trans_ph_commit(trans)) {
-               if (ds->vlan_filtering_is_global)
-                       ds->vlan_filtering = vlan_filtering;
-               else
-                       dp->vlan_filtering = vlan_filtering;
-       }
+       if (ds->vlan_filtering_is_global)
+               ds->vlan_filtering = vlan_filtering;
+       else
+               dp->vlan_filtering = vlan_filtering;
 
        return 0;
 }
                !br_vlan_enabled(dp->bridge_dev));
 }
 
-int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock,
-                        struct switchdev_trans *trans)
+int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock)
 {
        unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock);
        unsigned int ageing_time = jiffies_to_msecs(ageing_jiffies);
-       struct dsa_notifier_ageing_time_info info = {
-               .ageing_time = ageing_time,
-               .trans = trans,
-       };
+       struct dsa_notifier_ageing_time_info info;
+       struct switchdev_trans trans;
+       int err;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
+       info.ageing_time = ageing_time;
+       info.trans = &trans;
+
+       trans.ph_prepare = true;
+       err = dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
+       if (err)
+               return err;
 
        dp->ageing_time = ageing_time;
 
+       trans.ph_prepare = false;
        return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info);
 }
 
-int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                             struct switchdev_trans *trans)
+int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags)
 {
        struct dsa_switch *ds = dp->ds;
 
        return 0;
 }
 
-int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags,
-                         struct switchdev_trans *trans)
+int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags)
 {
        struct dsa_switch *ds = dp->ds;
        int port = dp->index;
        int err = 0;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return 0;
-
        if (ds->ops->port_egress_floods)
                err = ds->ops->port_egress_floods(ds, port, flags & BR_FLOOD,
                                                  flags & BR_MCAST_FLOOD);
        return err;
 }
 
-int dsa_port_mrouter(struct dsa_port *dp, bool mrouter,
-                    struct switchdev_trans *trans)
+int dsa_port_mrouter(struct dsa_port *dp, bool mrouter)
 {
        struct dsa_switch *ds = dp->ds;
        int port = dp->index;
 
-       if (switchdev_trans_ph_prepare(trans))
-               return ds->ops->port_egress_floods ? 0 : -EOPNOTSUPP;
+       if (!ds->ops->port_egress_floods)
+               return -EOPNOTSUPP;
 
        return ds->ops->port_egress_floods(ds, port, true, mrouter);
 }
 
 }
 
 static int dsa_slave_port_attr_set(struct net_device *dev,
-                                  const struct switchdev_attr *attr,
-                                  struct switchdev_trans *trans)
+                                  const struct switchdev_attr *attr)
 {
        struct dsa_port *dp = dsa_slave_to_port(dev);
        int ret;
 
        switch (attr->id) {
        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
-               ret = dsa_port_set_state(dp, attr->u.stp_state, trans);
+               ret = dsa_port_set_state(dp, attr->u.stp_state);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
-               ret = dsa_port_vlan_filtering(dp, attr->u.vlan_filtering,
-                                             trans);
+               ret = dsa_port_vlan_filtering(dp, attr->u.vlan_filtering);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
-               ret = dsa_port_ageing_time(dp, attr->u.ageing_time, trans);
+               ret = dsa_port_ageing_time(dp, attr->u.ageing_time);
                break;
        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
-               ret = dsa_port_pre_bridge_flags(dp, attr->u.brport_flags,
-                                               trans);
+               ret = dsa_port_pre_bridge_flags(dp, attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
-               ret = dsa_port_bridge_flags(dp, attr->u.brport_flags, trans);
+               ret = dsa_port_bridge_flags(dp, attr->u.brport_flags);
                break;
        case SWITCHDEV_ATTR_ID_BRIDGE_MROUTER:
-               ret = dsa_port_mrouter(dp->cpu_dp, attr->u.mrouter, trans);
+               ret = dsa_port_mrouter(dp->cpu_dp, attr->u.mrouter);
                break;
        default:
                ret = -EOPNOTSUPP;
 
                }
        }
        if (unset_vlan_filtering) {
-               struct switchdev_trans trans;
-
-               trans.ph_prepare = true;
-               err = dsa_port_vlan_filtering(dsa_to_port(ds, info->port),
-                                             false, &trans);
-               if (err && err != EOPNOTSUPP)
-                       return err;
-
-               trans.ph_prepare = false;
                err = dsa_port_vlan_filtering(dsa_to_port(ds, info->port),
-                                             false, &trans);
+                                             false);
                if (err && err != EOPNOTSUPP)
                        return err;
        }
 
 
 static int switchdev_port_attr_notify(enum switchdev_notifier_type nt,
                                      struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans)
+                                     const struct switchdev_attr *attr)
 {
        int err;
        int rc;
 
        struct switchdev_notifier_port_attr_info attr_info = {
                .attr = attr,
-               .trans = trans,
                .handled = false,
        };
 
 static int switchdev_port_attr_set_now(struct net_device *dev,
                                       const struct switchdev_attr *attr)
 {
-       struct switchdev_trans trans;
-       int err;
-
-       /* Phase I: prepare for attr set. Driver/device should fail
-        * here if there are going to be issues in the commit phase,
-        * such as lack of resources or support.  The driver/device
-        * should reserve resources needed for the commit phase here,
-        * but should not commit the attr.
-        */
-
-       trans.ph_prepare = true;
-       err = switchdev_port_attr_notify(SWITCHDEV_PORT_ATTR_SET, dev, attr,
-                                        &trans);
-       if (err)
-               return err;
-
-       /* Phase II: commit attr set.  This cannot fail as a fault
-        * of driver/device.  If it does, it's a bug in the driver/device
-        * because the driver said everythings was OK in phase I.
-        */
-
-       trans.ph_prepare = false;
-       err = switchdev_port_attr_notify(SWITCHDEV_PORT_ATTR_SET, dev, attr,
-                                        &trans);
-       WARN(err, "%s: Commit of attribute (id=%d) failed.\n",
-            dev->name, attr->id);
-
-       return err;
+       return switchdev_port_attr_notify(SWITCHDEV_PORT_ATTR_SET, dev, attr);
 }
 
 static void switchdev_port_attr_set_deferred(struct net_device *dev,
  *     @dev: port device
  *     @attr: attribute to set
  *
- *     Use a 2-phase prepare-commit transaction model to ensure
- *     system is not left in a partially updated state due to
- *     failure from driver/device.
- *
  *     rtnl_lock must be held and must not be in atomic section,
  *     in case SWITCHDEV_F_DEFER flag is not set.
  */
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans))
+                                     const struct switchdev_attr *attr))
 {
        struct net_device *lower_dev;
        struct list_head *iter;
 
        if (check_cb(dev)) {
                port_attr_info->handled = true;
-               return set_cb(dev, port_attr_info->attr,
-                             port_attr_info->trans);
+               return set_cb(dev, port_attr_info->attr);
        }
 
        /* Switch ports might be stacked under e.g. a LAG. Ignore the
                        struct switchdev_notifier_port_attr_info *port_attr_info,
                        bool (*check_cb)(const struct net_device *dev),
                        int (*set_cb)(struct net_device *dev,
-                                     const struct switchdev_attr *attr,
-                                     struct switchdev_trans *trans))
+                                     const struct switchdev_attr *attr))
 {
        int err;