X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=include%2Fnet%2Fsock.h;h=567e468d74929c993f6c8fd14271068dc6bc0eb3;hb=fb93134dfc2a6e6fbedc7c270a31da03fce88db9;hp=5504fb9fa88a43e9cbce0cf7e4a9db54b188ec3b;hpb=18b2b7bd09811779309592a10080fe9ffb93144d;p=deliverable%2Flinux.git diff --git a/include/net/sock.h b/include/net/sock.h index 5504fb9fa88a..567e468d7492 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1235,14 +1235,16 @@ static inline struct sk_buff *sk_stream_alloc_pskb(struct sock *sk, gfp_t gfp) { struct sk_buff *skb; - int hdr_len; - hdr_len = SKB_DATA_ALIGN(sk->sk_prot->max_header); - skb = alloc_skb_fclone(size + hdr_len, gfp); + skb = alloc_skb_fclone(size + sk->sk_prot->max_header, gfp); if (skb) { skb->truesize += mem; if (sk_stream_wmem_schedule(sk, skb->truesize)) { - skb_reserve(skb, hdr_len); + /* + * Make sure that we have exactly size bytes + * available to the caller, no more, no less. + */ + skb_reserve(skb, skb_tailroom(skb) - size); return skb; } __kfree_skb(skb);