aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-09-27 01:10:56 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:49 -0400
commit2774c7aba6c97a2535be3309a2209770953780b3 (patch)
tree9327c795707f6d723c6395c31e1c060e70b5e0db /net/decnet
parent0cc217e16cb8ca8ef2544363571fce94259900e0 (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.c4
-rw-r--r--net/decnet/dn_route.c14
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)