bluetooth: hci_sysfs work queue problem

Previous thread: [PATCH] Version 3 (2.6.23-rc8) Smack: Simplified Mandatory Access Control Kernel by Casey Schaufler on Saturday, September 29, 2007 - 8:20 pm. (79 messages)

Next thread: [PATCH] Tweak Documentation/SM501.txt by Rob Landley on Saturday, September 29, 2007 - 11:15 pm. (2 messages)
To: Marcel Holtmann <marcel@...>
Cc: <bluez-devel@...>, LKML <linux-kernel@...>
Date: Saturday, September 29, 2007 - 9:46 pm

Hi,
The hci_sysfs uses work queue to finish the sysfs add/del fuction.
But when the same device connection failed, if another connection of
same device come in before the delete work finish, sysfs will warn
about duplicate filename creating.

Sep 19 12:30:27 darkstar kernel: sysfs: duplicate filename
'acl00194FDB6C71' can not be created
Sep 19 12:30:27 darkstar kernel: WARNING: at fs/sysfs/dir.c:433 sysfs_add_one()
Sep 19 12:30:27 darkstar kernel: [<c01c3ad0>] sysfs_add_one+0xa0/0xe0
Sep 19 12:30:27 darkstar kernel: [<c01c3e38>] create_dir+0x48/0xb0
Sep 19 12:30:27 darkstar kernel: [<c0178df5>] __slab_alloc+0x205/0x250
Sep 19 12:30:27 darkstar kernel: [<c01c3ee9>] sysfs_create_dir+0x29/0x50
Sep 19 12:30:27 darkstar kernel: [<c024cf5b>] create_dir+0x1b/0x50
Sep 19 12:30:27 darkstar kernel: [<c024d226>] kobject_add+0x46/0x150
Sep 19 12:30:27 darkstar kernel: [<c024d404>] kobject_set_name+0x84/0xf0
Sep 19 12:30:27 darkstar kernel: [<c02b7035>] device_add+0x95/0x350
Sep 19 12:30:27 darkstar kernel: [<f88aec60>] add_conn+0x0/0x90 [bluetooth]
Sep 19 12:30:27 darkstar kernel: [<f88aec6f>] add_conn+0xf/0x90 [bluetooth]
Sep 19 12:30:27 darkstar kernel: [<c01663d0>] vmstat_update+0x0/0x30
Sep 19 12:30:27 darkstar kernel: [<c013bdfe>] run_workqueue+0x5e/0x110
Sep 19 12:30:27 darkstar kernel: [<c013bf5c>] worker_thread+0xac/0x100
Sep 19 12:30:27 darkstar kernel: [<c0140340>] autoremove_wake_function+0x0/0x50
Sep 19 12:30:27 darkstar kernel: [<c0140340>] autoremove_wake_function+0x0/0x50
Sep 19 12:30:27 darkstar kernel: [<c013beb0>] worker_thread+0x0/0x100
Sep 19 12:30:27 darkstar kernel: [<c013fd49>] kthread+0x59/0xa0
Sep 19 12:30:27 darkstar kernel: [<c013fcf0>] kthread+0x0/0xa0
Sep 19 12:30:27 darkstar kernel: [<c0104fb3>] kernel_thread_helper+0x7/0x14
Sep 19 12:30:27 darkstar kernel: =======================
Sep 19 12:30:27 darkstar kernel: kobject_add failed for...

To: Dave Young <hidave.darkstar@...>
Cc: <bluez-devel@...>, LKML <linux-kernel@...>
Date: Monday, October 1, 2007 - 5:45 am

which kernel are we talking about. This problem should not exist
anymore. However the usage of a work queue is unavoidable.

Regards

Marcel

-

To: Marcel Holtmann <marcel@...>
Cc: <bluez-devel@...>, LKML <linux-kernel@...>
Date: Sunday, October 28, 2007 - 11:36 pm

Recently, I encounted this issue again:
Oct 26 16:57:00 darkstar kernel: sysfs: duplicate filename
'acl00194FA4E517' can not be created
Oct 26 16:57:00 darkstar kernel: WARNING: at fs/sysfs/dir.c:424 sysfs_add_one()
Oct 26 16:57:00 darkstar kernel: [<c01c0120>] sysfs_add_one+0xa0/0xe0
Oct 26 16:57:00 darkstar kernel: [<c01c0d7b>] sysfs_create_link+0x9b/0x140
Oct 26 16:57:00 darkstar kernel: [<c01c1671>] create_files+0x31/0x60
Oct 26 16:57:00 darkstar kernel: [<c02b537b>] bus_add_device+0x5b/0xf0
Oct 26 16:57:00 darkstar kernel: [<c02b391c>] device_add+0x11c/0x350
Oct 26 16:57:00 darkstar kernel: [<f8879410>] add_conn+0x0/0x90 [bluetooth]
Oct 26 16:57:00 darkstar kernel: [<f887941f>] add_conn+0xf/0x90 [bluetooth]
Oct 26 16:57:00 darkstar kernel: [<c013baee>] run_workqueue+0x5e/0x110
Oct 26 16:57:00 darkstar kernel: [<c013bc4c>] worker_thread+0xac/0x100
Oct 26 16:57:00 darkstar kernel: [<c0140000>] autoremove_wake_function+0x0/0x50
Oct 26 16:57:00 darkstar kernel: [<c0140000>] autoremove_wake_function+0x0/0x50
Oct 26 16:57:00 darkstar kernel: [<c013bba0>] worker_thread+0x0/0x100
Oct 26 16:57:00 darkstar kernel: [<c013fa39>] kthread+0x59/0xa0
Oct 26 16:57:00 darkstar kernel: [<c013f9e0>] kthread+0x0/0xa0
Oct 26 16:57:00 darkstar kernel: [<c0104f83>] kernel_thread_helper+0x7/0x14
Oct 26 16:57:00 darkstar kernel: =======================
Oct 26 16:57:00 darkstar kernel: add_conn: Failed to register connection device

Seems same problem as before. This time, I just used several rfcomm
connections.
I think if we can add an atomic variable 'going_away' like this:
in hci_conn_del_sysfs:
before INIT_WORK;
atomic_set(&going_away, 1)

in del_conn:
after deleting completed
atomic_set(&going_away, 0)

in add_conn:
busy waiting the going_away
while (atomic_read(&going_away))
cpu_relax()

Regards
-

Previous thread: [PATCH] Version 3 (2.6.23-rc8) Smack: Simplified Mandatory Access Control Kernel by Casey Schaufler on Saturday, September 29, 2007 - 8:20 pm. (79 messages)

Next thread: [PATCH] Tweak Documentation/SM501.txt by Rob Landley on Saturday, September 29, 2007 - 11:15 pm. (2 messages)