From 138818a6eb5ada892b2ff6af7f2d12e7df2a7435 Mon Sep 17 00:00:00 2001 From: Ashwanth Goli Date: Fri, 18 Nov 2016 15:07:51 +0530 Subject: [PATCH] rmnet_data: queue QMAP control packets if start_xmit fails rmnet_data does not free skb's when phy netdev fails to xmit a qmap control packet cauing memory leak. To avoid this we queue the packet back into device queue if start_xmit fails. Change-Id: Id7efdd10ac76c989c086cb5f934a4b666b7c5939 Signed-off-by: Ashwanth Goli --- net/rmnet_data/rmnet_map_command.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/net/rmnet_data/rmnet_map_command.c b/net/rmnet_data/rmnet_map_command.c index 055d5f402957..9dac2b27d4c3 100644 --- a/net/rmnet_data/rmnet_map_command.c +++ b/net/rmnet_data/rmnet_map_command.c @@ -121,6 +121,7 @@ static void rmnet_map_send_ack(struct sk_buff *skb, { struct rmnet_map_control_command_s *cmd; int xmit_status; + int rc; if (unlikely(!skb)) BUG(); @@ -149,6 +150,15 @@ static void rmnet_map_send_ack(struct sk_buff *skb, netif_tx_unlock(skb->dev); LOGD("MAP command ACK=%hhu sent with rc: %d", type & 0x03, xmit_status); + + if (xmit_status != NETDEV_TX_OK) { + rc = dev_queue_xmit(skb); + if (rc != 0) { + LOGD("Failed to queue packet for transmission on [%s]", + skb->dev->name); + } + } + } /**