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) |