bool ipv6;
        u16 local_port, remote_port;
        u8 remote_mac[ETH_ALEN];
-
-       struct work_struct cleanup_work;
 };
 
 struct netpoll_info {
 int __netpoll_setup(struct netpoll *np, struct net_device *ndev);
 int netpoll_setup(struct netpoll *np);
 void __netpoll_cleanup(struct netpoll *np);
-void __netpoll_free_async(struct netpoll *np);
+void __netpoll_free(struct netpoll *np);
 void netpoll_cleanup(struct netpoll *np);
 void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
                             struct net_device *dev);
 
         MAX_UDP_CHUNK)
 
 static void zap_completion_queue(void);
-static void netpoll_async_cleanup(struct work_struct *work);
 
 static unsigned int carrier_timeout = 4;
 module_param(carrier_timeout, uint, 0644);
 
        np->dev = ndev;
        strlcpy(np->dev_name, ndev->name, IFNAMSIZ);
-       INIT_WORK(&np->cleanup_work, netpoll_async_cleanup);
 
        if (ndev->priv_flags & IFF_DISABLE_NETPOLL) {
                np_err(np, "%s doesn't support polling, aborting\n",
 {
        struct netpoll_info *npinfo;
 
-       /* rtnl_dereference would be preferable here but
-        * rcu_cleanup_netpoll path can put us in here safely without
-        * holding the rtnl, so plain rcu_dereference it is
-        */
        npinfo = rtnl_dereference(np->dev->npinfo);
        if (!npinfo)
                return;
 }
 EXPORT_SYMBOL_GPL(__netpoll_cleanup);
 
-static void netpoll_async_cleanup(struct work_struct *work)
+void __netpoll_free(struct netpoll *np)
 {
-       struct netpoll *np = container_of(work, struct netpoll, cleanup_work);
+       ASSERT_RTNL();
 
-       rtnl_lock();
+       /* Wait for transmitting packets to finish before freeing. */
+       synchronize_rcu_bh();
        __netpoll_cleanup(np);
-       rtnl_unlock();
        kfree(np);
 }
-
-void __netpoll_free_async(struct netpoll *np)
-{
-       schedule_work(&np->cleanup_work);
-}
-EXPORT_SYMBOL_GPL(__netpoll_free_async);
+EXPORT_SYMBOL_GPL(__netpoll_free);
 
 void netpoll_cleanup(struct netpoll *np)
 {