|
@@ -237,8 +237,7 @@ out:
|
|
}
|
|
}
|
|
|
|
|
|
static __inline__ struct frag_queue *
|
|
static __inline__ struct frag_queue *
|
|
-fq_find(struct net *net, __be32 id, struct in6_addr *src, struct in6_addr *dst,
|
|
|
|
- struct inet6_dev *idev)
|
|
|
|
|
|
+fq_find(struct net *net, __be32 id, struct in6_addr *src, struct in6_addr *dst)
|
|
{
|
|
{
|
|
struct inet_frag_queue *q;
|
|
struct inet_frag_queue *q;
|
|
struct ip6_create_arg arg;
|
|
struct ip6_create_arg arg;
|
|
@@ -254,13 +253,9 @@ fq_find(struct net *net, __be32 id, struct in6_addr *src, struct in6_addr *dst,
|
|
|
|
|
|
q = inet_frag_find(&net->ipv6.frags, &ip6_frags, &arg, hash);
|
|
q = inet_frag_find(&net->ipv6.frags, &ip6_frags, &arg, hash);
|
|
if (q == NULL)
|
|
if (q == NULL)
|
|
- goto oom;
|
|
|
|
|
|
+ return NULL;
|
|
|
|
|
|
return container_of(q, struct frag_queue, q);
|
|
return container_of(q, struct frag_queue, q);
|
|
-
|
|
|
|
-oom:
|
|
|
|
- IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_REASMFAILS);
|
|
|
|
- return NULL;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
|
|
static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
|
|
@@ -606,8 +601,8 @@ static int ipv6_frag_rcv(struct sk_buff *skb)
|
|
if (atomic_read(&net->ipv6.frags.mem) > net->ipv6.frags.high_thresh)
|
|
if (atomic_read(&net->ipv6.frags.mem) > net->ipv6.frags.high_thresh)
|
|
ip6_evictor(net, ip6_dst_idev(skb_dst(skb)));
|
|
ip6_evictor(net, ip6_dst_idev(skb_dst(skb)));
|
|
|
|
|
|
- if ((fq = fq_find(net, fhdr->identification, &hdr->saddr, &hdr->daddr,
|
|
|
|
- ip6_dst_idev(skb_dst(skb)))) != NULL) {
|
|
|
|
|
|
+ fq = fq_find(net, fhdr->identification, &hdr->saddr, &hdr->daddr);
|
|
|
|
+ if (fq != NULL) {
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
spin_lock(&fq->q.lock);
|
|
spin_lock(&fq->q.lock);
|