From patchwork Sat Feb 8 18:41:15 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 318485 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 958EB2C00A5 for ; Sun, 9 Feb 2014 06:09:41 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751071AbaBHTJg (ORCPT ); Sat, 8 Feb 2014 14:09:36 -0500 Received: from smtp03.stone-is.org ([87.238.162.65]:60445 "EHLO smtpgw.stone-is.be" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1751022AbaBHTJf (ORCPT ); Sat, 8 Feb 2014 14:09:35 -0500 X-Greylist: delayed 1692 seconds by postgrey-1.27 at vger.kernel.org; Sat, 08 Feb 2014 14:09:35 EST Received: from localhost (unknown [127.0.0.1]) by smtpgw.stone-is.be (Postfix) with ESMTP id 0597B334B64; Sat, 8 Feb 2014 18:41:20 +0000 (UTC) Received: from smtpgw.stone-is.be ([127.0.0.1]) by localhost (smtpgw.stone-is.be [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VAF16ee8tTSf; Sat, 8 Feb 2014 19:41:16 +0100 (CET) Received: from vz19.stone-is.net (vz19.stone-is.net [87.238.162.57]) by smtpgw.stone-is.be (Postfix) with ESMTP id 58616334B3C; Sat, 8 Feb 2014 19:41:16 +0100 (CET) X-No-Relay: not in my network X-No-Relay: not in my network X-No-Relay: not in my network X-No-Relay: not in my network X-No-Relay: not in my network Received: from [192.168.1.117] (178-119-65-67.access.telenet.be [178.119.65.67]) by vz19.stone-is.net (Postfix) with ESMTPSA id 8635B889B7; Sat, 8 Feb 2014 19:40:48 +0100 (CET) Message-ID: <52F67A4B.9000504@acm.org> Date: Sat, 08 Feb 2014 19:41:15 +0100 From: Bart Van Assche User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: "David S. Miller" CC: Stephen Hemminger , Jiri Pirko , Neil Horman , "netdev@vger.kernel.org" Subject: [PATCH] bridge: Unbreak netconsole X-Enigmail-Version: 1.6 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Sending netconsole messages over a bridge network interface doesn't work anymore since kernel v3.12. Bisecting this led to the patch "bridge: cleanup netpoll code". Hence revert that patch (commit 93d8bf9fb8f39d6d3e461db60f883d9f81006159). Signed-off-by: Bart Van Assche Cc: Stephen Hemminger Cc: Jiri Pirko Cc: Neil Horman Cc: David S. Miller Cc: # 3.12 Reference: https://bugzilla.kernel.org/show_bug.cgi?id=70071 --- net/bridge/br_device.c | 12 ++++++------ net/bridge/br_if.c | 3 +-- net/bridge/br_private.h | 10 ++++++++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index e4401a5..ab69594 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -252,22 +252,22 @@ fail: int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp) { struct netpoll *np; - int err; - - if (!p->br->dev->npinfo) - return 0; + int err = 0; np = kzalloc(sizeof(*p->np), gfp); + err = -ENOMEM; if (!np) - return -ENOMEM; + goto out; err = __netpoll_setup(np, p->dev, gfp); if (err) { kfree(np); - return err; + goto out; } p->np = np; + +out: return err; } diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index cffe1d6..639231a 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -366,8 +366,7 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) if (err) goto err2; - err = br_netpoll_enable(p, GFP_KERNEL); - if (err) + if (br_netpoll_info(br) && ((err = br_netpoll_enable(p, GFP_KERNEL)))) goto err3; err = netdev_master_upper_dev_link(dev, br->dev); diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index fcd1233..52d63bf 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -339,6 +339,11 @@ void br_dev_setup(struct net_device *dev); void br_dev_delete(struct net_device *dev, struct list_head *list); netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev); #ifdef CONFIG_NET_POLL_CONTROLLER +static inline struct netpoll_info *br_netpoll_info(struct net_bridge *br) +{ + return br->dev->npinfo; +} + static inline void br_netpoll_send_skb(const struct net_bridge_port *p, struct sk_buff *skb) { @@ -351,6 +356,11 @@ static inline void br_netpoll_send_skb(const struct net_bridge_port *p, int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp); void br_netpoll_disable(struct net_bridge_port *p); #else +static inline struct netpoll_info *br_netpoll_info(struct net_bridge *br) +{ + return NULL; +} + static inline void br_netpoll_send_skb(const struct net_bridge_port *p, struct sk_buff *skb) {