Bluetooth: Use kthread API in bnep
authorSzymon Janc <szymon.janc@tieto.com>
Mon, 21 Mar 2011 13:20:00 +0000 (14:20 +0100)
committerGustavo F. Padovan <padovan@profusion.mobi>
Tue, 5 Apr 2011 15:40:47 +0000 (12:40 -0300)
kernel_thread() is a low-level implementation detail and
EXPORT_SYMBOL(kernel_thread) is scheduled for removal.
Use the <linux/kthread.h> API instead.

Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
net/bluetooth/bnep/bnep.h
net/bluetooth/bnep/core.c

index d768e0434ed8d96e79ecd378634d0604ceb8423d..8e6c06158f8ebf02268362d4286b4763813b4e0c 100644 (file)
@@ -155,7 +155,7 @@ struct bnep_session {
        unsigned int  role;
        unsigned long state;
        unsigned long flags;
-       atomic_t      killed;
+       struct task_struct *task;
 
        struct ethhdr eh;
        struct msghdr msg;
index 0a2e76bde54297bb54f9ae080c3f6d10472b0a54..ca39fcf010ce3353e73312f4172f32c9ce12cb1f 100644 (file)
@@ -36,6 +36,7 @@
 #include <linux/errno.h>
 #include <linux/net.h>
 #include <linux/slab.h>
+#include <linux/kthread.h>
 #include <net/sock.h>
 
 #include <linux/socket.h>
@@ -479,12 +480,11 @@ static int bnep_session(void *arg)
 
        BT_DBG("");
 
-       daemonize("kbnepd %s", dev->name);
        set_user_nice(current, -15);
 
        init_waitqueue_entry(&wait, current);
        add_wait_queue(sk_sleep(sk), &wait);
-       while (!atomic_read(&s->killed)) {
+       while (!kthread_should_stop()) {
                set_current_state(TASK_INTERRUPTIBLE);
 
                /* RX */
@@ -611,11 +611,12 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
 
        __bnep_link_session(s);
 
-       err = kernel_thread(bnep_session, s, CLONE_KERNEL);
-       if (err < 0) {
+       s->task = kthread_run(bnep_session, s, "kbnepd %s", dev->name);
+       if (IS_ERR(s->task)) {
                /* Session thread start failed, gotta cleanup. */
                unregister_netdev(dev);
                __bnep_unlink_session(s);
+               err = PTR_ERR(s->task);
                goto failed;
        }
 
@@ -639,15 +640,9 @@ int bnep_del_connection(struct bnep_conndel_req *req)
        down_read(&bnep_session_sem);
 
        s = __bnep_get_session(req->dst);
-       if (s) {
-               /* Wakeup user-space which is polling for socket errors.
-                * This is temporary hack until we have shutdown in L2CAP */
-               s->sock->sk->sk_err = EUNATCH;
-
-               /* Kill session thread */
-               atomic_inc(&s->killed);
-               wake_up_interruptible(sk_sleep(s->sock->sk));
-       } else
+       if (s)
+               kthread_stop(s->task);
+       else
                err = -ENOENT;
 
        up_read(&bnep_session_sem);