Re: [PATCH v3 net-next 03/11] net: switchdev: remove the transaction structure from port object notifiers
From: Ido Schimmel <hidden>
Date: 2021-01-07 10:41:57
Forgot to actually add Petr On Thu, Jan 07, 2021 at 12:38:39PM +0200, Ido Schimmel wrote:
+Petr On Thu, Jan 07, 2021 at 01:17:20AM +0200, Vladimir Oltean wrote:quoted
static int mlxsw_sp_port_obj_add(struct net_device *dev, const struct switchdev_obj *obj, - struct switchdev_trans *trans, struct netlink_ext_ack *extack) { struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev); const struct switchdev_obj_port_vlan *vlan; + struct switchdev_trans trans; int err = 0; switch (obj->id) { case SWITCHDEV_OBJ_ID_PORT_VLAN: vlan = SWITCHDEV_OBJ_PORT_VLAN(obj); - err = mlxsw_sp_port_vlans_add(mlxsw_sp_port, vlan, trans, +Got the regression results. The call to mlxsw_sp_span_respin() should be placed here because it needs to be triggered regardless of the return value of mlxsw_sp_port_vlans_add(). I'm looking into another failure, which might not be related to these patches. I will also have results with a debug kernel tomorrow (takes almost a day to complete). Will let you know.quoted
+ trans.ph_prepare = true; + err = mlxsw_sp_port_vlans_add(mlxsw_sp_port, vlan, &trans, extack); + if (err) + break; - if (switchdev_trans_ph_prepare(trans)) { - /* The event is emitted before the changes are actually - * applied to the bridge. Therefore schedule the respin - * call for later, so that the respin logic sees the - * updated bridge state. - */ - mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp); - } + /* The event is emitted before the changes are actually + * applied to the bridge. Therefore schedule the respin + * call for later, so that the respin logic sees the + * updated bridge state. + */ + mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp); + + trans.ph_prepare = false; + err = mlxsw_sp_port_vlans_add(mlxsw_sp_port, vlan, &trans, + extack); break; case SWITCHDEV_OBJ_ID_PORT_MDB: err = mlxsw_sp_port_mdb_add(mlxsw_sp_port, - SWITCHDEV_OBJ_PORT_MDB(obj), - trans); + SWITCHDEV_OBJ_PORT_MDB(obj)); break; default: err = -EOPNOTSUPP;