Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 33080
b: refs/heads/master
c: f4d26fb
h: refs/heads/master
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Aug 2, 2006
1 parent c77854f commit e35ec4c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9cd3ecd674cf3194e07435b5b9559c4d432026d5
refs/heads/master: f4d26fb336f3c08066bffbe907d3104be4fb91a8
14 changes: 10 additions & 4 deletions trunk/net/core/skbuff.c
Original file line number Diff line number Diff line change
Expand Up @@ -846,25 +846,29 @@ int ___pskb_trim(struct sk_buff *skb, unsigned int len)
unlikely((err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC))))
return err;

for (i = 0; i < nfrags; i++) {
i = 0;
if (offset >= len)
goto drop_pages;

for (; i < nfrags; i++) {
int end = offset + skb_shinfo(skb)->frags[i].size;

if (end < len) {
offset = end;
continue;
}

if (len > offset)
skb_shinfo(skb)->frags[i++].size = len - offset;
skb_shinfo(skb)->frags[i++].size = len - offset;

drop_pages:
skb_shinfo(skb)->nr_frags = i;

for (; i < nfrags; i++)
put_page(skb_shinfo(skb)->frags[i].page);

if (skb_shinfo(skb)->frag_list)
skb_drop_fraglist(skb);
break;
goto done;
}

for (fragp = &skb_shinfo(skb)->frag_list; (frag = *fragp);
Expand All @@ -879,6 +883,7 @@ int ___pskb_trim(struct sk_buff *skb, unsigned int len)
return -ENOMEM;

nfrag->next = frag->next;
kfree_skb(frag);
frag = nfrag;
*fragp = frag;
}
Expand All @@ -897,6 +902,7 @@ int ___pskb_trim(struct sk_buff *skb, unsigned int len)
break;
}

done:
if (len > skb_headlen(skb)) {
skb->data_len -= skb->len - len;
skb->len = len;
Expand Down

0 comments on commit e35ec4c

Please sign in to comment.