<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/drivers/net/ppp/ppp_generic.c, branch v4.13</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>ppp: fix xmit recursion detection on ppp channels</title>
<updated>2017-08-09T04:06:11+00:00</updated>
<author>
<name>Guillaume Nault</name>
<email>g.nault@alphalink.fr</email>
</author>
<published>2017-08-08T09:43:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=0a0e1a85c83775a648041be2b15de6d0a2f2b8eb'/>
<id>0a0e1a85c83775a648041be2b15de6d0a2f2b8eb</id>
<content type='text'>
Commit e5dadc65f9e0 ("ppp: Fix false xmit recursion detect with two ppp
devices") dropped the xmit_recursion counter incrementation in
ppp_channel_push() and relied on ppp_xmit_process() for this task.
But __ppp_channel_push() can also send packets directly (using the
.start_xmit() channel callback), in which case the xmit_recursion
counter isn't incremented anymore. If such packets get routed back to
the parent ppp unit, ppp_xmit_process() won't notice the recursion and
will call ppp_channel_push() on the same channel, effectively creating
the deadlock situation that the xmit_recursion mechanism was supposed
to prevent.

This patch re-introduces the xmit_recursion counter incrementation in
ppp_channel_push(). Since the xmit_recursion variable is now part of
the parent ppp unit, incrementation is skipped if the channel doesn't
have any. This is fine because only packets routed through the parent
unit may enter the channel recursively.

Finally, we have to ensure that pch-&gt;ppp is not going to be modified
while executing ppp_channel_push(). Instead of taking this lock only
while calling ppp_xmit_process(), we now have to hold it for the full
ppp_channel_push() execution. This respects the ppp locks ordering
which requires locking -&gt;upl before -&gt;downl.

Fixes: e5dadc65f9e0 ("ppp: Fix false xmit recursion detect with two ppp devices")
Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&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>
Commit e5dadc65f9e0 ("ppp: Fix false xmit recursion detect with two ppp
devices") dropped the xmit_recursion counter incrementation in
ppp_channel_push() and relied on ppp_xmit_process() for this task.
But __ppp_channel_push() can also send packets directly (using the
.start_xmit() channel callback), in which case the xmit_recursion
counter isn't incremented anymore. If such packets get routed back to
the parent ppp unit, ppp_xmit_process() won't notice the recursion and
will call ppp_channel_push() on the same channel, effectively creating
the deadlock situation that the xmit_recursion mechanism was supposed
to prevent.

This patch re-introduces the xmit_recursion counter incrementation in
ppp_channel_push(). Since the xmit_recursion variable is now part of
the parent ppp unit, incrementation is skipped if the channel doesn't
have any. This is fine because only packets routed through the parent
unit may enter the channel recursively.

Finally, we have to ensure that pch-&gt;ppp is not going to be modified
while executing ppp_channel_push(). Instead of taking this lock only
while calling ppp_xmit_process(), we now have to hold it for the full
ppp_channel_push() execution. This respects the ppp locks ordering
which requires locking -&gt;upl before -&gt;downl.

Fixes: e5dadc65f9e0 ("ppp: Fix false xmit recursion detect with two ppp devices")
Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ppp: Fix false xmit recursion detect with two ppp devices</title>
<updated>2017-07-18T18:20:33+00:00</updated>
<author>
<name>Gao Feng</name>
<email>gfree.wind@vip.163.com</email>
</author>
<published>2017-07-17T10:34:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=e5dadc65f9e0177eb649bcd9d333f1ebf871223e'/>
<id>e5dadc65f9e0177eb649bcd9d333f1ebf871223e</id>
<content type='text'>
The global percpu variable ppp_xmit_recursion is used to detect the ppp
xmit recursion to avoid the deadlock, which is caused by one CPU tries to
lock the xmit lock twice. But it would report false recursion when one CPU
wants to send the skb from two different PPP devices, like one L2TP on the
PPPoE. It is a normal case actually.

Now use one percpu member of struct ppp instead of the gloable variable to
detect the xmit recursion of one ppp device.

Fixes: 55454a565836 ("ppp: avoid dealock on recursive xmit")
Signed-off-by: Gao Feng &lt;gfree.wind@vip.163.com&gt;
Signed-off-by: Liu Jianying &lt;jianying.liu@ikuai8.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 global percpu variable ppp_xmit_recursion is used to detect the ppp
xmit recursion to avoid the deadlock, which is caused by one CPU tries to
lock the xmit lock twice. But it would report false recursion when one CPU
wants to send the skb from two different PPP devices, like one L2TP on the
PPPoE. It is a normal case actually.

Now use one percpu member of struct ppp instead of the gloable variable to
detect the xmit recursion of one ppp device.

Fixes: 55454a565836 ("ppp: avoid dealock on recursive xmit")
Signed-off-by: Gao Feng &lt;gfree.wind@vip.163.com&gt;
Signed-off-by: Liu Jianying &lt;jianying.liu@ikuai8.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: add netlink_ext_ack argument to rtnl_link_ops.validate</title>
<updated>2017-06-27T03:13:22+00:00</updated>
<author>
<name>Matthias Schiffer</name>
<email>mschiffer@universe-factory.net</email>
</author>
<published>2017-06-25T21:56:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=a8b8a889e369de82f295f55455adb4a7c31c458c'/>
<id>a8b8a889e369de82f295f55455adb4a7c31c458c</id>
<content type='text'>
Add support for extended error reporting.

Signed-off-by: Matthias Schiffer &lt;mschiffer@universe-factory.net&gt;
Acked-by: David Ahern &lt;dsahern@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>
Add support for extended error reporting.

Signed-off-by: Matthias Schiffer &lt;mschiffer@universe-factory.net&gt;
Acked-by: David Ahern &lt;dsahern@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: add netlink_ext_ack argument to rtnl_link_ops.newlink</title>
<updated>2017-06-27T03:13:21+00:00</updated>
<author>
<name>Matthias Schiffer</name>
<email>mschiffer@universe-factory.net</email>
</author>
<published>2017-06-25T21:55:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=7a3f4a185169b195c33f1c54f33a44eba2d6aa96'/>
<id>7a3f4a185169b195c33f1c54f33a44eba2d6aa96</id>
<content type='text'>
Add support for extended error reporting.

Signed-off-by: Matthias Schiffer &lt;mschiffer@universe-factory.net&gt;
Acked-by: David Ahern &lt;dsahern@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>
Add support for extended error reporting.

Signed-off-by: Matthias Schiffer &lt;mschiffer@universe-factory.net&gt;
Acked-by: David Ahern &lt;dsahern@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>networking: make skb_push &amp; __skb_push return void pointers</title>
<updated>2017-06-16T15:48:40+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2017-06-16T12:29:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d58ff35122847a83ba55394e2ae3a1527b6febf5'/>
<id>d58ff35122847a83ba55394e2ae3a1527b6febf5</id>
<content type='text'>
It seems like a historic accident that these return unsigned char *,
and in many places that means casts are required, more often than not.

Make these functions return void * and remove all the casts across
the tree, adding a (u8 *) cast only where the unsigned char pointer
was used directly, all done with the following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

    @@
    expression SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - fn(SKB, LEN)[0]
    + *(u8 *)fn(SKB, LEN)

Note that the last part there converts from push(...)[0] to the
more idiomatic *(u8 *)push(...).

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.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>
It seems like a historic accident that these return unsigned char *,
and in many places that means casts are required, more often than not.

Make these functions return void * and remove all the casts across
the tree, adding a (u8 *) cast only where the unsigned char pointer
was used directly, all done with the following spatch:

    @@
    expression SKB, LEN;
    typedef u8;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - *(fn(SKB, LEN))
    + *(u8 *)fn(SKB, LEN)

    @@
    expression E, SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    type T;
    @@
    - E = ((T *)(fn(SKB, LEN)))
    + E = fn(SKB, LEN)

    @@
    expression SKB, LEN;
    identifier fn = { skb_push, __skb_push, skb_push_rcsum };
    @@
    - fn(SKB, LEN)[0]
    + *(u8 *)fn(SKB, LEN)

Note that the last part there converts from push(...)[0] to the
more idiomatic *(u8 *)push(...).

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ppp: remove unnecessary bh disable in xmit path</title>
<updated>2017-06-01T15:57:36+00:00</updated>
<author>
<name>Gao Feng</name>
<email>gfree.wind@vip.163.com</email>
</author>
<published>2017-06-01T09:58:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=97fcc193f67e584dc6564767c6e186fe1ecd71d2'/>
<id>97fcc193f67e584dc6564767c6e186fe1ecd71d2</id>
<content type='text'>
Since the commit 55454a565836 ("ppp: avoid dealock on recursive xmit"),
the PPP xmit path is protected by wrapper functions which disable the
bh already. So it is unnecessary to disable the bh again in the real
xmit path.

Signed-off-by: Gao Feng &lt;gfree.wind@vip.163.com&gt;
Acked-by: Guillaume Nault &lt;g.nault@alphalink.fr&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>
Since the commit 55454a565836 ("ppp: avoid dealock on recursive xmit"),
the PPP xmit path is protected by wrapper functions which disable the
bh already. So it is unnecessary to disable the bh again in the real
xmit path.

Signed-off-by: Gao Feng &lt;gfree.wind@vip.163.com&gt;
Acked-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>sched/headers: Prepare to move signal wakeup &amp; sigpending methods from &lt;linux/sched.h&gt; into &lt;linux/sched/signal.h&gt;</title>
<updated>2017-03-02T07:42:32+00:00</updated>
<author>
<name>Ingo Molnar</name>
<email>mingo@kernel.org</email>
</author>
<published>2017-02-02T18:15:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=174cd4b1e5fbd0d74c68cf3a74f5bd4923485512'/>
<id>174cd4b1e5fbd0d74c68cf3a74f5bd4923485512</id>
<content type='text'>
Fix up affected files that include this signal functionality via sched.h.

Acked-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Mike Galbraith &lt;efault@gmx.de&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar &lt;mingo@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix up affected files that include this signal functionality via sched.h.

Acked-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Mike Galbraith &lt;efault@gmx.de&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar &lt;mingo@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: make ndo_get_stats64 a void function</title>
<updated>2017-01-08T22:51:44+00:00</updated>
<author>
<name>stephen hemminger</name>
<email>stephen@networkplumber.org</email>
</author>
<published>2017-01-07T03:12:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=bc1f44709cf27fb2a5766cadafe7e2ad5e9cb221'/>
<id>bc1f44709cf27fb2a5766cadafe7e2ad5e9cb221</id>
<content type='text'>
The network device operation for reading statistics is only called
in one place, and it ignores the return value. Having a structure
return value is potentially confusing because some future driver could
incorrectly assume that the return value was used.

Fix all drivers with ndo_get_stats64 to have a void function.

Signed-off-by: Stephen Hemminger &lt;sthemmin@microsoft.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 network device operation for reading statistics is only called
in one place, and it ignores the return value. Having a structure
return value is potentially confusing because some future driver could
incorrectly assume that the return value was used.

Fix all drivers with ndo_get_stats64 to have a void function.

Signed-off-by: Stephen Hemminger &lt;sthemmin@microsoft.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>netns: make struct pernet_operations::id unsigned int</title>
<updated>2016-11-18T15:59:15+00:00</updated>
<author>
<name>Alexey Dobriyan</name>
<email>adobriyan@gmail.com</email>
</author>
<published>2016-11-17T01:58:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=c7d03a00b56fc23c3a01a8353789ad257363e281'/>
<id>c7d03a00b56fc23c3a01a8353789ad257363e281</id>
<content type='text'>
Make struct pernet_operations::id unsigned.

There are 2 reasons to do so:

1)
This field is really an index into an zero based array and
thus is unsigned entity. Using negative value is out-of-bound
access by definition.

2)
On x86_64 unsigned 32-bit data which are mixed with pointers
via array indexing or offsets added or subtracted to pointers
are preffered to signed 32-bit data.

