llc: avoid skb_clone() if there is only one handler
Subsystems (3)
PATCH 1/1 llc: avoid skb_clone() if there is only one handler
Signed-off-by Changli Gao <[email protected]>
--- net/llc/llc_input.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-)
net/llc/llc_input.c +13 -12
@@ -181,25 +181,26 @@ int llc_rcv(struct sk_buff *skb, struct net_device *dev,* LLC functionality */ rcv =rcu_dereference (sap->rcv_func); -if (rcv) { -struct sk_buff *cskb =skb_clone (skb,GFP_ATOMIC ); -if (cskb) -rcv (cskb, dev, pt, orig_dev); - } dest =llc_pdu_type (skb); -if (unlikely (!dest || !llc_type_handlers[dest -1 ])) - goto drop_put; - llc_type_handlers[dest -1 ](sap, skb); -out_put: +if (unlikely (!dest || !llc_type_handlers[dest -1 ])) { +if (rcv) +rcv (skb, dev, pt, orig_dev); +else +kfree_skb (skb); + }else { +if (rcv) { +struct sk_buff *cskb =skb_clone (skb,GFP_ATOMIC ); +if (cskb) +rcv (cskb, dev, pt, orig_dev); + } + llc_type_handlers[dest -1 ](sap, skb); + }llc_sap_put (sap); out:return 0 ; drop:kfree_skb (skb); goto out; -drop_put: -kfree_skb (skb); - goto out_put; handle_station:if (!llc_station_handler) goto drop;
From: Changli Gao <[email protected]>
Date: Tue, 22 Feb 2011 19:55:18 +0800
Quoted 1 line
Signed-off-by Changli Gao <[email protected]>
Applied to net-next-2.6, thanks.