Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluet...
authorDavid S. Miller <davem@davemloft.net>
Sat, 16 May 2009 20:46:06 +0000 (13:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 16 May 2009 20:46:06 +0000 (13:46 -0700)
net/bluetooth/hci_conn.c
net/bluetooth/hci_event.c
net/bluetooth/hci_sysfs.c

index 61309b2..fa47d5d 100644 (file)
@@ -171,10 +171,8 @@ static void hci_conn_timeout(unsigned long arg)
        switch (conn->state) {
        case BT_CONNECT:
        case BT_CONNECT2:
-               if (conn->type == ACL_LINK)
+               if (conn->type == ACL_LINK && conn->out)
                        hci_acl_connect_cancel(conn);
-               else
-                       hci_acl_disconn(conn, 0x13);
                break;
        case BT_CONFIG:
        case BT_CONNECTED:
@@ -292,6 +290,8 @@ int hci_conn_del(struct hci_conn *conn)
 
        hci_conn_del_sysfs(conn);
 
+       hci_dev_put(hdev);
+
        return 0;
 }
 
index 4e7cb88..184ba0a 100644 (file)
@@ -1493,7 +1493,7 @@ static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff
        hci_dev_lock(hdev);
 
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
-       if (conn) {
+       if (conn && conn->state == BT_CONNECTED) {
                hci_conn_hold(conn);
                conn->disc_timeout = HCI_PAIRING_TIMEOUT;
                hci_conn_put(conn);
index a05d45e..4cc3624 100644 (file)
@@ -99,6 +99,8 @@ static void add_conn(struct work_struct *work)
                BT_ERR("Failed to register connection device");
                return;
        }
+
+       hci_dev_hold(hdev);
 }
 
 /*
@@ -134,6 +136,7 @@ static void del_conn(struct work_struct *work)
 
        device_del(&conn->dev);
        put_device(&conn->dev);
+
        hci_dev_put(hdev);
 }