Commit 2d8331792ea3f5ccfd147288afba148537337019

Authored by Evgeniy Polyakov
Committed by Greg Kroah-Hartman
1 parent 1b11d78cf8

[PATCH] W1: w1_netlink: New init/fini netlink callbacks.

They are guarded with NETLINK_DISABLE compile time options,
so if CONFIG_NET is disabled, no linking errors occur.
Bug noticed by Adrian Bunk <bunk@stusta.de>.

Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Showing 3 changed files with 34 additions and 10 deletions Side-by-side Diff

... ... @@ -88,17 +88,14 @@
88 88  
89 89 dev->groups = 1;
90 90 dev->seq = 1;
91   - dev->nls = netlink_kernel_create(NETLINK_W1, 1, NULL, THIS_MODULE);
92   - if (!dev->nls) {
93   - printk(KERN_ERR "Failed to create new netlink socket(%u) for w1 master %s.\n",
94   - NETLINK_NFLOG, dev->dev.bus_id);
95   - }
  91 + dev_init_netlink(dev);
96 92  
97 93 err = device_register(&dev->dev);
98 94 if (err) {
99 95 printk(KERN_ERR "Failed to register master device. err=%d\n", err);
100   - if (dev->nls && dev->nls->sk_socket)
101   - sock_release(dev->nls->sk_socket);
  96 +
  97 + dev_fini_netlink(dev);
  98 +
102 99 memset(dev, 0, sizeof(struct w1_master));
103 100 kfree(dev);
104 101 dev = NULL;
105 102  
... ... @@ -107,11 +104,10 @@
107 104 return dev;
108 105 }
109 106  
110   -static void w1_free_dev(struct w1_master *dev)
  107 +void w1_free_dev(struct w1_master *dev)
111 108 {
112 109 device_unregister(&dev->dev);
113   - if (dev->nls && dev->nls->sk_socket)
114   - sock_release(dev->nls->sk_socket);
  110 + dev_fini_netlink(dev);
115 111 memset(dev, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master));
116 112 kfree(dev);
117 113 }
drivers/w1/w1_netlink.c
... ... @@ -57,10 +57,36 @@
57 57 nlmsg_failure:
58 58 return;
59 59 }
  60 +
  61 +int dev_init_netlink(struct w1_master *dev)
  62 +{
  63 + dev->nls = netlink_kernel_create(NETLINK_W1, 1, NULL, THIS_MODULE);
  64 + if (!dev->nls) {
  65 + printk(KERN_ERR "Failed to create new netlink socket(%u) for w1 master %s.\n",
  66 + NETLINK_W1, dev->dev.bus_id);
  67 + }
  68 +
  69 + return 0;
  70 +}
  71 +
  72 +void dev_fini_netlink(struct w1_master *dev)
  73 +{
  74 + if (dev->nls && dev->nls->sk_socket)
  75 + sock_release(dev->nls->sk_socket);
  76 +}
60 77 #else
61 78 #warning Netlink support is disabled. Please compile with NET support enabled.
62 79  
63 80 void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg)
  81 +{
  82 +}
  83 +
  84 +int dev_init_netlink(struct w1_master *dev)
  85 +{
  86 + return 0;
  87 +}
  88 +
  89 +void dev_fini_netlink(struct w1_master *dev)
64 90 {
65 91 }
66 92 #endif
drivers/w1/w1_netlink.h
... ... @@ -52,6 +52,8 @@
52 52 #ifdef __KERNEL__
53 53  
54 54 void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *);
  55 +int dev_init_netlink(struct w1_master *dev);
  56 +void dev_fini_netlink(struct w1_master *dev);
55 57  
56 58 #endif /* __KERNEL__ */
57 59 #endif /* __W1_NETLINK_H */