On Sat, Oct 06, 2018 at 01:42:42AM +0900, Taehee Yoo wrote: > diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c > index 2c8d313ae216..6ccabe6f74a6 100644 > --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c > +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c > @@ -59,7 +59,6 @@ struct clusterip_config { > struct rcu_head rcu; > > char ifname[IFNAMSIZ]; /* device ifname */ > - struct notifier_block notifier; /* refresh c->ifindex in it */ > }; > > #ifdef CONFIG_PROC_FS > @@ -118,8 +117,6 @@ clusterip_config_entry_put(struct net *net, struct clusterip_config *c) > spin_unlock(&cn->lock); > local_bh_enable(); > > - unregister_netdevice_notifier(&c->notifier); > - > return; > } > local_bh_enable(); > @@ -181,32 +178,37 @@ clusterip_netdev_event(struct notifier_block *this, unsigned long event, > void *ptr) > { > struct net_device *dev = netdev_notifier_info_to_dev(ptr); > + struct net *net = dev_net(dev); > + struct clusterip_net *cn = net_generic(net, clusterip_net_id); > struct clusterip_config *c; > > - c = container_of(this, struct clusterip_config, notifier); > - switch (event) { > - case NETDEV_REGISTER: > - if (!strcmp(dev->name, c->ifname)) { > - c->ifindex = dev->ifindex; > - dev_mc_add(dev, c->clustermac); > - } > - break; > - case NETDEV_UNREGISTER: > - if (dev->ifindex == c->ifindex) { > - dev_mc_del(dev, c->clustermac); > - c->ifindex = -1; > - } > - break; > - case NETDEV_CHANGENAME: > - if (!strcmp(dev->name, c->ifname)) { > - c->ifindex = dev->ifindex; > - dev_mc_add(dev, c->clustermac); > - } else if (dev->ifindex == c->ifindex) { > - dev_mc_del(dev, c->clustermac); > - c->ifindex = -1; > + spin_lock(&cn->lock); Do we need spin_lock_bh() here?