"int" being used as an array index needs to be sign-extended
to 64-bit before being used.

	void f(long *p, int i)
	{
		g(p[i]);
	}

  roughly translates to

	movsx	rsi, esi
	mov	rdi, [rsi+...]
	call 	g

MOVSX is 3 byte instruction which isn't necessary if the variable is
unsigned because x86_64 is zero extending by default.

Now, there is net_generic() function which, you guessed it right, uses
"int" as an array index:

	static inline void *net_generic(const struct net *net, int id)
	{
		...
		ptr = ng-&gt;ptr[id - 1];
		...
	}

And this function is used a lot, so those sign extensions add up.

Patch snipes ~1730 bytes on allyesconfig kernel (without all junk
messing with code generation):

	add/remove: 0/0 grow/shrink: 70/598 up/down: 396/-2126 (-1730)

Unfortunately some functions actually grow bigger.
This is a semmingly random artefact of code generation with register
allocator being used differently. gcc decides that some variable
needs to live in new r8+ registers and every access now requires REX
prefix. Or it is shifted into r12, so [r12+0] addressing mode has to be
used which is longer than [r8]

However, overall balance is in negative direction:

	add/remove: 0/0 grow/shrink: 70/598 up/down: 396/-2126 (-1730)
	function                                     old     new   delta
	nfsd4_lock                                  3886    3959     +73
	tipc_link_build_proto_msg                   1096    1140     +44
	mac80211_hwsim_new_radio                    2776    2808     +32
	tipc_mon_rcv                                1032    1058     +26
	svcauth_gss_legacy_init                     1413    1429     +16
	tipc_bcbase_select_primary                   379     392     +13
	nfsd4_exchange_id                           1247    1260     +13
	nfsd4_setclientid_confirm                    782     793     +11
		...
	put_client_renew_locked                      494     480     -14
	ip_set_sockfn_get                            730     716     -14
	geneve_sock_add                              829     813     -16
	nfsd4_sequence_done                          721     703     -18
	nlmclnt_lookup_host                          708     686     -22
	nfsd4_lockt                                 1085    1063     -22
	nfs_get_client                              1077    1050     -27
	tcf_bpf_init                                1106    1076     -30
	nfsd4_encode_fattr                          5997    5930     -67
	Total: Before=154856051, After=154854321, chg -0.00%

