Re: [PATCH retry] bluetooth : add conn add/del workqueues to avoid connection fail
From: David Miller <davem@davemloft.net>
Date: 2008-02-01 02:33:48
Also in:
lkml
From: Dave Young <redacted> Date: Fri, 1 Feb 2008 09:24:41 +0800
On Thu, Jan 31, 2008 at 02:09:30PM +0100, Jens Axboe wrote:quoted
On Wed, Jan 30 2008, Dave Young wrote:quoted
The bluetooth hci_conn sysfs add/del executed in the default workqueue. If the del_conn is executed after the new add_conn with same target, add_conn will failed with warning of "same kobject name". Here add btaddconn & btdelconn workqueues, flush the btdelconn workqueue in the add_conn function to avoid the issue. Signed-off-by: Dave Young <redacted> --- diff -upr a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c--- a/net/bluetooth/hci_sysfs.c 2008-01-30 10:14:27.000000000 +0800 +++ b/net/bluetooth/hci_sysfs.c 2008-01-30 10:14:14.000000000 +0800@@ -12,6 +12,8 @@ #undef BT_DBG #define BT_DBG(D...) #endif +static struct workqueue_struct *btaddconn; +static struct workqueue_struct *btdelconn; static inline char *typetostr(int type) {@@ -279,6 +281,7 @@ static void add_conn(struct work_struct struct hci_conn *conn = container_of(work, struct hci_conn, work); int i; + flush_workqueue(btdelconn); if (device_add(&conn->dev) < 0) { BT_ERR("Failed to register connection device"); return;@@ -313,6 +316,7 @@ void hci_conn_add_sysfs(struct hci_conn INIT_WORK(&conn->work, add_conn); + queue_work(btaddconn, &conn->work); schedule_work(&conn->work); }So you queue &conn->work on both btaddconn and keventd_wq?My fault. Thanks for pointing out. new patch as following (some fixes according to marcel's style as well)
Your original patch was already in the tree, so I just checked in the relative changes. Please don't me do this next time :-) ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/