aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/fib_frontend.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-11-03 13:41:45 -0500
committerDavid S. Miller <davem@davemloft.net>2015-11-03 13:41:45 -0500
commit73186df8d7fa574345f0ad626ebe89649f8308a5 (patch)
tree9e6ed2c499cb5cbbcc79415602f9114503bb6931 /net/ipv4/fib_frontend.c
parent0c63d80c3fac4e6eb0f01dff756e47bc7cd50092 (diff)
parentebac62fe3d24c0ce22dd83afa7b07d1a2aaef44d (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Minor overlapping changes in net/ipv4/ipmr.c, in 'net' we were fixing the "BH-ness" of the counter bumps whilst in 'net-next' the functions were modified to take an explicit 'net' parameter. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/fib_frontend.c')
-rw-r--r--net/ipv4/fib_frontend.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index e786873c89f2..cc8f3e506cde 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -1112,9 +1112,10 @@ static void nl_fib_lookup_exit(struct net *net)
1112 net->ipv4.fibnl = NULL; 1112 net->ipv4.fibnl = NULL;
1113} 1113}
1114 1114
1115static void fib_disable_ip(struct net_device *dev, unsigned long event) 1115static void fib_disable_ip(struct net_device *dev, unsigned long event,
1116 bool force)
1116{ 1117{
1117 if (fib_sync_down_dev(dev, event)) 1118 if (fib_sync_down_dev(dev, event, force))
1118 fib_flush(dev_net(dev)); 1119 fib_flush(dev_net(dev));
1119 rt_cache_flush(dev_net(dev)); 1120 rt_cache_flush(dev_net(dev));
1120 arp_ifdown(dev); 1121 arp_ifdown(dev);
@@ -1142,7 +1143,7 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
1142 /* Last address was deleted from this interface. 1143 /* Last address was deleted from this interface.
1143 * Disable IP. 1144 * Disable IP.
1144 */ 1145 */
1145 fib_disable_ip(dev, event); 1146 fib_disable_ip(dev, event, true);
1146 } else { 1147 } else {
1147 rt_cache_flush(dev_net(dev)); 1148 rt_cache_flush(dev_net(dev));
1148 } 1149 }
@@ -1159,7 +1160,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
1159 unsigned int flags; 1160 unsigned int flags;
1160 1161
1161 if (event == NETDEV_UNREGISTER) { 1162 if (event == NETDEV_UNREGISTER) {
1162 fib_disable_ip(dev, event); 1163 fib_disable_ip(dev, event, true);
1163 rt_flush_dev(dev); 1164 rt_flush_dev(dev);
1164 return NOTIFY_DONE; 1165 return NOTIFY_DONE;
1165 } 1166 }
@@ -1180,14 +1181,14 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
1180 rt_cache_flush(net); 1181 rt_cache_flush(net);
1181 break; 1182 break;
1182 case NETDEV_DOWN: 1183 case NETDEV_DOWN:
1183 fib_disable_ip(dev, event); 1184 fib_disable_ip(dev, event, false);
1184 break; 1185 break;
1185 case NETDEV_CHANGE: 1186 case NETDEV_CHANGE:
1186 flags = dev_get_flags(dev); 1187 flags = dev_get_flags(dev);
1187 if (flags & (IFF_RUNNING | IFF_LOWER_UP)) 1188 if (flags & (IFF_RUNNING | IFF_LOWER_UP))
1188 fib_sync_up(dev, RTNH_F_LINKDOWN); 1189 fib_sync_up(dev, RTNH_F_LINKDOWN);
1189 else 1190 else
1190 fib_sync_down_dev(dev, event); 1191 fib_sync_down_dev(dev, event, false);
1191 /* fall through */ 1192 /* fall through */
1192 case NETDEV_CHANGEMTU: 1193 case NETDEV_CHANGEMTU:
1193 rt_cache_flush(net); 1194 rt_cache_flush(net);