Skip to content

Commit

Permalink
[CONNECTOR]: Initialize subsystem earlier.
Browse files Browse the repository at this point in the history
Attached patch declares connector init function as subsys_init()
and returns -EAGAIN in case connector is not initialized yet.

Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Evgeniy Polyakov authored and David S. Miller committed Jun 20, 2006
1 parent d3dcd4e commit d6cc7f1
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions drivers/connector/connector.c
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,9 @@ int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *))
int err;
struct cn_dev *dev = &cdev;

if (!cn_already_initialized)
return -EAGAIN;

err = cn_queue_add_callback(dev->cbdev, name, id, callback);
if (err)
return err;
Expand Down Expand Up @@ -435,7 +438,7 @@ static void cn_callback(void *data)
mutex_unlock(&notify_lock);
}

static int __init cn_init(void)
static int __devinit cn_init(void)
{
struct cn_dev *dev = &cdev;
int err;
Expand All @@ -456,21 +459,22 @@ static int __init cn_init(void)
sock_release(dev->nls->sk_socket);
return -EINVAL;
}

cn_already_initialized = 1;

err = cn_add_callback(&dev->id, "connector", &cn_callback);
if (err) {
cn_already_initialized = 0;
cn_queue_free_dev(dev->cbdev);
if (dev->nls->sk_socket)
sock_release(dev->nls->sk_socket);
return -EINVAL;
}

cn_already_initialized = 1;

return 0;
}

static void __exit cn_fini(void)
static void __devexit cn_fini(void)
{
struct cn_dev *dev = &cdev;

Expand All @@ -482,7 +486,7 @@ static void __exit cn_fini(void)
sock_release(dev->nls->sk_socket);
}

module_init(cn_init);
subsys_initcall(cn_init);
module_exit(cn_fini);

EXPORT_SYMBOL_GPL(cn_add_callback);
Expand Down

0 comments on commit d6cc7f1

Please sign in to comment.