mirror of https://gitee.com/openkylin/linux.git
bridge: fix netconsole setup over bridge
Commit93d8bf9fb8
("bridge: cleanup netpoll code") introduced a check in br_netpoll_enable(), but this check is incorrect for br_netpoll_setup(). This patch moves the code after the check into __br_netpoll_enable() and calls it in br_netpoll_setup(). For br_add_if(), the check is still needed. Fixes:93d8bf9fb8
("bridge: cleanup netpoll code") Cc: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> Cc: Stephen Hemminger <stephen@networkplumber.org> Cc: David S. Miller <davem@davemloft.net> Signed-off-by: Cong Wang <cwang@twopensource.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Acked-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> Tested-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ed98df3361
commit
dbe173079a
|
@ -226,37 +226,11 @@ static void br_netpoll_cleanup(struct net_device *dev)
|
||||||
br_netpoll_disable(p);
|
br_netpoll_disable(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int br_netpoll_setup(struct net_device *dev, struct netpoll_info *ni,
|
static int __br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp)
|
||||||
gfp_t gfp)
|
|
||||||
{
|
|
||||||
struct net_bridge *br = netdev_priv(dev);
|
|
||||||
struct net_bridge_port *p;
|
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
list_for_each_entry(p, &br->port_list, list) {
|
|
||||||
if (!p->dev)
|
|
||||||
continue;
|
|
||||||
err = br_netpoll_enable(p, gfp);
|
|
||||||
if (err)
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
return err;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
br_netpoll_cleanup(dev);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp)
|
|
||||||
{
|
{
|
||||||
struct netpoll *np;
|
struct netpoll *np;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!p->br->dev->npinfo)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
np = kzalloc(sizeof(*p->np), gfp);
|
np = kzalloc(sizeof(*p->np), gfp);
|
||||||
if (!np)
|
if (!np)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -271,6 +245,37 @@ int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp)
|
||||||
|
{
|
||||||
|
if (!p->br->dev->npinfo)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return __br_netpoll_enable(p, gfp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int br_netpoll_setup(struct net_device *dev, struct netpoll_info *ni,
|
||||||
|
gfp_t gfp)
|
||||||
|
{
|
||||||
|
struct net_bridge *br = netdev_priv(dev);
|
||||||
|
struct net_bridge_port *p;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
list_for_each_entry(p, &br->port_list, list) {
|
||||||
|
if (!p->dev)
|
||||||
|
continue;
|
||||||
|
err = __br_netpoll_enable(p, gfp);
|
||||||
|
if (err)
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
return err;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
br_netpoll_cleanup(dev);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
void br_netpoll_disable(struct net_bridge_port *p)
|
void br_netpoll_disable(struct net_bridge_port *p)
|
||||||
{
|
{
|
||||||
struct netpoll *np = p->np;
|
struct netpoll *np = p->np;
|
||||||
|
|
Loading…
Reference in New Issue