From patchwork Tue Feb 22 11:55:18 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Changli Gao X-Patchwork-Id: 83960 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 22E48B712F for ; Tue, 22 Feb 2011 22:56:19 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754084Ab1BVL4M (ORCPT ); Tue, 22 Feb 2011 06:56:12 -0500 Received: from mail-pz0-f46.google.com ([209.85.210.46]:59625 "EHLO mail-pz0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754050Ab1BVL4L (ORCPT ); Tue, 22 Feb 2011 06:56:11 -0500 Received: by pzk35 with SMTP id 35so247519pzk.19 for ; Tue, 22 Feb 2011 03:56:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:from:to:cc:subject:date:message-id:x-mailer; bh=SgU3ZOhJzlEQ3i5vaTsj9sGhOXeeSCV/tRomH3c5Sts=; b=RuTudSnA5kI7wmCFZefO5b+rzT/8NkHlJEujG/vfF/aLVIBNIC+wH56N4MQSjNd5ue zaAqaxJXIU95KpaEqIAB/Co1yXeItjy2d3Z70lGmvGlIQHIAef0ptQ7EzKY/Ee3kYqUA VX4HVeJ3I6+VRMxP1qgZojm8c9g+SmgVKCtoc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=EWxrsXMGwki7YzzFIQAvM6R08xwozJdPNWD/hpIJ4IGriNXkYMwqCVJmiaLVi8RVtT oyIbISNsbD2ofriZJYcM5j8leowOAbPcsDbSBqc28uWNlLywqJitiKpgN8p+4/kkpPd7 c9DFLf4DykrD1ibUOs/eQ+wJyIo/w58lBNDHs= Received: by 10.142.127.16 with SMTP id z16mr2098013wfc.21.1298375770556; Tue, 22 Feb 2011 03:56:10 -0800 (PST) Received: from localhost.localdomain ([221.239.34.230]) by mx.google.com with ESMTPS id m10sm8869833wfl.11.2011.02.22.03.56.01 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 22 Feb 2011 03:56:08 -0800 (PST) From: Changli Gao To: Arnaldo Carvalho de Melo Cc: "David S. Miller" , netdev@vger.kernel.org, Changli Gao Subject: [PATCH] llc: avoid skb_clone() if there is only one handler Date: Tue, 22 Feb 2011 19:55:18 +0800 Message-Id: <1298375718-5052-1-git-send-email-xiaosuo@gmail.com> X-Mailer: git-send-email 1.7.3.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Changli Gao --- net/llc/llc_input.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/net/llc/llc_input.c b/net/llc/llc_input.c index f996874..058f1e9 100644 --- a/net/llc/llc_input.c +++ b/net/llc/llc_input.c @@ -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;