Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54448f2b authored by Subash Abhinov Kasiviswanathan's avatar Subash Abhinov Kasiviswanathan
Browse files

net: rmnet_data: Always try to linearize when UL aggregation is on



Skipping UL aggregation if the packet was linear was causing out
of order packets. If linearization fails, pass up the packet as is.
Also skip padding if using version 3 or v4 when using UL aggregation.

CRs-Fixed: 2141234
Change-Id: I711668ecf2a3e6807f2270b4b107f4a2a3d21654
Signed-off-by: default avatarSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
parent 6628ed00
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -573,7 +573,8 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
			 skb_is_nonlinear(skb);

	if ((!(config->egress_data_format &
	    RMNET_EGRESS_FORMAT_AGGREGATION)) || non_linear_skb)
	    RMNET_EGRESS_FORMAT_AGGREGATION)) || csum_required ||
	    non_linear_skb)
		map_header = rmnet_map_add_map_header
		(skb, additional_header_length, RMNET_MAP_NO_PAD_BYTES);
	else
@@ -595,11 +596,14 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,

	skb->protocol = htons(ETH_P_MAP);

	if ((config->egress_data_format & RMNET_EGRESS_FORMAT_AGGREGATION) &&
	    !non_linear_skb) {
	if (config->egress_data_format & RMNET_EGRESS_FORMAT_AGGREGATION) {
		if (rmnet_ul_aggregation_skip(skb, required_headroom))
			return RMNET_MAP_SUCCESS;

		if (non_linear_skb)
			if (unlikely(__skb_linearize(skb)))
				return RMNET_MAP_SUCCESS;

		rmnet_map_aggregate(skb, config);
		return RMNET_MAP_CONSUMED;
	}