aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kobject_uevent.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kobject_uevent.c')
-rw-r--r--lib/kobject_uevent.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c
index 9539d7ab3ea8..54cfbaeb3a4e 100644
--- a/lib/kobject_uevent.c
+++ b/lib/kobject_uevent.c
@@ -32,11 +32,13 @@ u64 uevent_seqnum;
32#ifdef CONFIG_UEVENT_HELPER 32#ifdef CONFIG_UEVENT_HELPER
33char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH; 33char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH;
34#endif 34#endif
35#ifdef CONFIG_NET 35
36struct uevent_sock { 36struct uevent_sock {
37 struct list_head list; 37 struct list_head list;
38 struct sock *sk; 38 struct sock *sk;
39}; 39};
40
41#ifdef CONFIG_NET
40static LIST_HEAD(uevent_sock_list); 42static LIST_HEAD(uevent_sock_list);
41#endif 43#endif
42 44
@@ -621,6 +623,9 @@ static int uevent_net_init(struct net *net)
621 kfree(ue_sk); 623 kfree(ue_sk);
622 return -ENODEV; 624 return -ENODEV;
623 } 625 }
626
627 net->uevent_sock = ue_sk;
628
624 mutex_lock(&uevent_sock_mutex); 629 mutex_lock(&uevent_sock_mutex);
625 list_add_tail(&ue_sk->list, &uevent_sock_list); 630 list_add_tail(&ue_sk->list, &uevent_sock_list);
626 mutex_unlock(&uevent_sock_mutex); 631 mutex_unlock(&uevent_sock_mutex);
@@ -629,17 +634,9 @@ static int uevent_net_init(struct net *net)
629 634
630static void uevent_net_exit(struct net *net) 635static void uevent_net_exit(struct net *net)
631{ 636{
632 struct uevent_sock *ue_sk; 637 struct uevent_sock *ue_sk = net->uevent_sock;
633 638
634 mutex_lock(&uevent_sock_mutex); 639 mutex_lock(&uevent_sock_mutex);
635 list_for_each_entry(ue_sk, &uevent_sock_list, list) {
636 if (sock_net(ue_sk->sk) == net)
637 goto found;
638 }
639 mutex_unlock(&uevent_sock_mutex);
640 return;
641
642found:
643 list_del(&ue_sk->list); 640 list_del(&ue_sk->list);
644 mutex_unlock(&uevent_sock_mutex); 641 mutex_unlock(&uevent_sock_mutex);
645 642