struct sk_buff *skb;
 
        while ((skb = __skb_dequeue(&sk->sk_receive_queue)) != NULL) {
-               skb_dst_set(skb, (void *)NULL);
+               skb_dstref_steal(skb);
                kfree_skb(skb);
        }
 }
        struct sk_buff *skb;
 
        while ((skb = __skb_dequeue(&tlsk->sk_recv_queue)) != NULL) {
-               skb_dst_set(skb, NULL);
+               skb_dstref_steal(skb);
                kfree_skb(skb);
        }
 }
                pr_err("can't find conn. for hwtid %u.\n", hwtid);
                return -EINVAL;
        }
-       skb_dst_set(skb, NULL);
+       skb_dstref_steal(skb);
        process_cpl_msg(chtls_recv_data, sk, skb);
        return 0;
 }
                pr_err("can't find conn. for hwtid %u.\n", hwtid);
                return -EINVAL;
        }
-       skb_dst_set(skb, NULL);
+       skb_dstref_steal(skb);
        process_cpl_msg(chtls_recv_pdu, sk, skb);
        return 0;
 }
                pr_err("can't find conn. for hwtid %u.\n", hwtid);
                return -EINVAL;
        }
-       skb_dst_set(skb, NULL);
+       skb_dstref_steal(skb);
        process_cpl_msg(chtls_rx_hdr, sk, skb);
 
        return 0;
 
 
 static inline void chtls_free_skb(struct sock *sk, struct sk_buff *skb)
 {
-       skb_dst_set(skb, NULL);
+       skb_dstref_steal(skb);
        __skb_unlink(skb, &sk->sk_receive_queue);
        __kfree_skb(skb);
 }
 
 static inline void chtls_kfree_skb(struct sock *sk, struct sk_buff *skb)
 {
-       skb_dst_set(skb, NULL);
+       skb_dstref_steal(skb);
        __skb_unlink(skb, &sk->sk_receive_queue);
        kfree_skb(skb);
 }