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: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Acked-by: Alexander Aring <aahringo@redhat.com> Link: https://lore.kernel.org/r/20221026093502.602734-2-miquel.raynal@bootlin.com Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
This commit is contained in:
Родитель
95d9a3dab1
Коммит
4d1c7d8703
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче