bridge: allow setting hash_max + multicast_router if interface is down
[cascardo/linux.git] / net / bridge / br_multicast.c
index d7e103e..7c78b8d 100644 (file)
@@ -1772,11 +1772,9 @@ out:
 
 int br_multicast_set_router(struct net_bridge *br, unsigned long val)
 {
-       int err = -ENOENT;
+       int err = -EINVAL;
 
        spin_lock_bh(&br->multicast_lock);
-       if (!netif_running(br->dev))
-               goto unlock;
 
        switch (val) {
        case 0:
@@ -1787,13 +1785,8 @@ int br_multicast_set_router(struct net_bridge *br, unsigned long val)
                br->multicast_router = val;
                err = 0;
                break;
-
-       default:
-               err = -EINVAL;
-               break;
        }
 
-unlock:
        spin_unlock_bh(&br->multicast_lock);
 
        return err;
@@ -1802,11 +1795,9 @@ 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 = -EINVAL;
 
        spin_lock(&br->multicast_lock);
-       if (!netif_running(br->dev) || p->state == BR_STATE_DISABLED)
-               goto unlock;
 
        switch (val) {
        case 0:
@@ -1828,13 +1819,8 @@ int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val)
 
                br_multicast_add_router(br, p);
                break;
-
-       default:
-               err = -EINVAL;
-               break;
        }
 
-unlock:
        spin_unlock(&br->multicast_lock);
 
        return err;
@@ -1939,15 +1925,11 @@ unlock:
 
 int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val)
 {
-       int err = -ENOENT;
+       int err = -EINVAL;
        u32 old;
        struct net_bridge_mdb_htable *mdb;
 
        spin_lock_bh(&br->multicast_lock);
-       if (!netif_running(br->dev))
-               goto unlock;
-
-       err = -EINVAL;
        if (!is_power_of_2(val))
                goto unlock;