Commit 4d1c7d87 authored by Miquel Raynal's avatar Miquel Raynal Committed by Stefan Schmidt
Browse files

mac802154: Move an skb free within the rx path



It may appear clearer to free the skb at the end of the path rather than
in the middle, within a helper.

Move kfree_skb() from the end of __ieee802154_rx_handle_packet() to
right after it in the calling function ieee802154_rx(). Doing so implies
reworking a little bit the exit path.

Suggested-by: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Acked-by: default avatarAlexander Aring <aahringo@redhat.com>
Link: https://lore.kernel.org/r/20221026093502.602734-2-miquel.raynal@bootlin.com


Signed-off-by: default avatarStefan Schmidt <stefan@datenfreihafen.org>
parent 95d9a3da
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -234,8 +234,6 @@ __ieee802154_rx_handle_packet(struct ieee802154_local *local,
		skb = NULL;
		break;
	}

	kfree_skb(skb);
}

static void
@@ -274,7 +272,7 @@ void ieee802154_rx(struct ieee802154_local *local, struct sk_buff *skb)
	WARN_ON_ONCE(softirq_count() == 0);

	if (local->suspended)
		goto drop;
		goto free_skb;

	/* TODO: When a transceiver omits the checksum here, we
	 * add an own calculated one. This is currently an ugly
@@ -292,20 +290,17 @@ void ieee802154_rx(struct ieee802154_local *local, struct sk_buff *skb)
	/* Level 1 filtering: Check the FCS by software when relevant */
	if (local->hw.phy->filtering == IEEE802154_FILTERING_NONE) {
		crc = crc_ccitt(0, skb->data, skb->len);
		if (crc) {
			rcu_read_unlock();
		if (crc)
			goto drop;
	}
	}
	/* remove crc */
	skb_trim(skb, skb->len - 2);

	__ieee802154_rx_handle_packet(local, skb);

	rcu_read_unlock();

	return;
drop:
	rcu_read_unlock();
free_skb:
	kfree_skb(skb);
}