aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bluetooth/hci_sysfs.c')
-rw-r--r--net/bluetooth/hci_sysfs.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c
index 582d8877078c..95f7a7a544b4 100644
--- a/net/bluetooth/hci_sysfs.c
+++ b/net/bluetooth/hci_sysfs.c
@@ -88,14 +88,16 @@ static struct device_type bt_link = {
88static void add_conn(struct work_struct *work) 88static void add_conn(struct work_struct *work)
89{ 89{
90 struct hci_conn *conn = container_of(work, struct hci_conn, work_add); 90 struct hci_conn *conn = container_of(work, struct hci_conn, work_add);
91 struct hci_dev *hdev = conn->hdev;
91 92
92 /* ensure previous del is complete */ 93 dev_set_name(&conn->dev, "%s:%d", hdev->name, conn->handle);
93 flush_work(&conn->work_del);
94 94
95 if (device_add(&conn->dev) < 0) { 95 if (device_add(&conn->dev) < 0) {
96 BT_ERR("Failed to register connection device"); 96 BT_ERR("Failed to register connection device");
97 return; 97 return;
98 } 98 }
99
100 hci_dev_hold(hdev);
99} 101}
100 102
101/* 103/*
@@ -113,9 +115,6 @@ static void del_conn(struct work_struct *work)
113 struct hci_conn *conn = container_of(work, struct hci_conn, work_del); 115 struct hci_conn *conn = container_of(work, struct hci_conn, work_del);
114 struct hci_dev *hdev = conn->hdev; 116 struct hci_dev *hdev = conn->hdev;
115 117
116 /* ensure previous add is complete */
117 flush_work(&conn->work_add);
118
119 if (!device_is_registered(&conn->dev)) 118 if (!device_is_registered(&conn->dev))
120 return; 119 return;
121 120
@@ -131,6 +130,7 @@ static void del_conn(struct work_struct *work)
131 130
132 device_del(&conn->dev); 131 device_del(&conn->dev);
133 put_device(&conn->dev); 132 put_device(&conn->dev);
133
134 hci_dev_put(hdev); 134 hci_dev_put(hdev);
135} 135}
136 136
@@ -154,12 +154,8 @@ void hci_conn_init_sysfs(struct hci_conn *conn)
154 154
155void hci_conn_add_sysfs(struct hci_conn *conn) 155void hci_conn_add_sysfs(struct hci_conn *conn)
156{ 156{
157 struct hci_dev *hdev = conn->hdev;
158
159 BT_DBG("conn %p", conn); 157 BT_DBG("conn %p", conn);
160 158
161 dev_set_name(&conn->dev, "%s:%d", hdev->name, conn->handle);
162
163 queue_work(bt_workq, &conn->work_add); 159 queue_work(bt_workq, &conn->work_add);
164} 160}
165 161