* properly format/comment all patches * merge debloat patches * merge Kconfig patches * merge swconfig patches * merge hotplug patches * drop 200-fix_localversion.patch - upstream * drop 222-arm_zimage_none.patch - unused * drop 252-mv_cesa_depends.patch - no longer required * drop 410-mtd-move-forward-declaration-of-struct-mtd_info.patch - unused * drop 661-fq_codel_keep_dropped_stats.patch - outdated * drop 702-phy_add_aneg_done_function.patch - upstream * drop 840-rtc7301.patch - unused * drop 841-rtc_pt7c4338.patch - upstream * drop 921-use_preinit_as_init.patch - unused * drop spio-gpio-old and gpio-mmc - unused Signed-off-by: John Crispin <john@phrozen.org>
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 6ae4ae8e512bd229f806c22f8a2cd751e4f987c2 Mon Sep 17 00:00:00 2001
 | 
						|
From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@c0d3.blue>
 | 
						|
Date: Sat, 23 May 2015 03:12:34 +0200
 | 
						|
Subject: [PATCH] bridge: allow setting hash_max + multicast_router if
 | 
						|
 interface is down
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=UTF-8
 | 
						|
Content-Transfer-Encoding: 8bit
 | 
						|
 | 
						|
Network managers like netifd (used in OpenWRT for instance) try to
 | 
						|
configure interface options after creation but before setting the
 | 
						|
interface up.
 | 
						|
 | 
						|
Unfortunately the sysfs / bridge currently only allows to configure the
 | 
						|
hash_max and multicast_router options when the bridge interface is up.
 | 
						|
But since br_multicast_init() doesn't start any timers and only sets
 | 
						|
default values and initializes timers it should be save to reconfigure
 | 
						|
the default values after that, before things actually get active after
 | 
						|
the bridge is set up.
 | 
						|
 | 
						|
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
 | 
						|
Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
						|
---
 | 
						|
 net/bridge/br_multicast.c |   24 +++---------------------
 | 
						|
 1 file changed, 3 insertions(+), 21 deletions(-)
 | 
						|
 | 
						|
--- a/net/bridge/br_multicast.c
 | 
						|
+++ b/net/bridge/br_multicast.c
 | 
						|
@@ -1948,11 +1948,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:
 | 
						|
@@ -1963,13 +1961,8 @@ int br_multicast_set_router(struct net_b
 | 
						|
 		br->multicast_router = val;
 | 
						|
 		err = 0;
 | 
						|
 		break;
 | 
						|
-
 | 
						|
-	default:
 | 
						|
-		err = -EINVAL;
 | 
						|
-		break;
 | 
						|
 	}
 | 
						|
 
 | 
						|
-unlock:
 | 
						|
 	spin_unlock_bh(&br->multicast_lock);
 | 
						|
 
 | 
						|
 	return err;
 | 
						|
@@ -1978,11 +1971,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:
 | 
						|
@@ -2004,13 +1995,8 @@ int br_multicast_set_port_router(struct
 | 
						|
 
 | 
						|
 		br_multicast_add_router(br, p);
 | 
						|
 		break;
 | 
						|
-
 | 
						|
-	default:
 | 
						|
-		err = -EINVAL;
 | 
						|
-		break;
 | 
						|
 	}
 | 
						|
 
 | 
						|
-unlock:
 | 
						|
 	spin_unlock(&br->multicast_lock);
 | 
						|
 
 | 
						|
 	return err;
 | 
						|
@@ -2115,15 +2101,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;
 | 
						|
 
 |