/* Merge the skbs */
        swap(skb2, ncm->skb_tx_data);
        if (ncm->skb_tx_data) {
-               dev_kfree_skb_any(ncm->skb_tx_data);
+               dev_consume_skb_any(ncm->skb_tx_data);
                ncm->skb_tx_data = NULL;
        }
 
        /* Copy NTB across. */
        ntb_iter = (void *) skb_put(skb2, ncm->skb_tx_ndp->len);
        memcpy(ntb_iter, ncm->skb_tx_ndp->data, ncm->skb_tx_ndp->len);
-       dev_kfree_skb_any(ncm->skb_tx_ndp);
+       dev_consume_skb_any(ncm->skb_tx_ndp);
        ncm->skb_tx_ndp = NULL;
 
        /* Insert zero'd datagram. */
                memset(ntb_data, 0, dgram_pad);
                ntb_data = (void *) skb_put(ncm->skb_tx_data, skb->len);
                memcpy(ntb_data, skb->data, skb->len);
-               dev_kfree_skb_any(skb);
+               dev_consume_skb_any(skb);
                skb = NULL;
 
        } else if (ncm->skb_tx_data && ncm->timer_force_tx) {
                } while (ndp_len > 2 * (opts->dgram_item_len * 2));
        } while (ndp_index);
 
-       dev_kfree_skb_any(skb);
+       dev_consume_skb_any(skb);
 
        VDBG(port->func.config->cdev,
             "Parsed NTB with %d frames\n", dgram_counter);
 
                /* FALLTHROUGH */
        case -ECONNRESET:               /* unlink */
        case -ESHUTDOWN:                /* disconnect etc */
+               dev_kfree_skb_any(skb);
                break;
        case 0:
                dev->net->stats.tx_bytes += skb->len;
+               dev_consume_skb_any(skb);
        }
        dev->net->stats.tx_packets++;
 
        spin_lock(&dev->req_lock);
        list_add(&req->list, &dev->tx_reqs);
        spin_unlock(&dev->req_lock);
-       dev_kfree_skb_any(skb);
 
        atomic_dec(&dev->tx_qlen);
        if (netif_carrier_ok(dev->net))