From 5d849496f8863a9a125564a2256d4e317681c886 Mon Sep 17 00:00:00 2001 From: Gerrit Renker Date: Sun, 3 Jul 2011 09:51:29 -0600 Subject: [PATCH] --- yaml --- r: 256035 b: refs/heads/master c: 8695e80193fed35f27c06f462bd5b76132fd5697 h: refs/heads/master i: 256033: f370c25106d51491853019bab50a95c2e06d1ae6 256031: 0d6d99dc017c961f309831a65c1612b09b1c88ec v: v3 --- [refs] | 2 +- trunk/net/dccp/output.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index f1e5632dbae1..b7c63abe8af4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c0c2015056d7bd69f3554208271407e7e2ee69e5 +refs/heads/master: 8695e80193fed35f27c06f462bd5b76132fd5697 diff --git a/trunk/net/dccp/output.c b/trunk/net/dccp/output.c index fab108e51e5a..dede3edb8849 100644 --- a/trunk/net/dccp/output.c +++ b/trunk/net/dccp/output.c @@ -27,11 +27,13 @@ static inline void dccp_event_ack_sent(struct sock *sk) inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK); } -static void dccp_skb_entail(struct sock *sk, struct sk_buff *skb) +/* enqueue @skb on sk_send_head for retransmission, return clone to send now */ +static struct sk_buff *dccp_skb_entail(struct sock *sk, struct sk_buff *skb) { skb_set_owner_w(skb, sk); WARN_ON(sk->sk_send_head); sk->sk_send_head = skb; + return skb_clone(sk->sk_send_head, gfp_any()); } /* @@ -552,8 +554,7 @@ int dccp_connect(struct sock *sk) DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_REQUEST; - dccp_skb_entail(sk, skb); - dccp_transmit_skb(sk, skb_clone(skb, GFP_KERNEL)); + dccp_transmit_skb(sk, dccp_skb_entail(sk, skb)); DCCP_INC_STATS(DCCP_MIB_ACTIVEOPENS); /* Timer for repeating the REQUEST until an answer. */ @@ -678,8 +679,7 @@ void dccp_send_close(struct sock *sk, const int active) DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_CLOSE; if (active) { - dccp_skb_entail(sk, skb); - dccp_transmit_skb(sk, skb_clone(skb, prio)); + skb = dccp_skb_entail(sk, skb); /* * Retransmission timer for active-close: RFC 4340, 8.3 requires * to retransmit the Close/CloseReq until the CLOSING/CLOSEREQ @@ -692,6 +692,6 @@ void dccp_send_close(struct sock *sk, const int active) */ inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, DCCP_TIMEOUT_INIT, DCCP_RTO_MAX); - } else - dccp_transmit_skb(sk, skb); + } + dccp_transmit_skb(sk, skb); }