Signed-off-by: Alexey Dobriyan &lt;adobriyan@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>
Make struct pernet_operations::id unsigned.

There are 2 reasons to do so:

1)
This field is really an index into an zero based array and
thus is unsigned entity. Using negative value is out-of-bound
access by definition.

2)
On x86_64 unsigned 32-bit data which are mixed with pointers
via array indexing or offsets added or subtracted to pointers
are preffered to signed 32-bit data.

"int" being used as an array index needs to be sign-extended
to 64-bit before being used.

	void f(long *p, int i)
	{
		g(p[i]);
	}

  roughly translates to

	movsx	rsi, esi
	mov	rdi, [rsi+...]
	call 	g

MOVSX is 3 byte instruction which isn't necessary if the variable is
unsigned because x86_64 is zero extending by default.

Now, there is net_generic() function which, you guessed it right, uses
"int" as an array index:

	static inline void *net_generic(const struct net *net, int id)
	{
		...
		ptr = ng-&gt;ptr[id - 1];
		...
	}

And this function is used a lot, so those sign extensions add up.

Patch snipes ~1730 bytes on allyesconfig kernel (without all junk
messing with code generation):

	add/remove: 0/0 grow/shrink: 70/598 up/down: 396/-2126 (-1730)

Unfortunately some functions actually grow bigger.
This is a semmingly random artefact of code generation with register
allocator being used differently. gcc decides that some variable
needs to live in new r8+ registers and every access now requires REX
prefix. Or it is shifted into r12, so [r12+0] addressing mode has to be
used which is longer than [r8]

