Skip to content

Commit

Permalink
net: qualcomm: rmnet: Capture all drops in transmit path
Browse files Browse the repository at this point in the history
Packets in transmit path could potentially be dropped if there were
errors while adding the MAP header or the checksum header.
Increment the tx_drops stats in these cases.

Additionally, refactor the code to free the packet and increment
the tx_drops stat under a single label.

Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Subash Abhinov Kasiviswanathan authored and David S. Miller committed May 16, 2018
1 parent b0ec758 commit 1eece79
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,25 +148,21 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,

if (skb_headroom(skb) < required_headroom) {
if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL))
goto fail;
return -ENOMEM;
}

if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV4)
rmnet_map_checksum_uplink_packet(skb, orig_dev);

map_header = rmnet_map_add_map_header(skb, additional_header_len, 0);
if (!map_header)
goto fail;
return -ENOMEM;

map_header->mux_id = mux_id;

skb->protocol = htons(ETH_P_MAP);

return 0;

fail:
kfree_skb(skb);
return -ENOMEM;
}

static void
Expand Down Expand Up @@ -228,15 +224,18 @@ void rmnet_egress_handler(struct sk_buff *skb)
mux_id = priv->mux_id;

port = rmnet_get_port(skb->dev);
if (!port) {
kfree_skb(skb);
return;
}
if (!port)
goto drop;

if (rmnet_map_egress_handler(skb, port, mux_id, orig_dev))
return;
goto drop;

rmnet_vnd_tx_fixup(skb, orig_dev);

dev_queue_xmit(skb);
return;

drop:
this_cpu_inc(priv->pcpu_stats->stats.tx_drops);
kfree_skb(skb);
}

0 comments on commit 1eece79

Please sign in to comment.