|
@@ -2773,15 +2773,11 @@ void tcp_send_fin(struct sock *sk)
|
|
} else {
|
|
} else {
|
|
/* Socket is locked, keep trying until memory is available. */
|
|
/* Socket is locked, keep trying until memory is available. */
|
|
for (;;) {
|
|
for (;;) {
|
|
- skb = alloc_skb_fclone(MAX_TCP_HEADER,
|
|
|
|
- sk->sk_allocation);
|
|
|
|
|
|
+ skb = sk_stream_alloc_skb(sk, 0, sk->sk_allocation);
|
|
if (skb)
|
|
if (skb)
|
|
break;
|
|
break;
|
|
yield();
|
|
yield();
|
|
}
|
|
}
|
|
-
|
|
|
|
- /* Reserve space for headers and prepare control bits. */
|
|
|
|
- skb_reserve(skb, MAX_TCP_HEADER);
|
|
|
|
/* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */
|
|
/* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */
|
|
tcp_init_nondata_skb(skb, tp->write_seq,
|
|
tcp_init_nondata_skb(skb, tp->write_seq,
|
|
TCPHDR_ACK | TCPHDR_FIN);
|
|
TCPHDR_ACK | TCPHDR_FIN);
|