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

inet: frag: change *_frag_mem_limit functions to take netns_frags as argument

Followup patch will call it after inet_frag_queue was freed, so q->net
doesn't work anymore (but netf = q->net; free(q); mem_limit(netf) would).

Tested-by: Frank Schreuder <fschreuder@transip.nl>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Florian Westphal and committed by
David S. Miller
0e60d245 d1fe1944

+20 -20
+4 -4
include/net/inet_frag.h
··· 141 141 return percpu_counter_read(&nf->mem); 142 142 } 143 143 144 - static inline void sub_frag_mem_limit(struct inet_frag_queue *q, int i) 144 + static inline void sub_frag_mem_limit(struct netns_frags *nf, int i) 145 145 { 146 - __percpu_counter_add(&q->net->mem, -i, frag_percpu_counter_batch); 146 + __percpu_counter_add(&nf->mem, -i, frag_percpu_counter_batch); 147 147 } 148 148 149 - static inline void add_frag_mem_limit(struct inet_frag_queue *q, int i) 149 + static inline void add_frag_mem_limit(struct netns_frags *nf, int i) 150 150 { 151 - __percpu_counter_add(&q->net->mem, i, frag_percpu_counter_batch); 151 + __percpu_counter_add(&nf->mem, i, frag_percpu_counter_batch); 152 152 } 153 153 154 154 static inline void init_frag_mem_limit(struct netns_frags *nf)
+3 -3
net/ieee802154/6lowpan/reassembly.c
··· 207 207 } else { 208 208 fq->q.meat += skb->len; 209 209 } 210 - add_frag_mem_limit(&fq->q, skb->truesize); 210 + add_frag_mem_limit(fq->q.net, skb->truesize); 211 211 212 212 if (fq->q.flags == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && 213 213 fq->q.meat == fq->q.len) { ··· 287 287 clone->data_len = clone->len; 288 288 head->data_len -= clone->len; 289 289 head->len -= clone->len; 290 - add_frag_mem_limit(&fq->q, clone->truesize); 290 + add_frag_mem_limit(fq->q.net, clone->truesize); 291 291 } 292 292 293 293 WARN_ON(head == NULL); ··· 310 310 } 311 311 fp = next; 312 312 } 313 - sub_frag_mem_limit(&fq->q, sum_truesize); 313 + sub_frag_mem_limit(fq->q.net, sum_truesize); 314 314 315 315 head->next = NULL; 316 316 head->dev = dev;
+2 -2
net/ipv4/inet_fragment.c
··· 328 328 fp = xp; 329 329 } 330 330 sum = sum_truesize + f->qsize; 331 - sub_frag_mem_limit(q, sum); 331 + sub_frag_mem_limit(q->net, sum); 332 332 333 333 if (f->destructor) 334 334 f->destructor(q); ··· 388 388 389 389 q->net = nf; 390 390 f->constructor(q, arg); 391 - add_frag_mem_limit(q, f->qsize); 391 + add_frag_mem_limit(nf, f->qsize); 392 392 393 393 setup_timer(&q->timer, f->frag_expire, (unsigned long)q); 394 394 spin_lock_init(&q->lock);
+5 -5
net/ipv4/ip_fragment.c
··· 309 309 kfree_skb(fp); 310 310 fp = xp; 311 311 } while (fp); 312 - sub_frag_mem_limit(&qp->q, sum_truesize); 312 + sub_frag_mem_limit(qp->q.net, sum_truesize); 313 313 314 314 qp->q.flags = 0; 315 315 qp->q.len = 0; ··· 455 455 qp->q.fragments = next; 456 456 457 457 qp->q.meat -= free_it->len; 458 - sub_frag_mem_limit(&qp->q, free_it->truesize); 458 + sub_frag_mem_limit(qp->q.net, free_it->truesize); 459 459 kfree_skb(free_it); 460 460 } 461 461 } ··· 479 479 qp->q.stamp = skb->tstamp; 480 480 qp->q.meat += skb->len; 481 481 qp->ecn |= ecn; 482 - add_frag_mem_limit(&qp->q, skb->truesize); 482 + add_frag_mem_limit(qp->q.net, skb->truesize); 483 483 if (offset == 0) 484 484 qp->q.flags |= INET_FRAG_FIRST_IN; 485 485 ··· 587 587 head->len -= clone->len; 588 588 clone->csum = 0; 589 589 clone->ip_summed = head->ip_summed; 590 - add_frag_mem_limit(&qp->q, clone->truesize); 590 + add_frag_mem_limit(qp->q.net, clone->truesize); 591 591 } 592 592 593 593 skb_push(head, head->data - skb_network_header(head)); ··· 615 615 } 616 616 fp = next; 617 617 } 618 - sub_frag_mem_limit(&qp->q, sum_truesize); 618 + sub_frag_mem_limit(qp->q.net, sum_truesize); 619 619 620 620 head->next = NULL; 621 621 head->dev = dev;
+3 -3
net/ipv6/netfilter/nf_conntrack_reasm.c
··· 348 348 fq->ecn |= ecn; 349 349 if (payload_len > fq->q.max_size) 350 350 fq->q.max_size = payload_len; 351 - add_frag_mem_limit(&fq->q, skb->truesize); 351 + add_frag_mem_limit(fq->q.net, skb->truesize); 352 352 353 353 /* The first fragment. 354 354 * nhoffset is obtained from the first fragment, of course. ··· 430 430 clone->ip_summed = head->ip_summed; 431 431 432 432 NFCT_FRAG6_CB(clone)->orig = NULL; 433 - add_frag_mem_limit(&fq->q, clone->truesize); 433 + add_frag_mem_limit(fq->q.net, clone->truesize); 434 434 } 435 435 436 436 /* We have to remove fragment header from datagram and to relocate ··· 454 454 head->csum = csum_add(head->csum, fp->csum); 455 455 head->truesize += fp->truesize; 456 456 } 457 - sub_frag_mem_limit(&fq->q, head->truesize); 457 + sub_frag_mem_limit(fq->q.net, head->truesize); 458 458 459 459 head->ignore_df = 1; 460 460 head->next = NULL;
+3 -3
net/ipv6/reassembly.c
··· 330 330 fq->q.stamp = skb->tstamp; 331 331 fq->q.meat += skb->len; 332 332 fq->ecn |= ecn; 333 - add_frag_mem_limit(&fq->q, skb->truesize); 333 + add_frag_mem_limit(fq->q.net, skb->truesize); 334 334 335 335 /* The first fragment. 336 336 * nhoffset is obtained from the first fragment, of course. ··· 443 443 head->len -= clone->len; 444 444 clone->csum = 0; 445 445 clone->ip_summed = head->ip_summed; 446 - add_frag_mem_limit(&fq->q, clone->truesize); 446 + add_frag_mem_limit(fq->q.net, clone->truesize); 447 447 } 448 448 449 449 /* We have to remove fragment header from datagram and to relocate ··· 481 481 } 482 482 fp = next; 483 483 } 484 - sub_frag_mem_limit(&fq->q, sum_truesize); 484 + sub_frag_mem_limit(fq->q.net, sum_truesize); 485 485 486 486 head->next = NULL; 487 487 head->dev = dev;