Merge branch 'e1000-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[pandora-kernel.git] / net / dccp / output.c
index 8245696..c8d843e 100644 (file)
@@ -87,7 +87,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
                        kfree_skb(skb);
                        return -EPROTO;
                }
-               
+
 
                /* Build DCCP header and checksum it. */
                dh = dccp_zeroed_hdr(skb, dccp_header_size);
@@ -124,7 +124,7 @@ static 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 = icsk->icsk_af_ops->queue_xmit(skb, sk, 0);
+               err = icsk->icsk_af_ops->queue_xmit(skb, 0);
                return net_xmit_eval(err);
        }
        return -ENOBUFS;
@@ -194,6 +194,7 @@ static int dccp_wait_for_ccid(struct sock *sk, struct sk_buff *skb)
                rc = ccid_hc_tx_send_packet(dp->dccps_hc_tx_ccid, sk, skb);
                if (rc <= 0)
                        break;
+               dccp_pr_debug("delayed send by %d msec\n", rc);
                delay = msecs_to_jiffies(rc);
                sk->sk_write_pending++;
                release_sock(sk);
@@ -213,19 +214,6 @@ do_interrupted:
        goto out;
 }
 
-static void dccp_write_xmit_timer(unsigned long data) {
-       struct sock *sk = (struct sock *)data;
-       struct dccp_sock *dp = dccp_sk(sk);
-
-       bh_lock_sock(sk);
-       if (sock_owned_by_user(sk))
-               sk_reset_timer(sk, &dp->dccps_xmit_timer, jiffies+1);
-       else
-               dccp_write_xmit(sk, 0);
-       bh_unlock_sock(sk);
-       sock_put(sk);
-}
-
 void dccp_write_xmit(struct sock *sk, int block)
 {
        struct dccp_sock *dp = dccp_sk(sk);
@@ -268,8 +256,8 @@ void dccp_write_xmit(struct sock *sk, int block)
                                DCCP_BUG("err=%d after ccid_hc_tx_packet_sent",
                                         err);
                } else {
-                       dccp_pr_debug("packet discarded\n");
-                       kfree(skb);
+                       dccp_pr_debug("packet discarded due to err=%d\n", err);
+                       kfree_skb(skb);
                }
        }
 }
@@ -396,7 +384,7 @@ int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code)
                                                      code);
                if (skb != NULL) {
                        memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
-                       err = inet_csk(sk)->icsk_af_ops->queue_xmit(skb, sk, 0);
+                       err = inet_csk(sk)->icsk_af_ops->queue_xmit(skb, 0);
                        return net_xmit_eval(err);
                }
        }
@@ -415,7 +403,7 @@ static inline void dccp_connect_init(struct sock *sk)
 
        sk->sk_err = 0;
        sock_reset_flag(sk, SOCK_DONE);
-       
+
        dccp_sync_mss(sk, dst_mtu(dst));
 
        /*
@@ -434,9 +422,6 @@ static inline void dccp_connect_init(struct sock *sk)
        dp->dccps_gar = dp->dccps_iss;
 
        icsk->icsk_retransmits = 0;
-       init_timer(&dp->dccps_xmit_timer);
-       dp->dccps_xmit_timer.data = (unsigned long)sk;
-       dp->dccps_xmit_timer.function = dccp_write_xmit_timer;
 }
 
 int dccp_connect(struct sock *sk)