Skip to content

Commit

Permalink
skb: Drop "fastpath" variable for skb_cloned check in pskb_expand_head
Browse files Browse the repository at this point in the history
Since there is now only one spot that actually uses "fastpath" there isn't
much point in carrying it.  Instead we can just use a check for skb_cloned
to verify if we can perform the fast-path free for the head or not.

Signed-off-by: Alexander Duyck <[email protected]>
Acked-by: Eric Dumazet <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Alexander Duyck authored and davem330 committed May 6, 2012
1 parent 9202e31 commit 3e24591
Showing 1 changed file with 8 additions and 14 deletions.
22 changes: 8 additions & 14 deletions net/core/skbuff.c
Original file line number Diff line number Diff line change
Expand Up @@ -932,7 +932,6 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
u8 *data;
int size = nhead + (skb_end_pointer(skb) - skb->head) + ntail;
long off;
bool fastpath;

BUG_ON(nhead < 0);

Expand All @@ -941,16 +940,6 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,

size = SKB_DATA_ALIGN(size);

/* Check if we can avoid taking references on fragments if we own
* the last reference on skb->head. (see skb_release_data())
*/
if (!skb->cloned)
fastpath = true;
else {
int delta = skb->nohdr ? (1 << SKB_DATAREF_SHIFT) + 1 : 1;
fastpath = atomic_read(&skb_shinfo(skb)->dataref) == delta;
}

data = kmalloc(size + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)),
gfp_mask);
if (!data)
Expand All @@ -966,9 +955,12 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
skb_shinfo(skb),
offsetof(struct skb_shared_info, frags[skb_shinfo(skb)->nr_frags]));

if (fastpath) {
skb_free_head(skb);
} else {
/*
* if shinfo is shared we must drop the old head gracefully, but if it
* is not we can just drop the old head and let the existing refcount
* be since all we did is relocate the values
*/
if (skb_cloned(skb)) {
/* copy this zero copy skb frags */
if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
if (skb_copy_ubufs(skb, gfp_mask))
Expand All @@ -981,6 +973,8 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
skb_clone_fraglist(skb);

skb_release_data(skb);
} else {
skb_free_head(skb);
}
off = (data + nhead) - skb->head;

Expand Down

0 comments on commit 3e24591

Please sign in to comment.