diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2007-09-27 01:10:56 -0400 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:52:49 -0400 |
| commit | 2774c7aba6c97a2535be3309a2209770953780b3 (patch) | |
| tree | 9327c795707f6d723c6395c31e1c060e70b5e0db /net/decnet | |
| parent | 0cc217e16cb8ca8ef2544363571fce94259900e0 (diff) | |
[NET]: Make the loopback device per network namespace.
This patch makes loopback_dev per network namespace. Adding
code to create a different loopback device for each network
namespace and adding the code to free a loopback device
when a network namespace exits.
This patch modifies all users the loopback_dev so they
access it as init_net.loopback_dev, keeping all of the
code compiling and working. A later pass will be needed to
update the users to use something other than the initial network
namespace.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/decnet')
| -rw-r--r-- | net/decnet/dn_dev.c | 4 | ||||
| -rw-r--r-- | net/decnet/dn_route.c | 14 |
2 files changed, 9 insertions, 9 deletions
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c index bcaf4c5aa68e..26130afd8029 100644 --- a/net/decnet/dn_dev.c +++ b/net/decnet/dn_dev.c | |||
| @@ -869,10 +869,10 @@ last_chance: | |||
| 869 | rv = dn_dev_get_first(dev, addr); | 869 | rv = dn_dev_get_first(dev, addr); |
| 870 | read_unlock(&dev_base_lock); | 870 | read_unlock(&dev_base_lock); |
| 871 | dev_put(dev); | 871 | dev_put(dev); |
| 872 | if (rv == 0 || dev == loopback_dev) | 872 | if (rv == 0 || dev == init_net.loopback_dev) |
| 873 | return rv; | 873 | return rv; |
| 874 | } | 874 | } |
| 875 | dev = loopback_dev; | 875 | dev = init_net.loopback_dev; |
| 876 | dev_hold(dev); | 876 | dev_hold(dev); |
| 877 | goto last_chance; | 877 | goto last_chance; |
| 878 | } | 878 | } |
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index 96fe0aa1638e..b7ebf9947ebd 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c | |||
| @@ -887,7 +887,7 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old | |||
| 887 | .scope = RT_SCOPE_UNIVERSE, | 887 | .scope = RT_SCOPE_UNIVERSE, |
| 888 | } }, | 888 | } }, |
| 889 | .mark = oldflp->mark, | 889 | .mark = oldflp->mark, |
| 890 | .iif = loopback_dev->ifindex, | 890 | .iif = init_net.loopback_dev->ifindex, |
| 891 | .oif = oldflp->oif }; | 891 | .oif = oldflp->oif }; |
| 892 | struct dn_route *rt = NULL; | 892 | struct dn_route *rt = NULL; |
| 893 | struct net_device *dev_out = NULL, *dev; | 893 | struct net_device *dev_out = NULL, *dev; |
| @@ -904,7 +904,7 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old | |||
| 904 | "dn_route_output_slow: dst=%04x src=%04x mark=%d" | 904 | "dn_route_output_slow: dst=%04x src=%04x mark=%d" |
| 905 | " iif=%d oif=%d\n", dn_ntohs(oldflp->fld_dst), | 905 | " iif=%d oif=%d\n", dn_ntohs(oldflp->fld_dst), |
| 906 | dn_ntohs(oldflp->fld_src), | 906 | dn_ntohs(oldflp->fld_src), |
| 907 | oldflp->mark, loopback_dev->ifindex, oldflp->oif); | 907 | oldflp->mark, init_net.loopback_dev->ifindex, oldflp->oif); |
| 908 | 908 | ||
| 909 | /* If we have an output interface, verify its a DECnet device */ | 909 | /* If we have an output interface, verify its a DECnet device */ |
| 910 | if (oldflp->oif) { | 910 | if (oldflp->oif) { |
| @@ -957,7 +957,7 @@ source_ok: | |||
| 957 | err = -EADDRNOTAVAIL; | 957 | err = -EADDRNOTAVAIL; |
| 958 | if (dev_out) | 958 | if (dev_out) |
| 959 | dev_put(dev_out); | 959 | dev_put(dev_out); |
| 960 | dev_out = loopback_dev; | 960 | dev_out = init_net.loopback_dev; |
| 961 | dev_hold(dev_out); | 961 | dev_hold(dev_out); |
| 962 | if (!fl.fld_dst) { | 962 | if (!fl.fld_dst) { |
| 963 | fl.fld_dst = | 963 | fl.fld_dst = |
| @@ -966,7 +966,7 @@ source_ok: | |||
| 966 | if (!fl.fld_dst) | 966 | if (!fl.fld_dst) |
| 967 | goto out; | 967 | goto out; |
| 968 | } | 968 | } |
| 969 | fl.oif = loopback_dev->ifindex; | 969 | fl.oif = init_net.loopback_dev->ifindex; |
| 970 | res.type = RTN_LOCAL; | 970 | res.type = RTN_LOCAL; |
| 971 | goto make_route; | 971 | goto make_route; |
| 972 | } | 972 | } |
| @@ -1012,7 +1012,7 @@ source_ok: | |||
| 1012 | if (dev_out) | 1012 | if (dev_out) |
| 1013 | dev_put(dev_out); | 1013 | dev_put(dev_out); |
| 1014 | if (dn_dev_islocal(neigh->dev, fl.fld_dst)) { | 1014 | if (dn_dev_islocal(neigh->dev, fl.fld_dst)) { |
| 1015 | dev_out = loopback_dev; | 1015 | dev_out = init_net.loopback_dev; |
| 1016 | res.type = RTN_LOCAL; | 1016 | res.type = RTN_LOCAL; |
| 1017 | } else { | 1017 | } else { |
| 1018 | dev_out = neigh->dev; | 1018 | dev_out = neigh->dev; |
| @@ -1033,7 +1033,7 @@ source_ok: | |||
| 1033 | /* Possible improvement - check all devices for local addr */ | 1033 | /* Possible improvement - check all devices for local addr */ |
| 1034 | if (dn_dev_islocal(dev_out, fl.fld_dst)) { | 1034 | if (dn_dev_islocal(dev_out, fl.fld_dst)) { |
| 1035 | dev_put(dev_out); | 1035 | dev_put(dev_out); |
| 1036 | dev_out = loopback_dev; | 1036 | dev_out = init_net.loopback_dev; |
| 1037 | dev_hold(dev_out); | 1037 | dev_hold(dev_out); |
| 1038 | res.type = RTN_LOCAL; | 1038 | res.type = RTN_LOCAL; |
| 1039 | goto select_source; | 1039 | goto select_source; |
| @@ -1069,7 +1069,7 @@ select_source: | |||
| 1069 | fl.fld_src = fl.fld_dst; | 1069 | fl.fld_src = fl.fld_dst; |
| 1070 | if (dev_out) | 1070 | if (dev_out) |
| 1071 | dev_put(dev_out); | 1071 | dev_put(dev_out); |
| 1072 | dev_out = loopback_dev; | 1072 | dev_out = init_net.loopback_dev; |
| 1073 | dev_hold(dev_out); | 1073 | dev_hold(dev_out); |
| 1074 | fl.oif = dev_out->ifindex; | 1074 | fl.oif = dev_out->ifindex; |
| 1075 | if (res.fi) | 1075 | if (res.fi) |
