|
@@ -701,11 +701,12 @@ struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp)
|
|
|
skb = alloc_skb_fclone(size + sk->sk_prot->max_header, gfp);
|
|
|
if (skb) {
|
|
|
if (sk_wmem_schedule(sk, skb->truesize)) {
|
|
|
+ skb_reserve(skb, sk->sk_prot->max_header);
|
|
|
/*
|
|
|
* Make sure that we have exactly size bytes
|
|
|
* available to the caller, no more, no less.
|
|
|
*/
|
|
|
- skb_reserve(skb, skb_tailroom(skb) - size);
|
|
|
+ skb->avail_size = size;
|
|
|
return skb;
|
|
|
}
|
|
|
__kfree_skb(skb);
|
|
@@ -995,10 +996,9 @@ new_segment:
|
|
|
copy = seglen;
|
|
|
|
|
|
/* Where to copy to? */
|
|
|
- if (skb_tailroom(skb) > 0) {
|
|
|
+ if (skb_availroom(skb) > 0) {
|
|
|
/* We have some space in skb head. Superb! */
|
|
|
- if (copy > skb_tailroom(skb))
|
|
|
- copy = skb_tailroom(skb);
|
|
|
+ copy = min_t(int, copy, skb_availroom(skb));
|
|
|
err = skb_add_data_nocache(sk, skb, from, copy);
|
|
|
if (err)
|
|
|
goto do_fault;
|