On Thu, May 21, 2015 at 5:56 PM, Linus Lüssing <linus.luessing@xxxxxxxxx> wrote: > diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c > index 2d69d5c..066199e 100644 > --- a/net/bridge/br_multicast.c > +++ b/net/bridge/br_multicast.c > @@ -1775,8 +1775,6 @@ int br_multicast_set_router(struct net_bridge *br, unsigned long val) > int err = -ENOENT; > Nit: err can be initialized to -EINVAL now. > spin_lock_bh(&br->multicast_lock); > - if (!netif_running(br->dev)) > - goto unlock; > > switch (val) { > case 0: > @@ -1793,7 +1791,6 @@ int br_multicast_set_router(struct net_bridge *br, unsigned long val) > break; > } > > -unlock: > spin_unlock_bh(&br->multicast_lock); > > return err; > @@ -1802,18 +1799,15 @@ unlock: > int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val) > { > struct net_bridge *br = p->br; > - int err = -ENOENT; > + int err = 0; > > spin_lock(&br->multicast_lock); Not related with your patch, but why we don't need to disable bh here? For me it looks like we do use p->rlist in BH context, but I could easily miss something here. > - if (!netif_running(br->dev) || p->state == BR_STATE_DISABLED) > - goto unlock; > > switch (val) { > case 0: > case 1: > case 2: > p->multicast_router = val; > - err = 0; > > if (val < 2 && !hlist_unhashed(&p->rlist)) > hlist_del_init_rcu(&p->rlist); > @@ -1834,7 +1828,6 @@ int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val) > break; > } > > -unlock: > spin_unlock(&br->multicast_lock); > > return err; Thanks!