From patchwork Wed Jan 16 05:43:56 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Ott X-Patchwork-Id: 212394 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 9075A2C0089 for ; Wed, 16 Jan 2013 16:44:53 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754099Ab3APFoh (ORCPT ); Wed, 16 Jan 2013 00:44:37 -0500 Received: from out5-smtp.messagingengine.com ([66.111.4.29]:48356 "EHLO out5-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751590Ab3APFn6 (ORCPT ); Wed, 16 Jan 2013 00:43:58 -0500 Received: from compute2.internal (compute2.nyi.mail.srv.osa [10.202.2.42]) by gateway1.nyi.mail.srv.osa (Postfix) with ESMTP id E51A020B3A; Wed, 16 Jan 2013 00:43:57 -0500 (EST) Received: from frontend1.nyi.mail.srv.osa ([10.202.2.160]) by compute2.internal (MEProxy); Wed, 16 Jan 2013 00:43:57 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=signal11.us; h= from:to:cc:subject:date:message-id:in-reply-to:references; s= mesmtp; bh=aGY69qvG7EhzyNlQkzQCsru7jbc=; b=BEOPhizScFEVx9Ms+u3Hg MlVHKz+M267nICRVQTrnL1F9L8dPO8zdt8TKH2swEEYTlIxiMehA+fxLikAK6byA ShiTZb0fswRT5519aG+0fGJ0JbJ9A3PauU9emMj2H7rZMSOdd+WOI+GMhof2kDfV okzS2IGp5UAihd6GYU+JZk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :in-reply-to:references; s=smtpout; bh=aGY69qvG7EhzyNlQkzQCsru7j bc=; b=r5QosvS4nrVBf0IreM8+m8uN77F9u0Y99HI6hW8GuADIiri7vAJ0wG2dN 2AUoKfO+c/EKNaWxFkB+6bNTCsMYMyqmeKtfZHOMDDciDEUoHO2HTygkzZnU3pWo /XNOOpYjkUxJT63KTgc4g6aGDB3xTMAS6shOCyIM8delp9m+cE= X-Sasl-enc: 59EFPOMyLxMag2HeAi6ixCc232QZ6BI5giuzkLd+ScoW 1358315037 Received: from ato.hsd1.fl.comcast.net. (unknown [68.62.240.236]) by mail.messagingengine.com (Postfix) with ESMTPA id 1A98F8E07FD; Wed, 16 Jan 2013 00:43:57 -0500 (EST) From: Alan Ott To: Alexander Smirnov , Dmitry Eremin-Solenikov , "David S. Miller" Cc: linux-zigbee-devel@lists.sourceforge.net, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Tony Cheneau , Eric Dumazet , Alan Ott Subject: [PATCH 1/2] 6lowpan: Refactor packet delivery into a function Date: Wed, 16 Jan 2013 00:43:56 -0500 Message-Id: <1358315037-10043-2-git-send-email-alan@signal11.us> X-Mailer: git-send-email 1.7.11.2 In-Reply-To: <1358315037-10043-1-git-send-email-alan@signal11.us> References: <1358315037-10043-1-git-send-email-alan@signal11.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Refactor the handing of the skb's to the individual lowpan devices into a function. Signed-off-by: Alan Ott --- net/ieee802154/6lowpan.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c index f651da6..1714cfa 100644 --- a/net/ieee802154/6lowpan.c +++ b/net/ieee802154/6lowpan.c @@ -594,10 +594,32 @@ static int lowpan_header_create(struct sk_buff *skb, } } +static int lowpan_give_skb_to_devices(struct sk_buff *skb) +{ + struct lowpan_dev_record *entry; + struct sk_buff *skb_cp; + int stat = NET_RX_SUCCESS; + + rcu_read_lock(); + list_for_each_entry_rcu(entry, &lowpan_devices, list) + if (lowpan_dev_info(entry->ldev)->real_dev == skb->dev) { + skb_cp = skb_copy(skb, GFP_ATOMIC); + if (!skb_cp) { + stat = -ENOMEM; + break; + } + + skb_cp->dev = entry->ldev; + stat = netif_rx(skb_cp); + } + rcu_read_unlock(); + + return stat; +} + static int lowpan_skb_deliver(struct sk_buff *skb, struct ipv6hdr *hdr) { struct sk_buff *new; - struct lowpan_dev_record *entry; int stat = NET_RX_SUCCESS; new = skb_copy_expand(skb, sizeof(struct ipv6hdr), skb_tailroom(skb), @@ -614,19 +636,7 @@ static int lowpan_skb_deliver(struct sk_buff *skb, struct ipv6hdr *hdr) new->protocol = htons(ETH_P_IPV6); new->pkt_type = PACKET_HOST; - rcu_read_lock(); - list_for_each_entry_rcu(entry, &lowpan_devices, list) - if (lowpan_dev_info(entry->ldev)->real_dev == new->dev) { - skb = skb_copy(new, GFP_ATOMIC); - if (!skb) { - stat = -ENOMEM; - break; - } - - skb->dev = entry->ldev; - stat = netif_rx(skb); - } - rcu_read_unlock(); + stat = lowpan_give_skb_to_devices(new); kfree_skb(new);