From: Torsten Polle <tpo...@de.adit-jv.com>

dev_kfree_skb_any() is used to free packets that are dropped by the
network stack. Therefore the function should not be used for packets
that have been successfully processed by the network stack. Instead
dev_consume_skb_any() has to be used for such consumed packets.

This separation helps to identify dropped packets.

Signed-off-by: Torsten Polle <tpo...@de.adit-jv.com>
Signed-off-by: Harish Jenny K N <harish_kand...@mentor.com>
---
 drivers/usb/gadget/function/f_ncm.c   |    8 ++++----
 drivers/usb/gadget/function/u_ether.c |    3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/gadget/function/f_ncm.c 
b/drivers/usb/gadget/function/f_ncm.c
index b6771ad..e8008fa 100644
--- a/drivers/usb/gadget/function/f_ncm.c
+++ b/drivers/usb/gadget/function/f_ncm.c
@@ -998,7 +998,7 @@ static struct sk_buff *package_for_tx(struct f_ncm *ncm)
        /* 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;
        }
 
@@ -1009,7 +1009,7 @@ static struct sk_buff *package_for_tx(struct f_ncm *ncm)
        /* 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. */
@@ -1136,7 +1136,7 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port,
                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) {
@@ -1332,7 +1332,7 @@ static int ncm_unwrap_ntb(struct gether *port,
                } 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);
diff --git a/drivers/usb/gadget/function/u_ether.c 
b/drivers/usb/gadget/function/u_ether.c
index d8593c7..8a6be06 100644
--- a/drivers/usb/gadget/function/u_ether.c
+++ b/drivers/usb/gadget/function/u_ether.c
@@ -455,16 +455,17 @@ static void tx_complete(struct usb_ep *ep, struct 
usb_request *req)
                /* 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))
-- 
1.7.9.5


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to