mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 13:23:18 +00:00
ipv4: Convert devinet_sysctl_forward() to per-netns RTNL.
devinet_sysctl_forward() touches only a single netns. Let's use rtnl_trylock() and __in_dev_get_rtnl_net(). Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
d1c81818aa
commit
77453d428d
@ -2395,7 +2395,7 @@ static void inet_forward_change(struct net *net)
|
||||
if (on)
|
||||
dev_disable_lro(dev);
|
||||
|
||||
in_dev = __in_dev_get_rtnl(dev);
|
||||
in_dev = __in_dev_get_rtnl_net(dev);
|
||||
if (in_dev) {
|
||||
IN_DEV_CONF_SET(in_dev, FORWARDING, on);
|
||||
inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
|
||||
@ -2486,7 +2486,7 @@ static int devinet_sysctl_forward(const struct ctl_table *ctl, int write,
|
||||
|
||||
if (write && *valp != val) {
|
||||
if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) {
|
||||
if (!rtnl_trylock()) {
|
||||
if (!rtnl_net_trylock(net)) {
|
||||
/* Restore the original values before restarting */
|
||||
*valp = val;
|
||||
*ppos = pos;
|
||||
@ -2505,7 +2505,7 @@ static int devinet_sysctl_forward(const struct ctl_table *ctl, int write,
|
||||
idev->dev->ifindex,
|
||||
cnf);
|
||||
}
|
||||
rtnl_unlock();
|
||||
rtnl_net_unlock(net);
|
||||
rt_cache_flush(net);
|
||||
} else
|
||||
inet_netconf_notify_devconf(net, RTM_NEWNETCONF,
|
||||
|
Loading…
Reference in New Issue
Block a user