ip: use rb trees for IP frag queue.
[sfrench/cifs-2.6.git] / net / ipv4 / inet_fragment.c
index ccd140e4082dd7de0823e9408e352725a8b4404c..6d258a5669e7926186270bc97aaee7e0fc4a4174 100644 (file)
@@ -137,12 +137,16 @@ void inet_frag_destroy(struct inet_frag_queue *q)
        fp = q->fragments;
        nf = q->net;
        f = nf->f;
-       while (fp) {
-               struct sk_buff *xp = fp->next;
-
-               sum_truesize += fp->truesize;
-               kfree_skb(fp);
-               fp = xp;
+       if (fp) {
+               do {
+                       struct sk_buff *xp = fp->next;
+
+                       sum_truesize += fp->truesize;
+                       kfree_skb(fp);
+                       fp = xp;
+               } while (fp);
+       } else {
+               sum_truesize = skb_rbtree_purge(&q->rb_fragments);
        }
        sum = sum_truesize + f->qsize;