|
@@ -2309,12 +2309,11 @@ static void tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *to,
|
|
|
* state updates are done by the caller. Returns non-zero if an
|
|
|
* error occurred which prevented the send.
|
|
|
*/
|
|
|
-int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
|
|
|
+int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
|
|
|
{
|
|
|
struct tcp_sock *tp = tcp_sk(sk);
|
|
|
struct inet_connection_sock *icsk = inet_csk(sk);
|
|
|
unsigned int cur_mss;
|
|
|
- int err;
|
|
|
|
|
|
/* Inconslusive MTU probe */
|
|
|
if (icsk->icsk_mtup.probe_size) {
|
|
@@ -2387,11 +2386,17 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
|
|
|
if (unlikely(NET_IP_ALIGN && ((unsigned long)skb->data & 3))) {
|
|
|
struct sk_buff *nskb = __pskb_copy(skb, MAX_TCP_HEADER,
|
|
|
GFP_ATOMIC);
|
|
|
- err = nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) :
|
|
|
- -ENOBUFS;
|
|
|
+ return nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) :
|
|
|
+ -ENOBUFS;
|
|
|
} else {
|
|
|
- err = tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC);
|
|
|
+ return tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC);
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
|
|
|
+{
|
|
|
+ struct tcp_sock *tp = tcp_sk(sk);
|
|
|
+ int err = __tcp_retransmit_skb(sk, skb);
|
|
|
|
|
|
if (err == 0) {
|
|
|
/* Update global TCP statistics. */
|