]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/dccp/output.c
dccp: Policy-based packet dequeueing infrastructure
[karo-tx-linux.git] / net / dccp / output.c
index d96dd9d362ae1162e7e82e1f22fc7338904b9a1c..784d302105439434ef7182e9a4f7b7d167a44baa 100644 (file)
@@ -242,7 +242,7 @@ static void dccp_xmit_packet(struct sock *sk)
 {
        int err, len;
        struct dccp_sock *dp = dccp_sk(sk);
-       struct sk_buff *skb = skb_dequeue(&sk->sk_write_queue);
+       struct sk_buff *skb = dccp_qpolicy_pop(sk);
 
        if (unlikely(skb == NULL))
                return;
@@ -345,7 +345,7 @@ void dccp_write_xmit(struct sock *sk)
        struct dccp_sock *dp = dccp_sk(sk);
        struct sk_buff *skb;
 
-       while ((skb = skb_peek(&sk->sk_write_queue))) {
+       while ((skb = dccp_qpolicy_top(sk))) {
                int rc = ccid_hc_tx_send_packet(dp->dccps_hc_tx_ccid, sk, skb);
 
                switch (ccid_packet_dequeue_eval(rc)) {
@@ -359,8 +359,7 @@ void dccp_write_xmit(struct sock *sk)
                        dccp_xmit_packet(sk);
                        break;
                case CCID_PACKET_ERR:
-                       skb_dequeue(&sk->sk_write_queue);
-                       kfree_skb(skb);
+                       dccp_qpolicy_drop(sk, skb);
                        dccp_pr_debug("packet discarded due to err=%d\n", rc);
                }
        }