On Fri, Sep 22, 2017 at 1:11 PM, Mahesh Bandewar (महेश बंडेवार) <mahe...@google.com> wrote: >> #ifdef CONFIG_TUN_VNET_CROSS_LE >> static inline bool tun_legacy_is_little_endian(struct tun_struct *tun) >> { >> @@ -541,6 +604,11 @@ static void __tun_detach(struct tun_file *tfile, bool >> clean) >> >> tun = rtnl_dereference(tfile->tun); >> >> + if (tun && clean) { >> + tun_napi_disable(tun, tfile); > are we missing synchronize_net() separating disable and del calls?
That is not needed here. napi_disable has its own mechanism for waiting until a napi struct is no longer run. netif_napi_del will call synchronize_net if needed. These two calls are made one after the other in quite a few drivers.