However, overall balance is in negative direction:

	add/remove: 0/0 grow/shrink: 70/598 up/down: 396/-2126 (-1730)
	function                                     old     new   delta
	nfsd4_lock                                  3886    3959     +73
	tipc_link_build_proto_msg                   1096    1140     +44
	mac80211_hwsim_new_radio                    2776    2808     +32
	tipc_mon_rcv                                1032    1058     +26
	svcauth_gss_legacy_init                     1413    1429     +16
	tipc_bcbase_select_primary                   379     392     +13
	nfsd4_exchange_id                           1247    1260     +13
	nfsd4_setclientid_confirm                    782     793     +11
		...
	put_client_renew_locked                      494     480     -14
	ip_set_sockfn_get                            730     716     -14
	geneve_sock_add                              829     813     -16
	nfsd4_sequence_done                          721     703     -18
	nlmclnt_lookup_host                          708     686     -22
	nfsd4_lockt                                 1085    1063     -22
	nfs_get_client                              1077    1050     -27
	tcf_bpf_init                                1106    1076     -30
	nfsd4_encode_fattr                          5997    5930     -67
	Total: Before=154856051, After=154854321, chg -0.00%

Signed-off-by: Alexey Dobriyan &lt;adobriyan@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ppp: declare PPP devices as LLTX</title>
<updated>2016-08-31T21:33:09+00:00</updated>
<author>
<name>Guillaume Nault</name>
<email>g.nault@alphalink.fr</email>
</author>
<published>2016-08-27T20:22:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=077127705acf80cdb9393b891d934509a7081d71'/>
<id>077127705acf80cdb9393b891d934509a7081d71</id>
<content type='text'>
ppp_xmit_process() already locks the xmit path. If HARD_TX_LOCK() tries
to hold the _xmit_lock we can get lock inversion.

[  973.726130] ======================================================
[  973.727311] [ INFO: possible circular locking dependency detected ]
[  973.728546] 4.8.0-rc2 #1 Tainted: G           O
[  973.728986] -------------------------------------------------------
[  973.728986] accel-pppd/1806 is trying to acquire lock:
[  973.728986]  (&amp;qdisc_xmit_lock_key){+.-...}, at: [&lt;ffffffff8146f6fe&gt;] sch_direct_xmit+0x8d/0x221
[  973.728986]
[  973.728986] but task is already holding lock:
[  973.728986]  (l2tp_sock){+.-...}, at: [&lt;ffffffffa0202c4a&gt;] l2tp_xmit_skb+0x1e8/0x5d7 [l2tp_core]
[  973.728986]
[  973.728986] which lock already depends on the new lock.
[  973.728986]
[  973.728986]
[  973.728986] the existing dependency chain (in reverse order) is:
[  973.728986]
-&gt; #3 (l2tp_sock){+.-...}:
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff815752f4&gt;] _raw_spin_lock+0x2d/0x3c
[  973.728986]        [&lt;ffffffffa0202c4a&gt;] l2tp_xmit_skb+0x1e8/0x5d7 [l2tp_core]
[  973.728986]        [&lt;ffffffffa01b2466&gt;] pppol2tp_xmit+0x1f2/0x25e [l2tp_ppp]
[  973.728986]        [&lt;ffffffffa0184f59&gt;] ppp_channel_push+0xb5/0x14a [ppp_generic]
[  973.728986]        [&lt;ffffffffa01853ed&gt;] ppp_write+0x104/0x11c [ppp_generic]
[  973.728986]        [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]        [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]        [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]        [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]
-&gt; #2 (&amp;(&amp;pch-&gt;downl)-&gt;rlock){+.-...}:
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff81575334&gt;] _raw_spin_lock_bh+0x31/0x40
[  973.728986]        [&lt;ffffffffa01808e2&gt;] ppp_push+0xa7/0x82d [ppp_generic]
[  973.728986]        [&lt;ffffffffa0184675&gt;] __ppp_xmit_process+0x48/0x877 [ppp_generic]
[  973.728986]        [&lt;ffffffffa018505b&gt;] ppp_xmit_process+0x4b/0xaf [ppp_generic]
[  973.728986]        [&lt;ffffffffa01853f7&gt;] ppp_write+0x10e/0x11c [ppp_generic]
[  973.728986]        [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]        [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]        [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]        [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]
-&gt; #1 (&amp;(&amp;ppp-&gt;wlock)-&gt;rlock){+.-...}:
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff81575334&gt;] _raw_spin_lock_bh+0x31/0x40
[  973.728986]        [&lt;ffffffffa0184654&gt;] __ppp_xmit_process+0x27/0x877 [ppp_generic]
[  973.728986]        [&lt;ffffffffa018505b&gt;] ppp_xmit_process+0x4b/0xaf [ppp_generic]
[  973.728986]        [&lt;ffffffffa01852da&gt;] ppp_start_xmit+0x21b/0x22a [ppp_generic]
[  973.728986]        [&lt;ffffffff8143f767&gt;] dev_hard_start_xmit+0x1a9/0x43d
[  973.728986]        [&lt;ffffffff8146f747&gt;] sch_direct_xmit+0xd6/0x221
[  973.728986]        [&lt;ffffffff814401e4&gt;] __dev_queue_xmit+0x62a/0x912
[  973.728986]        [&lt;ffffffff814404d7&gt;] dev_queue_xmit+0xb/0xd
[  973.728986]        [&lt;ffffffff81449978&gt;] neigh_direct_output+0xc/0xe
[  973.728986]        [&lt;ffffffff8150e62b&gt;] ip6_finish_output2+0x5a9/0x623
[  973.728986]        [&lt;ffffffff81512128&gt;] ip6_output+0x15e/0x16a
[  973.728986]        [&lt;ffffffff8153ef86&gt;] dst_output+0x76/0x7f
[  973.728986]        [&lt;ffffffff8153f737&gt;] mld_sendpack+0x335/0x404
[  973.728986]        [&lt;ffffffff81541c61&gt;] mld_send_initial_cr.part.21+0x99/0xa2
[  973.728986]        [&lt;ffffffff8154441d&gt;] ipv6_mc_dad_complete+0x42/0x71
[  973.728986]        [&lt;ffffffff8151c4bd&gt;] addrconf_dad_completed+0x1cf/0x2ea
[  973.728986]        [&lt;ffffffff8151e4fa&gt;] addrconf_dad_work+0x453/0x520
[  973.728986]        [&lt;ffffffff8107a393&gt;] process_one_work+0x365/0x6f0
[  973.728986]        [&lt;ffffffff8107aecd&gt;] worker_thread+0x2de/0x421
[  973.728986]        [&lt;ffffffff810816fb&gt;] kthread+0x121/0x130
[  973.728986]        [&lt;ffffffff81575dbf&gt;] ret_from_fork+0x1f/0x40
[  973.728986]
-&gt; #0 (&amp;qdisc_xmit_lock_key){+.-...}:
[  973.728986]        [&lt;ffffffff810b28d6&gt;] __lock_acquire+0x1118/0x1483
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff815752f4&gt;] _raw_spin_lock+0x2d/0x3c
[  973.728986]        [&lt;ffffffff8146f6fe&gt;] sch_direct_xmit+0x8d/0x221
[  973.728986]        [&lt;ffffffff814401e4&gt;] __dev_queue_xmit+0x62a/0x912
[  973.728986]        [&lt;ffffffff814404d7&gt;] dev_queue_xmit+0xb/0xd
[  973.728986]        [&lt;ffffffff81449978&gt;] neigh_direct_output+0xc/0xe
[  973.728986]        [&lt;ffffffff81487811&gt;] ip_finish_output2+0x5db/0x609
[  973.728986]        [&lt;ffffffff81489590&gt;] ip_finish_output+0x152/0x15e
[  973.728986]        [&lt;ffffffff8148a0d4&gt;] ip_output+0x8c/0x96
[  973.728986]        [&lt;ffffffff81489652&gt;] ip_local_out+0x41/0x4a
[  973.728986]        [&lt;ffffffff81489e7d&gt;] ip_queue_xmit+0x5a5/0x609
[  973.728986]        [&lt;ffffffffa0202fe4&gt;] l2tp_xmit_skb+0x582/0x5d7 [l2tp_core]
[  973.728986]        [&lt;ffffffffa01b2466&gt;] pppol2tp_xmit+0x1f2/0x25e [l2tp_ppp]
[  973.728986]        [&lt;ffffffffa0184f59&gt;] ppp_channel_push+0xb5/0x14a [ppp_generic]
[  973.728986]        [&lt;ffffffffa01853ed&gt;] ppp_write+0x104/0x11c [ppp_generic]
[  973.728986]        [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]        [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]        [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]        [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]
[  973.728986] other info that might help us debug this:
[  973.728986]
[  973.728986] Chain exists of:
  &amp;qdisc_xmit_lock_key --&gt; &amp;(&amp;pch-&gt;downl)-&gt;rlock --&gt; l2tp_sock

[  973.728986]  Possible unsafe locking scenario:
[  973.728986]
[  973.728986]        CPU0                    CPU1
[  973.728986]        ----                    ----
[  973.728986]   lock(l2tp_sock);
[  973.728986]                                lock(&amp;(&amp;pch-&gt;downl)-&gt;rlock);
[  973.728986]                                lock(l2tp_sock);
[  973.728986]   lock(&amp;qdisc_xmit_lock_key);
[  973.728986]
[  973.728986]  *** DEADLOCK ***
[  973.728986]
[  973.728986] 6 locks held by accel-pppd/1806:
[  973.728986]  #0:  (&amp;(&amp;pch-&gt;downl)-&gt;rlock){+.-...}, at: [&lt;ffffffffa0184efa&gt;] ppp_channel_push+0x56/0x14a [ppp_generic]
[  973.728986]  #1:  (l2tp_sock){+.-...}, at: [&lt;ffffffffa0202c4a&gt;] l2tp_xmit_skb+0x1e8/0x5d7 [l2tp_core]
[  973.728986]  #2:  (rcu_read_lock){......}, at: [&lt;ffffffff81486981&gt;] rcu_lock_acquire+0x0/0x20
[  973.728986]  #3:  (rcu_read_lock_bh){......}, at: [&lt;ffffffff81486981&gt;] rcu_lock_acquire+0x0/0x20
[  973.728986]  #4:  (rcu_read_lock_bh){......}, at: [&lt;ffffffff814340e3&gt;] rcu_lock_acquire+0x0/0x20
[  973.728986]  #5:  (dev-&gt;qdisc_running_key ?: &amp;qdisc_running_key#2){+.....}, at: [&lt;ffffffff8144011e&gt;] __dev_queue_xmit+0x564/0x912
[  973.728986]
[  973.728986] stack backtrace:
[  973.728986] CPU: 2 PID: 1806 Comm: accel-pppd Tainted: G           O    4.8.0-rc2 #1
[  973.728986] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014
[  973.728986]  ffff7fffffffffff ffff88003436f850 ffffffff812a20f4 ffffffff82156e30
[  973.728986]  ffffffff82156920 ffff88003436f890 ffffffff8115c759 ffff88003344ae00
[  973.728986]  ffff88003344b5c0 0000000000000002 0000000000000006 ffff88003344b5e8
[  973.728986] Call Trace:
[  973.728986]  [&lt;ffffffff812a20f4&gt;] dump_stack+0x67/0x90
[  973.728986]  [&lt;ffffffff8115c759&gt;] print_circular_bug+0x22e/0x23c
[  973.728986]  [&lt;ffffffff810b28d6&gt;] __lock_acquire+0x1118/0x1483
[  973.728986]  [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]  [&lt;ffffffff810b3130&gt;] ? lock_acquire+0x150/0x217
[  973.728986]  [&lt;ffffffff8146f6fe&gt;] ? sch_direct_xmit+0x8d/0x221
[  973.728986]  [&lt;ffffffff815752f4&gt;] _raw_spin_lock+0x2d/0x3c
[  973.728986]  [&lt;ffffffff8146f6fe&gt;] ? sch_direct_xmit+0x8d/0x221
[  973.728986]  [&lt;ffffffff8146f6fe&gt;] sch_direct_xmit+0x8d/0x221
[  973.728986]  [&lt;ffffffff814401e4&gt;] __dev_queue_xmit+0x62a/0x912
[  973.728986]  [&lt;ffffffff814404d7&gt;] dev_queue_xmit+0xb/0xd
[  973.728986]  [&lt;ffffffff81449978&gt;] neigh_direct_output+0xc/0xe
[  973.728986]  [&lt;ffffffff81487811&gt;] ip_finish_output2+0x5db/0x609
[  973.728986]  [&lt;ffffffff81486853&gt;] ? dst_mtu+0x29/0x2e
[  973.728986]  [&lt;ffffffff81489590&gt;] ip_finish_output+0x152/0x15e
[  973.728986]  [&lt;ffffffff8148a0bc&gt;] ? ip_output+0x74/0x96
[  973.728986]  [&lt;ffffffff8148a0d4&gt;] ip_output+0x8c/0x96
[  973.728986]  [&lt;ffffffff81489652&gt;] ip_local_out+0x41/0x4a
[  973.728986]  [&lt;ffffffff81489e7d&gt;] ip_queue_xmit+0x5a5/0x609
[  973.728986]  [&lt;ffffffff814c559e&gt;] ? udp_set_csum+0x207/0x21e
[  973.728986]  [&lt;ffffffffa0202fe4&gt;] l2tp_xmit_skb+0x582/0x5d7 [l2tp_core]
[  973.728986]  [&lt;ffffffffa01b2466&gt;] pppol2tp_xmit+0x1f2/0x25e [l2tp_ppp]
[  973.728986]  [&lt;ffffffffa0184f59&gt;] ppp_channel_push+0xb5/0x14a [ppp_generic]
[  973.728986]  [&lt;ffffffffa01853ed&gt;] ppp_write+0x104/0x11c [ppp_generic]
[  973.728986]  [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]  [&lt;ffffffff8124c11d&gt;] ? fsnotify_perm+0x27/0x95
[  973.728986]  [&lt;ffffffff8124d41d&gt;] ? security_file_permission+0x4d/0x54
[  973.728986]  [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]  [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]  [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]  [&lt;ffffffff810ae0fa&gt;] ? trace_hardirqs_off_caller+0x121/0x12f

Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&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>
ppp_xmit_process() already locks the xmit path. If HARD_TX_LOCK() tries
to hold the _xmit_lock we can get lock inversion.

[  973.726130] ======================================================
[  973.727311] [ INFO: possible circular locking dependency detected ]
[  973.728546] 4.8.0-rc2 #1 Tainted: G           O
[  973.728986] -------------------------------------------------------
[  973.728986] accel-pppd/1806 is trying to acquire lock:
[  973.728986]  (&amp;qdisc_xmit_lock_key){+.-...}, at: [&lt;ffffffff8146f6fe&gt;] sch_direct_xmit+0x8d/0x221
[  973.728986]
[  973.728986] but task is already holding lock:
[  973.728986]  (l2tp_sock){+.-...}, at: [&lt;ffffffffa0202c4a&gt;] l2tp_xmit_skb+0x1e8/0x5d7 [l2tp_core]
[  973.728986]
[  973.728986] which lock already depends on the new lock.
[  973.728986]
[  973.728986]
[  973.728986] the existing dependency chain (in reverse order) is:
[  973.728986]
-&gt; #3 (l2tp_sock){+.-...}:
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff815752f4&gt;] _raw_spin_lock+0x2d/0x3c
[  973.728986]        [&lt;ffffffffa0202c4a&gt;] l2tp_xmit_skb+0x1e8/0x5d7 [l2tp_core]
[  973.728986]        [&lt;ffffffffa01b2466&gt;] pppol2tp_xmit+0x1f2/0x25e [l2tp_ppp]
[  973.728986]        [&lt;ffffffffa0184f59&gt;] ppp_channel_push+0xb5/0x14a [ppp_generic]
[  973.728986]        [&lt;ffffffffa01853ed&gt;] ppp_write+0x104/0x11c [ppp_generic]
[  973.728986]        [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]        [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]        [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]        [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]
-&gt; #2 (&amp;(&amp;pch-&gt;downl)-&gt;rlock){+.-...}:
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff81575334&gt;] _raw_spin_lock_bh+0x31/0x40
[  973.728986]        [&lt;ffffffffa01808e2&gt;] ppp_push+0xa7/0x82d [ppp_generic]
[  973.728986]        [&lt;ffffffffa0184675&gt;] __ppp_xmit_process+0x48/0x877 [ppp_generic]
[  973.728986]        [&lt;ffffffffa018505b&gt;] ppp_xmit_process+0x4b/0xaf [ppp_generic]
[  973.728986]        [&lt;ffffffffa01853f7&gt;] ppp_write+0x10e/0x11c [ppp_generic]
[  973.728986]        [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]        [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]        [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]        [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]
-&gt; #1 (&amp;(&amp;ppp-&gt;wlock)-&gt;rlock){+.-...}:
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff81575334&gt;] _raw_spin_lock_bh+0x31/0x40
[  973.728986]        [&lt;ffffffffa0184654&gt;] __ppp_xmit_process+0x27/0x877 [ppp_generic]
[  973.728986]        [&lt;ffffffffa018505b&gt;] ppp_xmit_process+0x4b/0xaf [ppp_generic]
[  973.728986]        [&lt;ffffffffa01852da&gt;] ppp_start_xmit+0x21b/0x22a [ppp_generic]
[  973.728986]        [&lt;ffffffff8143f767&gt;] dev_hard_start_xmit+0x1a9/0x43d
[  973.728986]        [&lt;ffffffff8146f747&gt;] sch_direct_xmit+0xd6/0x221
[  973.728986]        [&lt;ffffffff814401e4&gt;] __dev_queue_xmit+0x62a/0x912
[  973.728986]        [&lt;ffffffff814404d7&gt;] dev_queue_xmit+0xb/0xd
[  973.728986]        [&lt;ffffffff81449978&gt;] neigh_direct_output+0xc/0xe
[  973.728986]        [&lt;ffffffff8150e62b&gt;] ip6_finish_output2+0x5a9/0x623
[  973.728986]        [&lt;ffffffff81512128&gt;] ip6_output+0x15e/0x16a
[  973.728986]        [&lt;ffffffff8153ef86&gt;] dst_output+0x76/0x7f
[  973.728986]        [&lt;ffffffff8153f737&gt;] mld_sendpack+0x335/0x404
[  973.728986]        [&lt;ffffffff81541c61&gt;] mld_send_initial_cr.part.21+0x99/0xa2
[  973.728986]        [&lt;ffffffff8154441d&gt;] ipv6_mc_dad_complete+0x42/0x71
[  973.728986]        [&lt;ffffffff8151c4bd&gt;] addrconf_dad_completed+0x1cf/0x2ea
[  973.728986]        [&lt;ffffffff8151e4fa&gt;] addrconf_dad_work+0x453/0x520
[  973.728986]        [&lt;ffffffff8107a393&gt;] process_one_work+0x365/0x6f0
[  973.728986]        [&lt;ffffffff8107aecd&gt;] worker_thread+0x2de/0x421
[  973.728986]        [&lt;ffffffff810816fb&gt;] kthread+0x121/0x130
[  973.728986]        [&lt;ffffffff81575dbf&gt;] ret_from_fork+0x1f/0x40
[  973.728986]
-&gt; #0 (&amp;qdisc_xmit_lock_key){+.-...}:
[  973.728986]        [&lt;ffffffff810b28d6&gt;] __lock_acquire+0x1118/0x1483
[  973.728986]        [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]        [&lt;ffffffff815752f4&gt;] _raw_spin_lock+0x2d/0x3c
[  973.728986]        [&lt;ffffffff8146f6fe&gt;] sch_direct_xmit+0x8d/0x221
[  973.728986]        [&lt;ffffffff814401e4&gt;] __dev_queue_xmit+0x62a/0x912
[  973.728986]        [&lt;ffffffff814404d7&gt;] dev_queue_xmit+0xb/0xd
[  973.728986]        [&lt;ffffffff81449978&gt;] neigh_direct_output+0xc/0xe
[  973.728986]        [&lt;ffffffff81487811&gt;] ip_finish_output2+0x5db/0x609
[  973.728986]        [&lt;ffffffff81489590&gt;] ip_finish_output+0x152/0x15e
[  973.728986]        [&lt;ffffffff8148a0d4&gt;] ip_output+0x8c/0x96
[  973.728986]        [&lt;ffffffff81489652&gt;] ip_local_out+0x41/0x4a
[  973.728986]        [&lt;ffffffff81489e7d&gt;] ip_queue_xmit+0x5a5/0x609
[  973.728986]        [&lt;ffffffffa0202fe4&gt;] l2tp_xmit_skb+0x582/0x5d7 [l2tp_core]
[  973.728986]        [&lt;ffffffffa01b2466&gt;] pppol2tp_xmit+0x1f2/0x25e [l2tp_ppp]
[  973.728986]        [&lt;ffffffffa0184f59&gt;] ppp_channel_push+0xb5/0x14a [ppp_generic]
[  973.728986]        [&lt;ffffffffa01853ed&gt;] ppp_write+0x104/0x11c [ppp_generic]
[  973.728986]        [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]        [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]        [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]        [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]
[  973.728986] other info that might help us debug this:
[  973.728986]
[  973.728986] Chain exists of:
  &amp;qdisc_xmit_lock_key --&gt; &amp;(&amp;pch-&gt;downl)-&gt;rlock --&gt; l2tp_sock

[  973.728986]  Possible unsafe locking scenario:
[  973.728986]
[  973.728986]        CPU0                    CPU1
[  973.728986]        ----                    ----
[  973.728986]   lock(l2tp_sock);
[  973.728986]                                lock(&amp;(&amp;pch-&gt;downl)-&gt;rlock);
[  973.728986]                                lock(l2tp_sock);
[  973.728986]   lock(&amp;qdisc_xmit_lock_key);
[  973.728986]
[  973.728986]  *** DEADLOCK ***
[  973.728986]
[  973.728986] 6 locks held by accel-pppd/1806:
[  973.728986]  #0:  (&amp;(&amp;pch-&gt;downl)-&gt;rlock){+.-...}, at: [&lt;ffffffffa0184efa&gt;] ppp_channel_push+0x56/0x14a [ppp_generic]
[  973.728986]  #1:  (l2tp_sock){+.-...}, at: [&lt;ffffffffa0202c4a&gt;] l2tp_xmit_skb+0x1e8/0x5d7 [l2tp_core]
[  973.728986]  #2:  (rcu_read_lock){......}, at: [&lt;ffffffff81486981&gt;] rcu_lock_acquire+0x0/0x20
[  973.728986]  #3:  (rcu_read_lock_bh){......}, at: [&lt;ffffffff81486981&gt;] rcu_lock_acquire+0x0/0x20
[  973.728986]  #4:  (rcu_read_lock_bh){......}, at: [&lt;ffffffff814340e3&gt;] rcu_lock_acquire+0x0/0x20
[  973.728986]  #5:  (dev-&gt;qdisc_running_key ?: &amp;qdisc_running_key#2){+.....}, at: [&lt;ffffffff8144011e&gt;] __dev_queue_xmit+0x564/0x912
[  973.728986]
[  973.728986] stack backtrace:
[  973.728986] CPU: 2 PID: 1806 Comm: accel-pppd Tainted: G           O    4.8.0-rc2 #1
[  973.728986] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Debian-1.8.2-1 04/01/2014
[  973.728986]  ffff7fffffffffff ffff88003436f850 ffffffff812a20f4 ffffffff82156e30
[  973.728986]  ffffffff82156920 ffff88003436f890 ffffffff8115c759 ffff88003344ae00
[  973.728986]  ffff88003344b5c0 0000000000000002 0000000000000006 ffff88003344b5e8
[  973.728986] Call Trace:
[  973.728986]  [&lt;ffffffff812a20f4&gt;] dump_stack+0x67/0x90
[  973.728986]  [&lt;ffffffff8115c759&gt;] print_circular_bug+0x22e/0x23c
[  973.728986]  [&lt;ffffffff810b28d6&gt;] __lock_acquire+0x1118/0x1483
[  973.728986]  [&lt;ffffffff810b3130&gt;] lock_acquire+0x150/0x217
[  973.728986]  [&lt;ffffffff810b3130&gt;] ? lock_acquire+0x150/0x217
[  973.728986]  [&lt;ffffffff8146f6fe&gt;] ? sch_direct_xmit+0x8d/0x221
[  973.728986]  [&lt;ffffffff815752f4&gt;] _raw_spin_lock+0x2d/0x3c
[  973.728986]  [&lt;ffffffff8146f6fe&gt;] ? sch_direct_xmit+0x8d/0x221
[  973.728986]  [&lt;ffffffff8146f6fe&gt;] sch_direct_xmit+0x8d/0x221
[  973.728986]  [&lt;ffffffff814401e4&gt;] __dev_queue_xmit+0x62a/0x912
[  973.728986]  [&lt;ffffffff814404d7&gt;] dev_queue_xmit+0xb/0xd
[  973.728986]  [&lt;ffffffff81449978&gt;] neigh_direct_output+0xc/0xe
[  973.728986]  [&lt;ffffffff81487811&gt;] ip_finish_output2+0x5db/0x609
[  973.728986]  [&lt;ffffffff81486853&gt;] ? dst_mtu+0x29/0x2e
[  973.728986]  [&lt;ffffffff81489590&gt;] ip_finish_output+0x152/0x15e
[  973.728986]  [&lt;ffffffff8148a0bc&gt;] ? ip_output+0x74/0x96
[  973.728986]  [&lt;ffffffff8148a0d4&gt;] ip_output+0x8c/0x96
[  973.728986]  [&lt;ffffffff81489652&gt;] ip_local_out+0x41/0x4a
[  973.728986]  [&lt;ffffffff81489e7d&gt;] ip_queue_xmit+0x5a5/0x609
[  973.728986]  [&lt;ffffffff814c559e&gt;] ? udp_set_csum+0x207/0x21e
[  973.728986]  [&lt;ffffffffa0202fe4&gt;] l2tp_xmit_skb+0x582/0x5d7 [l2tp_core]
[  973.728986]  [&lt;ffffffffa01b2466&gt;] pppol2tp_xmit+0x1f2/0x25e [l2tp_ppp]
[  973.728986]  [&lt;ffffffffa0184f59&gt;] ppp_channel_push+0xb5/0x14a [ppp_generic]
[  973.728986]  [&lt;ffffffffa01853ed&gt;] ppp_write+0x104/0x11c [ppp_generic]
[  973.728986]  [&lt;ffffffff811b2ec6&gt;] __vfs_write+0x56/0x120
[  973.728986]  [&lt;ffffffff8124c11d&gt;] ? fsnotify_perm+0x27/0x95
[  973.728986]  [&lt;ffffffff8124d41d&gt;] ? security_file_permission+0x4d/0x54
[  973.728986]  [&lt;ffffffff811b3f4c&gt;] vfs_write+0xbd/0x11b
[  973.728986]  [&lt;ffffffff811b4cb2&gt;] SyS_write+0x5e/0x96
[  973.728986]  [&lt;ffffffff81575ba5&gt;] entry_SYSCALL_64_fastpath+0x18/0xa8
[  973.728986]  [&lt;ffffffff810ae0fa&gt;] ? trace_hardirqs_off_caller+0x121/0x12f

Signed-off-by: Guillaume Nault &lt;g.nault@alphalink.fr&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
