Hi Anderson, * Anderson Lizardo <anderson.lizardo@xxxxxxxxxxxxx> [2010-11-24 11:13:30 -0400]: > Hi Marcel, > > On Wed, Nov 24, 2010 at 8:42 AM, Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote: > >> diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c > >> index 18a802c..7980e24 100644 > >> --- a/net/bluetooth/l2cap.c > >> +++ b/net/bluetooth/l2cap.c > >> @@ -4875,8 +4875,10 @@ static int __init l2cap_init(void) > >> return err; > >> > >> _busy_wq = create_singlethread_workqueue("l2cap"); > >> - if (!_busy_wq) > >> - goto error; > >> + if (!_busy_wq) { > >> + err = -ENOMEM; > >> + goto error_busy_wq; > >> + } > > > > aren't these returning PTR_ERR etc.? > > No, create_singlethread_workqueue() is just a wrapper around > __alloc_workqueue_key(), which returns eiter a kzalloc()'ed pointer, > or NULL on error. There is no way to get the actual reason of the > error, but by taking a look at the function we can see most (if not > all) errors are -ENOMEM. Thus why I used it here. > > Padovan: so how to proceed here: keep the patch as is and keep > semantics, of make your proposed changes (with a slightly risk of a > race condition and having _busy_wq NULL) ? I'm not sure that my idea is right, so I have another option here. On create_singlethread_workqueue error, just call proto_unregister() and then return -ENOMEM, and destroy your workqueue under the label error. This way we avoid create a new label and also have a simple error handling there. -- Gustavo F. Padovan http://profusion.mobi -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html