ipv4: prepare net initialization for IP accounting
Some places, that deal with IP statistics already have where to get a struct net from, but use it directly, without declaring a separate variable on the stack. So, save this net on the stack for future IP_XXX_STATS macros. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
78ed11a56b
Коммит
84a3aa000e
|
@ -338,9 +338,10 @@ struct dst_entry* inet_csk_route_req(struct sock *sk,
|
||||||
.uli_u = { .ports =
|
.uli_u = { .ports =
|
||||||
{ .sport = inet_sk(sk)->sport,
|
{ .sport = inet_sk(sk)->sport,
|
||||||
.dport = ireq->rmt_port } } };
|
.dport = ireq->rmt_port } } };
|
||||||
|
struct net *net = sock_net(sk);
|
||||||
|
|
||||||
security_req_classify_flow(req, &fl);
|
security_req_classify_flow(req, &fl);
|
||||||
if (ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 0)) {
|
if (ip_route_output_flow(net, &rt, &fl, sk, 0)) {
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,8 +187,10 @@ static void ip_evictor(struct net *net)
|
||||||
static void ip_expire(unsigned long arg)
|
static void ip_expire(unsigned long arg)
|
||||||
{
|
{
|
||||||
struct ipq *qp;
|
struct ipq *qp;
|
||||||
|
struct net *net;
|
||||||
|
|
||||||
qp = container_of((struct inet_frag_queue *) arg, struct ipq, q);
|
qp = container_of((struct inet_frag_queue *) arg, struct ipq, q);
|
||||||
|
net = container_of(qp->q.net, struct net, ipv4.frags);
|
||||||
|
|
||||||
spin_lock(&qp->q.lock);
|
spin_lock(&qp->q.lock);
|
||||||
|
|
||||||
|
@ -202,9 +204,7 @@ static void ip_expire(unsigned long arg)
|
||||||
|
|
||||||
if ((qp->q.last_in & INET_FRAG_FIRST_IN) && qp->q.fragments != NULL) {
|
if ((qp->q.last_in & INET_FRAG_FIRST_IN) && qp->q.fragments != NULL) {
|
||||||
struct sk_buff *head = qp->q.fragments;
|
struct sk_buff *head = qp->q.fragments;
|
||||||
struct net *net;
|
|
||||||
|
|
||||||
net = container_of(qp->q.net, struct net, ipv4.frags);
|
|
||||||
/* Send an ICMP "Fragment Reassembly Timeout" message. */
|
/* Send an ICMP "Fragment Reassembly Timeout" message. */
|
||||||
if ((head->dev = dev_get_by_index(net, qp->iif)) != NULL) {
|
if ((head->dev = dev_get_by_index(net, qp->iif)) != NULL) {
|
||||||
icmp_send(head, ICMP_TIME_EXCEEDED, ICMP_EXC_FRAGTIME, 0);
|
icmp_send(head, ICMP_TIME_EXCEEDED, ICMP_EXC_FRAGTIME, 0);
|
||||||
|
@ -570,9 +570,9 @@ int ip_defrag(struct sk_buff *skb, u32 user)
|
||||||
struct ipq *qp;
|
struct ipq *qp;
|
||||||
struct net *net;
|
struct net *net;
|
||||||
|
|
||||||
|
net = skb->dev ? dev_net(skb->dev) : dev_net(skb->dst->dev);
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS);
|
IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS);
|
||||||
|
|
||||||
net = skb->dev ? dev_net(skb->dev) : dev_net(skb->dst->dev);
|
|
||||||
/* Start by cleaning up the memory. */
|
/* Start by cleaning up the memory. */
|
||||||
if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
|
if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
|
||||||
ip_evictor(net);
|
ip_evictor(net);
|
||||||
|
|
|
@ -656,8 +656,10 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||||
.uli_u = { .ports =
|
.uli_u = { .ports =
|
||||||
{ .sport = inet->sport,
|
{ .sport = inet->sport,
|
||||||
.dport = dport } } };
|
.dport = dport } } };
|
||||||
|
struct net *net = sock_net(sk);
|
||||||
|
|
||||||
security_sk_classify_flow(sk, &fl);
|
security_sk_classify_flow(sk, &fl);
|
||||||
err = ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 1);
|
err = ip_route_output_flow(net, &rt, &fl, sk, 1);
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err == -ENETUNREACH)
|
if (err == -ENETUNREACH)
|
||||||
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче