<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/net/bluetooth/rfcomm, branch v2.6.26</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>bluetooth: rfcomm_dev_state_change deadlock fix</title>
<updated>2008-06-03T21:27:17+00:00</updated>
<author>
<name>Dave Young</name>
<email>hidave.darkstar@gmail.com</email>
</author>
<published>2008-06-02T06:50:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=537d59af73d894750cff14f90fe2b6d77fbab15b'/>
<id>537d59af73d894750cff14f90fe2b6d77fbab15b</id>
<content type='text'>
There's logic in __rfcomm_dlc_close:
	rfcomm_dlc_lock(d);
	d-&gt;state = BT_CLOSED;
	d-&gt;state_changed(d, err);
	rfcomm_dlc_unlock(d);

In rfcomm_dev_state_change, it's possible that rfcomm_dev_put try to
take the dlc lock, then we will deadlock.

Here fixed it by unlock dlc before rfcomm_dev_get in
rfcomm_dev_state_change.

why not unlock just before rfcomm_dev_put? it's because there's
another problem.  rfcomm_dev_get/rfcomm_dev_del will take
rfcomm_dev_lock, but in rfcomm_dev_add the lock order is :
rfcomm_dev_lock --&gt; dlc lock

so I unlock dlc before the taken of rfcomm_dev_lock.

Actually it's a regression caused by commit
1905f6c736cb618e07eca0c96e60e3c024023428 ("bluetooth :
__rfcomm_dlc_close lock fix"), the dlc state_change could be two
callbacks : rfcomm_sk_state_change and rfcomm_dev_state_change. I
missed the rfcomm_sk_state_change that time.

Thanks Arjan van de Ven &lt;arjan@linux.intel.com&gt; for the effort in
commit 4c8411f8c115def968820a4df6658ccfd55d7f1a ("bluetooth: fix
locking bug in the rfcomm socket cleanup handling") but he missed the
rfcomm_dev_state_change lock issue.

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Acked-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There's logic in __rfcomm_dlc_close:
	rfcomm_dlc_lock(d);
	d-&gt;state = BT_CLOSED;
	d-&gt;state_changed(d, err);
	rfcomm_dlc_unlock(d);

In rfcomm_dev_state_change, it's possible that rfcomm_dev_put try to
take the dlc lock, then we will deadlock.

Here fixed it by unlock dlc before rfcomm_dev_get in
rfcomm_dev_state_change.

why not unlock just before rfcomm_dev_put? it's because there's
another problem.  rfcomm_dev_get/rfcomm_dev_del will take
rfcomm_dev_lock, but in rfcomm_dev_add the lock order is :
rfcomm_dev_lock --&gt; dlc lock

so I unlock dlc before the taken of rfcomm_dev_lock.

Actually it's a regression caused by commit
1905f6c736cb618e07eca0c96e60e3c024023428 ("bluetooth :
__rfcomm_dlc_close lock fix"), the dlc state_change could be two
callbacks : rfcomm_sk_state_change and rfcomm_dev_state_change. I
missed the rfcomm_sk_state_change that time.

Thanks Arjan van de Ven &lt;arjan@linux.intel.com&gt; for the effort in
commit 4c8411f8c115def968820a4df6658ccfd55d7f1a ("bluetooth: fix
locking bug in the rfcomm socket cleanup handling") but he missed the
rfcomm_dev_state_change lock issue.

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Acked-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bluetooth: fix locking bug in the rfcomm socket cleanup handling</title>
<updated>2008-05-29T08:32:47+00:00</updated>
<author>
<name>Arjan van de Ven</name>
<email>arjan@linux.intel.com</email>
</author>
<published>2008-05-29T08:32:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=4c8411f8c115def968820a4df6658ccfd55d7f1a'/>
<id>4c8411f8c115def968820a4df6658ccfd55d7f1a</id>
<content type='text'>
in net/bluetooth/rfcomm/sock.c, rfcomm_sk_state_change() does the
following operation:

        if (parent &amp;&amp; sock_flag(sk, SOCK_ZAPPED)) {
                /* We have to drop DLC lock here, otherwise
                 * rfcomm_sock_destruct() will dead lock. */
                rfcomm_dlc_unlock(d);
                rfcomm_sock_kill(sk);
                rfcomm_dlc_lock(d);
        }
}

which is fine, since rfcomm_sock_kill() will call sk_free() which will call
rfcomm_sock_destruct() which takes the rfcomm_dlc_lock()... so far so good.

HOWEVER, this assumes that the rfcomm_sk_state_change() function always gets
called with the rfcomm_dlc_lock() taken. This is the case for all but one
case, and in that case where we don't have the lock, we do a double unlock
followed by an attempt to take the lock, which due to underflow isn't
going anywhere fast.

This patch fixes this by moving the stragling case inside the lock, like
the other usages of the same call are doing in this code.

This was found with the help of the www.kerneloops.org project, where this
deadlock was observed 51 times at this point in time:
http://www.kerneloops.org/search.php?search=rfcomm_sock_destruct

Signed-off-by: Arjan van de Ven &lt;arjan@linux.intel.com&gt;
Acked-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
in net/bluetooth/rfcomm/sock.c, rfcomm_sk_state_change() does the
following operation:

        if (parent &amp;&amp; sock_flag(sk, SOCK_ZAPPED)) {
                /* We have to drop DLC lock here, otherwise
                 * rfcomm_sock_destruct() will dead lock. */
                rfcomm_dlc_unlock(d);
                rfcomm_sock_kill(sk);
                rfcomm_dlc_lock(d);
        }
}

which is fine, since rfcomm_sock_kill() will call sk_free() which will call
rfcomm_sock_destruct() which takes the rfcomm_dlc_lock()... so far so good.

HOWEVER, this assumes that the rfcomm_sk_state_change() function always gets
called with the rfcomm_dlc_lock() taken. This is the case for all but one
case, and in that case where we don't have the lock, we do a double unlock
followed by an attempt to take the lock, which due to underflow isn't
going anywhere fast.

This patch fixes this by moving the stragling case inside the lock, like
the other usages of the same call are doing in this code.

This was found with the help of the www.kerneloops.org project, where this
deadlock was observed 51 times at this point in time:
http://www.kerneloops.org/search.php?search=rfcomm_sock_destruct

Signed-off-by: Arjan van de Ven &lt;arjan@linux.intel.com&gt;
Acked-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6</title>
<updated>2008-04-03T05:35:23+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2008-04-03T05:35:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=e1ec1b8ccdf0df6000faa8c2d985ca5f94157e5a'/>
<id>e1ec1b8ccdf0df6000faa8c2d985ca5f94157e5a</id>
<content type='text'>
Conflicts:

	drivers/net/s2io.c
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Conflicts:

	drivers/net/s2io.c
</pre>
</div>
</content>
</entry>
<entry>
<title>bluetooth : __rfcomm_dlc_close lock fix</title>
<updated>2008-04-02T06:59:06+00:00</updated>
<author>
<name>Dave Young</name>
<email>hidave.darkstar@gmail.com</email>
</author>
<published>2008-04-02T06:59:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=1905f6c736cb618e07eca0c96e60e3c024023428'/>
<id>1905f6c736cb618e07eca0c96e60e3c024023428</id>
<content type='text'>
Lockdep warning will be trigged while rfcomm connection closing.

The locks taken in rfcomm_dev_add:
rfcomm_dev_lock --&gt; d-&gt;lock

In __rfcomm_dlc_close:
d-&gt;lock --&gt; rfcomm_dev_lock (in rfcomm_dev_state_change)

There's two way to fix it, one is in rfcomm_dev_add we first locking
d-&gt;lock then the rfcomm_dev_lock

The other (in this patch), remove the locking of d-&gt;lock for
rfcomm_dev_state_change because just locking "d-&gt;state = BT_CLOSED;"
is enough.

[  295.002046] =======================================================
[  295.002046] [ INFO: possible circular locking dependency detected ]
[  295.002046] 2.6.25-rc7 #1
[  295.002046] -------------------------------------------------------
[  295.002046] krfcommd/2705 is trying to acquire lock:
[  295.002046]  (rfcomm_dev_lock){-.--}, at: [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] but task is already holding lock:
[  295.002046]  (&amp;d-&gt;lock){--..}, at: [&lt;f899c533&gt;] __rfcomm_dlc_close+0x43/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] which lock already depends on the new lock.
[  295.002046] 
[  295.002046] 
[  295.002046] the existing dependency chain (in reverse order) is:
[  295.002046] 
[  295.002046] -&gt; #1 (&amp;d-&gt;lock){--..}:
[  295.002046]        [&lt;c0149b23&gt;] check_prev_add+0xd3/0x200
[  295.002046]        [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]        [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]        [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]        [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]        [&lt;c03d6b99&gt;] _spin_lock+0x39/0x80
[  295.002046]        [&lt;f89a01c0&gt;] rfcomm_dev_add+0x240/0x360 [rfcomm]
[  295.002046]        [&lt;f89a047e&gt;] rfcomm_create_dev+0x6e/0xe0 [rfcomm]
[  295.002046]        [&lt;f89a0823&gt;] rfcomm_dev_ioctl+0x33/0x60 [rfcomm]
[  295.002046]        [&lt;f899facc&gt;] rfcomm_sock_ioctl+0x2c/0x50 [rfcomm]
[  295.002046]        [&lt;c0363d38&gt;] sock_ioctl+0x118/0x240
[  295.002046]        [&lt;c0194196&gt;] vfs_ioctl+0x76/0x90
[  295.002046]        [&lt;c0194446&gt;] do_vfs_ioctl+0x56/0x140
[  295.002046]        [&lt;c0194569&gt;] sys_ioctl+0x39/0x60
[  295.002046]        [&lt;c0104faa&gt;] syscall_call+0x7/0xb
[  295.002046]        [&lt;ffffffff&gt;] 0xffffffff
[  295.002046] 
[  295.002046] -&gt; #0 (rfcomm_dev_lock){-.--}:
[  295.002046]        [&lt;c0149a84&gt;] check_prev_add+0x34/0x200
[  295.002046]        [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]        [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]        [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]        [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]        [&lt;c03d6639&gt;] _read_lock+0x39/0x80
[  295.002046]        [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]        [&lt;f899c548&gt;] __rfcomm_dlc_close+0x58/0xd0 [rfcomm]
[  295.002046]        [&lt;f899d44f&gt;] rfcomm_recv_ua+0x6f/0x120 [rfcomm]
[  295.002046]        [&lt;f899e061&gt;] rfcomm_recv_frame+0x171/0x1e0 [rfcomm]
[  295.002046]        [&lt;f899e357&gt;] rfcomm_run+0xe7/0x550 [rfcomm]
[  295.002046]        [&lt;c013c18c&gt;] kthread+0x5c/0xa0
[  295.002046]        [&lt;c0105c07&gt;] kernel_thread_helper+0x7/0x10
[  295.002046]        [&lt;ffffffff&gt;] 0xffffffff
[  295.002046] 
[  295.002046] other info that might help us debug this:
[  295.002046] 
[  295.002046] 2 locks held by krfcommd/2705:
[  295.002046]  #0:  (rfcomm_mutex){--..}, at: [&lt;f899e2eb&gt;] rfcomm_run+0x7b/0x550 [rfcomm]
[  295.002046]  #1:  (&amp;d-&gt;lock){--..}, at: [&lt;f899c533&gt;] __rfcomm_dlc_close+0x43/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] stack backtrace:
[  295.002046] Pid: 2705, comm: krfcommd Not tainted 2.6.25-rc7 #1
[  295.002046]  [&lt;c0128a38&gt;] ? printk+0x18/0x20
[  295.002046]  [&lt;c014927f&gt;] print_circular_bug_tail+0x6f/0x80
[  295.002046]  [&lt;c0149a84&gt;] check_prev_add+0x34/0x200
[  295.002046]  [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]  [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]  [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]  [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]  [&lt;f89a090a&gt;] ? rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;c03d6639&gt;] _read_lock+0x39/0x80
[  295.002046]  [&lt;f89a090a&gt;] ? rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;f899c548&gt;] __rfcomm_dlc_close+0x58/0xd0 [rfcomm]
[  295.002046]  [&lt;f899d44f&gt;] rfcomm_recv_ua+0x6f/0x120 [rfcomm]
[  295.002046]  [&lt;f899e061&gt;] rfcomm_recv_frame+0x171/0x1e0 [rfcomm]
[  295.002046]  [&lt;c014abd9&gt;] ? trace_hardirqs_on+0xb9/0x130
[  295.002046]  [&lt;c03d6e89&gt;] ? _spin_unlock_irqrestore+0x39/0x70
[  295.002046]  [&lt;f899e357&gt;] rfcomm_run+0xe7/0x550 [rfcomm]
[  295.002046]  [&lt;c03d4559&gt;] ? __sched_text_start+0x229/0x4c0
[  295.002046]  [&lt;c0120000&gt;] ? cpu_avg_load_per_task+0x20/0x30
[  295.002046]  [&lt;f899e270&gt;] ? rfcomm_run+0x0/0x550 [rfcomm]
[  295.002046]  [&lt;c013c18c&gt;] kthread+0x5c/0xa0
[  295.002046]  [&lt;c013c130&gt;] ? kthread+0x0/0xa0
[  295.002046]  [&lt;c0105c07&gt;] kernel_thread_helper+0x7/0x10
[  295.002046]  =======================

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Lockdep warning will be trigged while rfcomm connection closing.

The locks taken in rfcomm_dev_add:
rfcomm_dev_lock --&gt; d-&gt;lock

In __rfcomm_dlc_close:
d-&gt;lock --&gt; rfcomm_dev_lock (in rfcomm_dev_state_change)

There's two way to fix it, one is in rfcomm_dev_add we first locking
d-&gt;lock then the rfcomm_dev_lock

The other (in this patch), remove the locking of d-&gt;lock for
rfcomm_dev_state_change because just locking "d-&gt;state = BT_CLOSED;"
is enough.

[  295.002046] =======================================================
[  295.002046] [ INFO: possible circular locking dependency detected ]
[  295.002046] 2.6.25-rc7 #1
[  295.002046] -------------------------------------------------------
[  295.002046] krfcommd/2705 is trying to acquire lock:
[  295.002046]  (rfcomm_dev_lock){-.--}, at: [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] but task is already holding lock:
[  295.002046]  (&amp;d-&gt;lock){--..}, at: [&lt;f899c533&gt;] __rfcomm_dlc_close+0x43/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] which lock already depends on the new lock.
[  295.002046] 
[  295.002046] 
[  295.002046] the existing dependency chain (in reverse order) is:
[  295.002046] 
[  295.002046] -&gt; #1 (&amp;d-&gt;lock){--..}:
[  295.002046]        [&lt;c0149b23&gt;] check_prev_add+0xd3/0x200
[  295.002046]        [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]        [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]        [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]        [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]        [&lt;c03d6b99&gt;] _spin_lock+0x39/0x80
[  295.002046]        [&lt;f89a01c0&gt;] rfcomm_dev_add+0x240/0x360 [rfcomm]
[  295.002046]        [&lt;f89a047e&gt;] rfcomm_create_dev+0x6e/0xe0 [rfcomm]
[  295.002046]        [&lt;f89a0823&gt;] rfcomm_dev_ioctl+0x33/0x60 [rfcomm]
[  295.002046]        [&lt;f899facc&gt;] rfcomm_sock_ioctl+0x2c/0x50 [rfcomm]
[  295.002046]        [&lt;c0363d38&gt;] sock_ioctl+0x118/0x240
[  295.002046]        [&lt;c0194196&gt;] vfs_ioctl+0x76/0x90
[  295.002046]        [&lt;c0194446&gt;] do_vfs_ioctl+0x56/0x140
[  295.002046]        [&lt;c0194569&gt;] sys_ioctl+0x39/0x60
[  295.002046]        [&lt;c0104faa&gt;] syscall_call+0x7/0xb
[  295.002046]        [&lt;ffffffff&gt;] 0xffffffff
[  295.002046] 
[  295.002046] -&gt; #0 (rfcomm_dev_lock){-.--}:
[  295.002046]        [&lt;c0149a84&gt;] check_prev_add+0x34/0x200
[  295.002046]        [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]        [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]        [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]        [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]        [&lt;c03d6639&gt;] _read_lock+0x39/0x80
[  295.002046]        [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]        [&lt;f899c548&gt;] __rfcomm_dlc_close+0x58/0xd0 [rfcomm]
[  295.002046]        [&lt;f899d44f&gt;] rfcomm_recv_ua+0x6f/0x120 [rfcomm]
[  295.002046]        [&lt;f899e061&gt;] rfcomm_recv_frame+0x171/0x1e0 [rfcomm]
[  295.002046]        [&lt;f899e357&gt;] rfcomm_run+0xe7/0x550 [rfcomm]
[  295.002046]        [&lt;c013c18c&gt;] kthread+0x5c/0xa0
[  295.002046]        [&lt;c0105c07&gt;] kernel_thread_helper+0x7/0x10
[  295.002046]        [&lt;ffffffff&gt;] 0xffffffff
[  295.002046] 
[  295.002046] other info that might help us debug this:
[  295.002046] 
[  295.002046] 2 locks held by krfcommd/2705:
[  295.002046]  #0:  (rfcomm_mutex){--..}, at: [&lt;f899e2eb&gt;] rfcomm_run+0x7b/0x550 [rfcomm]
[  295.002046]  #1:  (&amp;d-&gt;lock){--..}, at: [&lt;f899c533&gt;] __rfcomm_dlc_close+0x43/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] stack backtrace:
[  295.002046] Pid: 2705, comm: krfcommd Not tainted 2.6.25-rc7 #1
[  295.002046]  [&lt;c0128a38&gt;] ? printk+0x18/0x20
[  295.002046]  [&lt;c014927f&gt;] print_circular_bug_tail+0x6f/0x80
[  295.002046]  [&lt;c0149a84&gt;] check_prev_add+0x34/0x200
[  295.002046]  [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]  [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]  [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]  [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]  [&lt;f89a090a&gt;] ? rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;c03d6639&gt;] _read_lock+0x39/0x80
[  295.002046]  [&lt;f89a090a&gt;] ? rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;f899c548&gt;] __rfcomm_dlc_close+0x58/0xd0 [rfcomm]
[  295.002046]  [&lt;f899d44f&gt;] rfcomm_recv_ua+0x6f/0x120 [rfcomm]
[  295.002046]  [&lt;f899e061&gt;] rfcomm_recv_frame+0x171/0x1e0 [rfcomm]
[  295.002046]  [&lt;c014abd9&gt;] ? trace_hardirqs_on+0xb9/0x130
[  295.002046]  [&lt;c03d6e89&gt;] ? _spin_unlock_irqrestore+0x39/0x70
[  295.002046]  [&lt;f899e357&gt;] rfcomm_run+0xe7/0x550 [rfcomm]
[  295.002046]  [&lt;c03d4559&gt;] ? __sched_text_start+0x229/0x4c0
[  295.002046]  [&lt;c0120000&gt;] ? cpu_avg_load_per_task+0x20/0x30
[  295.002046]  [&lt;f899e270&gt;] ? rfcomm_run+0x0/0x550 [rfcomm]
[  295.002046]  [&lt;c013c18c&gt;] kthread+0x5c/0xa0
[  295.002046]  [&lt;c013c130&gt;] ? kthread+0x0/0xa0
[  295.002046]  [&lt;c0105c07&gt;] kernel_thread_helper+0x7/0x10
[  295.002046]  =======================

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bluetooth: replace deprecated RW_LOCK_UNLOCKED macros</title>
<updated>2008-03-28T23:17:38+00:00</updated>
<author>
<name>Robert P. J. Day</name>
<email>rpjday@crashcourse.ca</email>
</author>
<published>2008-03-28T23:17:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d5fb2962c6157495e1365e4f30568ed3830d35a7'/>
<id>d5fb2962c6157495e1365e4f30568ed3830d35a7</id>
<content type='text'>
The older RW_LOCK_UNLOCKED macros defeat lockdep state tracing so
replace them with the newer __RW_LOCK_UNLOCKED macros.

Signed-off-by: Robert P. J. Day &lt;rpjday@crashcourse.ca&gt;
Acked-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The older RW_LOCK_UNLOCKED macros defeat lockdep state tracing so
replace them with the newer __RW_LOCK_UNLOCKED macros.

Signed-off-by: Robert P. J. Day &lt;rpjday@crashcourse.ca&gt;
Acked-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[NET] NETNS: Omit sock-&gt;sk_net without CONFIG_NET_NS.</title>
<updated>2008-03-25T19:39:55+00:00</updated>
<author>
<name>YOSHIFUJI Hideaki</name>
<email>yoshfuji@linux-ipv6.org</email>
</author>
<published>2008-03-25T17:26:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=3b1e0a655f8eba44ab1ee2a1068d169ccfb853b9'/>
<id>3b1e0a655f8eba44ab1ee2a1068d169ccfb853b9</id>
<content type='text'>
Introduce per-sock inlines: sock_net(), sock_net_set()
and per-inet_timewait_sock inlines: twsk_net(), twsk_net_set().
Without CONFIG_NET_NS, no namespace other than &amp;init_net exists.
Let's explicitly define them to help compiler optimizations.

Signed-off-by: YOSHIFUJI Hideaki &lt;yoshfuji@linux-ipv6.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Introduce per-sock inlines: sock_net(), sock_net_set()
and per-inet_timewait_sock inlines: twsk_net(), twsk_net_set().
Without CONFIG_NET_NS, no namespace other than &amp;init_net exists.
Let's explicitly define them to help compiler optimizations.

Signed-off-by: YOSHIFUJI Hideaki &lt;yoshfuji@linux-ipv6.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>remove final fastcall users</title>
<updated>2008-02-14T00:21:18+00:00</updated>
<author>
<name>Harvey Harrison</name>
<email>harvey.harrison@gmail.com</email>
</author>
<published>2008-02-13T23:03:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=b5606c2d4447e80b1d72406af4e78af1eda611d4'/>
<id>b5606c2d4447e80b1d72406af4e78af1eda611d4</id>
<content type='text'>
fastcall always expands to empty, remove it.

Signed-off-by: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fastcall always expands to empty, remove it.

Signed-off-by: Harvey Harrison &lt;harvey.harrison@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bluetooth rfcomm tty: destroy before tty_close()</title>
<updated>2008-02-05T11:12:06+00:00</updated>
<author>
<name>Dave Young</name>
<email>hidave.darkstar@gmail.com</email>
</author>
<published>2008-02-05T11:12:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=93d807401ced2320d0d1e56bf9de099bba5c0424'/>
<id>93d807401ced2320d0d1e56bf9de099bba5c0424</id>
<content type='text'>
rfcomm dev could be deleted in tty_hangup, so we must not call
rfcomm_dev_del again to prevent from destroying rfcomm dev before tty
close.

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
rfcomm dev could be deleted in tty_hangup, so we must not call
rfcomm_dev_del again to prevent from destroying rfcomm dev before tty
close.

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[NET]: Convert init_timer into setup_timer</title>
<updated>2008-01-28T22:53:35+00:00</updated>
<author>
<name>Pavel Emelyanov</name>
<email>xemul@openvz.org</email>
</author>
<published>2008-01-24T05:20:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=b24b8a247ff65c01b252025926fe564209fae4fc'/>
<id>b24b8a247ff65c01b252025926fe564209fae4fc</id>
<content type='text'>
Many-many code in the kernel initialized the timer-&gt;function
and  timer-&gt;data together with calling init_timer(timer). There
is already a helper for this. Use it for networking code.

The patch is HUGE, but makes the code 130 lines shorter
(98 insertions(+), 228 deletions(-)).

Signed-off-by: Pavel Emelyanov &lt;xemul@openvz.org&gt;
Acked-by: Arnaldo Carvalho de Melo &lt;acme@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Many-many code in the kernel initialized the timer-&gt;function
and  timer-&gt;data together with calling init_timer(timer). There
is already a helper for this. Use it for networking code.

The patch is HUGE, but makes the code 130 lines shorter
(98 insertions(+), 228 deletions(-)).

Signed-off-by: Pavel Emelyanov &lt;xemul@openvz.org&gt;
Acked-by: Arnaldo Carvalho de Melo &lt;acme@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>[BLUETOOTH]: Move children of connection device to NULL before connection down.</title>
<updated>2008-01-23T11:11:39+00:00</updated>
<author>
<name>Dave Young</name>
<email>hidave.darkstar@gmail.com</email>
</author>
<published>2008-01-22T06:35:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=acea6852f32b8805e166d885ed7e9f0c7cd10d41'/>
<id>acea6852f32b8805e166d885ed7e9f0c7cd10d41</id>
<content type='text'>
The rfcomm tty device will possibly retain even when conn is down, and
sysfs doesn't support zombie device moving, so this patch move the tty
device before conn device is destroyed.

For the bug refered please see :
http://lkml.org/lkml/2007/12/28/87

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The rfcomm tty device will possibly retain even when conn is down, and
sysfs doesn't support zombie device moving, so this patch move the tty
device before conn device is destroyed.

For the bug refered please see :
http://lkml.org/lkml/2007/12/28/87

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
