Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

inetpeer: add parameter net for inet_getpeer_v4,v6

add struct net as a parameter of inet_getpeer_v[4,6],
use net to replace &init_net.

and modify some places to provide net for inet_getpeer_v[4,6]

Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Gao feng and committed by
David S. Miller
54db0cc2 c8a627ed

+29 -14
+8 -4
include/net/inetpeer.h
··· 79 79 const struct inetpeer_addr *daddr, 80 80 int create); 81 81 82 - static inline struct inet_peer *inet_getpeer_v4(__be32 v4daddr, int create) 82 + static inline struct inet_peer *inet_getpeer_v4(struct net *net, 83 + __be32 v4daddr, 84 + int create) 83 85 { 84 86 struct inetpeer_addr daddr; 85 87 86 88 daddr.addr.a4 = v4daddr; 87 89 daddr.family = AF_INET; 88 - return inet_getpeer(&init_net, &daddr, create); 90 + return inet_getpeer(net, &daddr, create); 89 91 } 90 92 91 - static inline struct inet_peer *inet_getpeer_v6(const struct in6_addr *v6daddr, int create) 93 + static inline struct inet_peer *inet_getpeer_v6(struct net *net, 94 + const struct in6_addr *v6daddr, 95 + int create) 92 96 { 93 97 struct inetpeer_addr daddr; 94 98 95 99 *(struct in6_addr *)daddr.addr.a6 = *v6daddr; 96 100 daddr.family = AF_INET6; 97 - return inet_getpeer(&init_net, &daddr, create); 101 + return inet_getpeer(net, &daddr, create); 98 102 } 99 103 100 104 /* can be called from BH context or outside */
+1 -1
net/ipv4/inet_fragment.c
··· 243 243 if (q == NULL) 244 244 return NULL; 245 245 246 + q->net = nf; 246 247 f->constructor(q, arg); 247 248 atomic_add(f->qsize, &nf->mem); 248 249 setup_timer(&q->timer, f->frag_expire, (unsigned long)q); 249 250 spin_lock_init(&q->lock); 250 251 atomic_set(&q->refcnt, 1); 251 - q->net = nf; 252 252 253 253 return q; 254 254 }
+5 -1
net/ipv4/ip_fragment.c
··· 171 171 static void ip4_frag_init(struct inet_frag_queue *q, void *a) 172 172 { 173 173 struct ipq *qp = container_of(q, struct ipq, q); 174 + struct netns_ipv4 *ipv4 = container_of(q->net, struct netns_ipv4, 175 + frags); 176 + struct net *net = container_of(ipv4, struct net, ipv4); 177 + 174 178 struct ip4_create_arg *arg = a; 175 179 176 180 qp->protocol = arg->iph->protocol; ··· 184 180 qp->daddr = arg->iph->daddr; 185 181 qp->user = arg->user; 186 182 qp->peer = sysctl_ipfrag_max_dist ? 187 - inet_getpeer_v4(arg->iph->saddr, 1) : NULL; 183 + inet_getpeer_v4(net, arg->iph->saddr, 1) : NULL; 188 184 } 189 185 190 186 static __inline__ void ip4_frag_free(struct inet_frag_queue *q)
+5 -3
net/ipv4/route.c
··· 1328 1328 1329 1329 void rt_bind_peer(struct rtable *rt, __be32 daddr, int create) 1330 1330 { 1331 + struct net *net = dev_net(rt->dst.dev); 1331 1332 struct inet_peer *peer; 1332 1333 1333 - peer = inet_getpeer_v4(daddr, create); 1334 + peer = inet_getpeer_v4(net, daddr, create); 1334 1335 1335 1336 if (peer && cmpxchg(&rt->peer, NULL, peer) != NULL) 1336 1337 inet_putpeer(peer); ··· 1695 1694 unsigned short est_mtu = 0; 1696 1695 struct inet_peer *peer; 1697 1696 1698 - peer = inet_getpeer_v4(iph->daddr, 1); 1697 + peer = inet_getpeer_v4(net, iph->daddr, 1); 1699 1698 if (peer) { 1700 1699 unsigned short mtu = new_mtu; 1701 1700 ··· 1936 1935 static void rt_init_metrics(struct rtable *rt, const struct flowi4 *fl4, 1937 1936 struct fib_info *fi) 1938 1937 { 1938 + struct net *net = dev_net(rt->dst.dev); 1939 1939 struct inet_peer *peer; 1940 1940 int create = 0; 1941 1941 ··· 1946 1944 if (fl4 && (fl4->flowi4_flags & FLOWI_FLAG_PRECOW_METRICS)) 1947 1945 create = 1; 1948 1946 1949 - rt->peer = peer = inet_getpeer_v4(rt->rt_dst, create); 1947 + rt->peer = peer = inet_getpeer_v4(net, rt->rt_dst, create); 1950 1948 if (peer) { 1951 1949 rt->rt_peer_genid = rt_peer_genid(); 1952 1950 if (inet_metrics_new(peer))
+4 -2
net/ipv4/tcp_ipv4.c
··· 1824 1824 { 1825 1825 struct rtable *rt = (struct rtable *) __sk_dst_get(sk); 1826 1826 struct inet_sock *inet = inet_sk(sk); 1827 + struct net *net = sock_net(sk); 1827 1828 struct inet_peer *peer; 1828 1829 1829 1830 if (!rt || 1830 1831 inet->cork.fl.u.ip4.daddr != inet->inet_daddr) { 1831 - peer = inet_getpeer_v4(inet->inet_daddr, 1); 1832 + peer = inet_getpeer_v4(net, inet->inet_daddr, 1); 1832 1833 *release_it = true; 1833 1834 } else { 1834 1835 if (!rt->peer) ··· 1845 1844 void *tcp_v4_tw_get_peer(struct sock *sk) 1846 1845 { 1847 1846 const struct inet_timewait_sock *tw = inet_twsk(sk); 1847 + struct net *net = sock_net(sk); 1848 1848 1849 - return inet_getpeer_v4(tw->tw_daddr, 1); 1849 + return inet_getpeer_v4(net, tw->tw_daddr, 1); 1850 1850 } 1851 1851 EXPORT_SYMBOL(tcp_v4_tw_get_peer); 1852 1852
+2 -1
net/ipv6/route.c
··· 306 306 307 307 void rt6_bind_peer(struct rt6_info *rt, int create) 308 308 { 309 + struct net *net = dev_net(rt->dst.dev); 309 310 struct inet_peer *peer; 310 311 311 - peer = inet_getpeer_v6(&rt->rt6i_dst.addr, create); 312 + peer = inet_getpeer_v6(net, &rt->rt6i_dst.addr, create); 312 313 if (peer && cmpxchg(&rt->rt6i_peer, NULL, peer) != NULL) 313 314 inet_putpeer(peer); 314 315 else
+4 -2
net/ipv6/tcp_ipv6.c
··· 1736 1736 { 1737 1737 struct rt6_info *rt = (struct rt6_info *) __sk_dst_get(sk); 1738 1738 struct ipv6_pinfo *np = inet6_sk(sk); 1739 + struct net *net = sock_net(sk); 1739 1740 struct inet_peer *peer; 1740 1741 1741 1742 if (!rt || 1742 1743 !ipv6_addr_equal(&np->daddr, &rt->rt6i_dst.addr)) { 1743 - peer = inet_getpeer_v6(&np->daddr, 1); 1744 + peer = inet_getpeer_v6(net, &np->daddr, 1); 1744 1745 *release_it = true; 1745 1746 } else { 1746 1747 if (!rt->rt6i_peer) ··· 1757 1756 { 1758 1757 const struct inet6_timewait_sock *tw6 = inet6_twsk(sk); 1759 1758 const struct inet_timewait_sock *tw = inet_twsk(sk); 1759 + struct net *net = sock_net(sk); 1760 1760 1761 1761 if (tw->tw_family == AF_INET) 1762 1762 return tcp_v4_tw_get_peer(sk); 1763 1763 1764 - return inet_getpeer_v6(&tw6->tw_v6_daddr, 1); 1764 + return inet_getpeer_v6(net, &tw6->tw_v6_daddr, 1); 1765 1765 } 1766 1766 1767 1767 static struct timewait_sock_ops tcp6_timewait_sock_ops = {