Commit d6cc7f1a authored by Evgeniy Polyakov's avatar Evgeniy Polyakov Committed by David S. Miller

[CONNECTOR]: Initialize subsystem earlier.

Attached patch declares connector init function as subsys_init()
and returns -EAGAIN in case connector is not initialized yet.
Signed-off-by: default avatarEvgeniy Polyakov <johnpol@2ka.mipt.ru>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d3dcd4ef
...@@ -308,6 +308,9 @@ int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *)) ...@@ -308,6 +308,9 @@ int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *))
int err; int err;
struct cn_dev *dev = &cdev; struct cn_dev *dev = &cdev;
if (!cn_already_initialized)
return -EAGAIN;
err = cn_queue_add_callback(dev->cbdev, name, id, callback); err = cn_queue_add_callback(dev->cbdev, name, id, callback);
if (err) if (err)
return err; return err;
...@@ -435,7 +438,7 @@ static void cn_callback(void *data) ...@@ -435,7 +438,7 @@ static void cn_callback(void *data)
mutex_unlock(&notify_lock); mutex_unlock(&notify_lock);
} }
static int __init cn_init(void) static int __devinit cn_init(void)
{ {
struct cn_dev *dev = &cdev; struct cn_dev *dev = &cdev;
int err; int err;
...@@ -457,20 +460,21 @@ static int __init cn_init(void) ...@@ -457,20 +460,21 @@ static int __init cn_init(void)
return -EINVAL; return -EINVAL;
} }
cn_already_initialized = 1;
err = cn_add_callback(&dev->id, "connector", &cn_callback); err = cn_add_callback(&dev->id, "connector", &cn_callback);
if (err) { if (err) {
cn_already_initialized = 0;
cn_queue_free_dev(dev->cbdev); cn_queue_free_dev(dev->cbdev);
if (dev->nls->sk_socket) if (dev->nls->sk_socket)
sock_release(dev->nls->sk_socket); sock_release(dev->nls->sk_socket);
return -EINVAL; return -EINVAL;
} }
cn_already_initialized = 1;
return 0; return 0;
} }
static void __exit cn_fini(void) static void __devexit cn_fini(void)
{ {
struct cn_dev *dev = &cdev; struct cn_dev *dev = &cdev;
...@@ -482,7 +486,7 @@ static void __exit cn_fini(void) ...@@ -482,7 +486,7 @@ static void __exit cn_fini(void)
sock_release(dev->nls->sk_socket); sock_release(dev->nls->sk_socket);
} }
module_init(cn_init); subsys_initcall(cn_init);
module_exit(cn_fini); module_exit(cn_fini);
EXPORT_SYMBOL_GPL(cn_add_callback); EXPORT_SYMBOL_GPL(cn_add_callback);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment