ipv6: fix a sparse warning
[pandora-kernel.git] / net / ipv6 / reassembly.c
index e5253ec..3c6a772 100644 (file)
@@ -79,20 +79,8 @@ unsigned int inet6_hash_frag(__be32 id, const struct in6_addr *saddr,
 {
        u32 c;
 
-       c = jhash_3words((__force u32)saddr->s6_addr32[0],
-                        (__force u32)saddr->s6_addr32[1],
-                        (__force u32)saddr->s6_addr32[2],
-                        rnd);
-
-       c = jhash_3words((__force u32)saddr->s6_addr32[3],
-                        (__force u32)daddr->s6_addr32[0],
-                        (__force u32)daddr->s6_addr32[1],
-                        c);
-
-       c =  jhash_3words((__force u32)daddr->s6_addr32[2],
-                         (__force u32)daddr->s6_addr32[3],
-                         (__force u32)id,
-                         c);
+       c = jhash_3words(ipv6_addr_hash(saddr), ipv6_addr_hash(daddr),
+                        (__force u32)id, rnd);
 
        return c & (INETFRAGS_HASHSZ - 1);
 }
@@ -327,7 +315,7 @@ found:
        }
        fq->q.stamp = skb->tstamp;
        fq->q.meat += skb->len;
-       atomic_add(skb->truesize, &fq->q.net->mem);
+       add_frag_mem_limit(&fq->q, skb->truesize);
 
        /* The first fragment.
         * nhoffset is obtained from the first fragment, of course.
@@ -341,9 +329,7 @@ found:
            fq->q.meat == fq->q.len)
                return ip6_frag_reasm(fq, prev, dev);
 
-       write_lock(&ip6_frags.lock);
-       list_move_tail(&fq->q.lru_list, &fq->q.net->lru_list);
-       write_unlock(&ip6_frags.lock);
+       inet_frag_lru_move(&fq->q);
        return -1;
 
 discard_fq:
@@ -406,7 +392,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
                goto out_oversize;
 
        /* Head of list must not be cloned. */
-       if (skb_cloned(head) && pskb_expand_head(head, 0, 0, GFP_ATOMIC))
+       if (skb_unclone(head, GFP_ATOMIC))
                goto out_oom;
 
        /* If the first fragment is fragmented itself, we split
@@ -429,7 +415,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
                head->len -= clone->len;
                clone->csum = 0;
                clone->ip_summed = head->ip_summed;
-               atomic_add(clone->truesize, &fq->q.net->mem);
+               add_frag_mem_limit(&fq->q, clone->truesize);
        }
 
        /* We have to remove fragment header from datagram and to relocate
@@ -467,7 +453,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
                }
                fp = next;
        }
-       atomic_sub(sum_truesize, &fq->q.net->mem);
+       sub_frag_mem_limit(&fq->q, sum_truesize);
 
        head->next = NULL;
        head->dev = dev;