aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/output.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2005-10-21 12:22:33 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-10-21 12:22:33 -0700
commitcffc7b38a23960d5f83b0aec5e67f189a6ae8062 (patch)
tree2d3d5f6bd4447a482d4fcf51a788e2fc4c34c20d /net/dccp/output.c
parente29971f9a4ca08c3c31b98be96c293ef9f7dcc32 (diff)
parentb2cc99f04c5a732c793519aca61a20f719b50db4 (diff)
downloadlinux-cffc7b38a23960d5f83b0aec5e67f189a6ae8062.tar.gz
Merge master.kernel.org:/pub/scm/linux/kernel/git/acme/net-2.6
Diffstat (limited to 'net/dccp/output.c')
-rw-r--r--net/dccp/output.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/net/dccp/output.c b/net/dccp/output.c
index 4786bdcddcc92a..29250749f16f86 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -62,10 +62,8 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
skb->h.raw = skb_push(skb, dccp_header_size);
dh = dccp_hdr(skb);
- /*
- * Data packets are not cloned as they are never retransmitted
- */
- if (skb_cloned(skb))
+
+ if (!skb->sk)
skb_set_owner_w(skb, sk);
/* Build DCCP header and checksum it. */
@@ -102,6 +100,7 @@ int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
+ memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
err = ip_queue_xmit(skb, 0);
if (err <= 0)
return err;
@@ -243,7 +242,8 @@ int dccp_write_xmit(struct sock *sk, struct sk_buff *skb, long *timeo)
err = dccp_transmit_skb(sk, skb);
ccid_hc_tx_packet_sent(dp->dccps_hc_tx_ccid, sk, 0, len);
- }
+ } else
+ kfree_skb(skb);
return err;
}