[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130610132458.31aa2386@nehalam.linuxnetplumber.net>
Date: Mon, 10 Jun 2013 13:24:58 -0700
From: Stephen Hemminger <stephen@...workplumber.org>
To: davem@...emloft.net
Cc: netdev@...r.kernel.org,
Stephen Hemminger <stephen@...workplumber.org>
Subject: [PATCH net-next 01/12] vxlan: fix crash from work pending on module
removal
Switch to using a per module work queue so that all the socket
deletion callbacks are done when module is removed.
Signed-off-by: Stephen Hemminger <stephen@...workplumber.org>
--- a/drivers/net/vxlan.c 2013-06-10 12:19:51.278185763 -0700
+++ b/drivers/net/vxlan.c 2013-06-10 12:19:51.290185627 -0700
@@ -148,6 +148,7 @@ struct vxlan_dev {
/* salt for hash table */
static u32 vxlan_salt __read_mostly;
+static struct workqueue_struct *vxlan_wq;
/* Virtual Network hash table head */
static inline struct hlist_head *vni_head(struct vxlan_sock *vs, u32 id)
@@ -1645,7 +1646,7 @@ static void vxlan_dellink(struct net_dev
if (--vs->refcnt == 0) {
hlist_del_rcu(&vs->hlist);
- schedule_work(&vs->del_work);
+ queue_work(vxlan_wq, &vs->del_work);
}
}
@@ -1764,6 +1765,10 @@ static int __init vxlan_init_module(void
{
int rc;
+ vxlan_wq = alloc_workqueue("vxlan", 0, 0);
+ if (!vxlan_wq)
+ return -ENOMEM;
+
get_random_bytes(&vxlan_salt, sizeof(vxlan_salt));
rc = register_pernet_device(&vxlan_net_ops);
@@ -1779,6 +1784,7 @@ static int __init vxlan_init_module(void
out2:
unregister_pernet_device(&vxlan_net_ops);
out1:
+ destroy_workqueue(vxlan_wq);
return rc;
}
late_initcall(vxlan_init_module);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists