[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sat, 13 Dec 2008 08:41:25 +1100
From: Herbert Xu <herbert@...dor.apana.org.au>
To: Evgeniy Polyakov <zbr@...emap.net>
Cc: "David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org
Subject: Re: [PATCH 1/8] net: Add frag_list support to skb_segment
On Fri, Dec 12, 2008 at 10:46:18PM +0300, Evgeniy Polyakov wrote:
>
> On Fri, Dec 12, 2008 at 04:31:49PM +1100, Herbert Xu (herbert@...dor.apana.org.au) wrote:
> > @@ -2317,9 +2317,34 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
> > if (hsize > len || !sg)
> > hsize = len;
> >
> > - nskb = alloc_skb(hsize + doffset + headroom, GFP_ATOMIC);
> > - if (unlikely(!nskb))
> > - goto err;
> > + if (!hsize && i >= nfrags) {
> > + BUG_ON(fskb->len != len);
> > +
> > + pos += len;
> > + nskb = skb_clone(fskb, GFP_ATOMIC);
> > + fskb = fskb->next;
> > +
> > + if (unlikely(!nskb))
> > + goto err;
> > +
> > + hsize = skb_end_pointer(nskb) - nskb->head;
> > + if (skb_cow_head(nskb, doffset + headroom))
> > + goto err;
>
> This should free nskb first.
Good catch! I'll get this fixed.
> > + nskb->truesize += skb_end_pointer(nskb) - nskb->head -
> > + hsize;
> > + skb_release_head_state(nskb);
> > + __skb_push(nskb, doffset);
> > + } else {
> > + nskb = alloc_skb(hsize + doffset + headroom,
> > + GFP_ATOMIC);
> > +
> > + if (unlikely(!nskb))
> > + goto err;
> > +
>
> The same.
nskb is NULL here.
> > + if (pos < offset + len) {
> > + struct sk_buff *fskb2 = fskb;
> > +
> > + BUG_ON(pos + fskb->len != offset + len);
> > +
> > + pos += fskb->len;
> > + fskb = fskb->next;
> > +
> > + if (fskb2->next) {
> > + fskb2 = skb_clone(fskb2, GFP_ATOMIC);
> > + if (!fskb2)
> > + goto err;
> > + } else
> > + skb_get(fskb2);
> > +
> > + skb_shinfo(nskb)->frag_list = fskb2;
>
> Is it guaranteed that nskb does not have frags here?
This bit only gets executed the first time we hit the frag_list
in the original skb. Therefore we've just allocated nskb for
the very first time. I'll add a BUG_ON for you :)
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@...dor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists