sctp: avoid irq lock inversion while call sk->sk_data_ready()
authorWei Yongjun <yjwei@cn.fujitsu.com>
Wed, 28 Apr 2010 08:47:18 +0000 (08:47 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 28 Apr 2010 19:16:31 +0000 (12:16 -0700)
commit561b1733a465cf9677356b40c27653dd45f1ac56
tree86d6720a6497a0b3faa9685596d4f85d3858b6fe
parent8d238b25b1ec22a73b1c2206f111df2faaff8285
sctp: avoid irq lock inversion while call sk->sk_data_ready()

sk->sk_data_ready() of sctp socket can be called from both BH and non-BH
contexts, but the default sk->sk_data_ready(), sock_def_readable(), can
not be used in this case. Therefore, we have to make a new function
sctp_data_ready() to grab sk->sk_data_ready() with BH disabling.

=========================================================
[ INFO: possible irq lock inversion dependency detected ]
2.6.33-rc6 #129
---------------------------------------------------------
sctp_darn/1517 just changed the state of lock:
 (clock-AF_INET){++.?..}, at: [<c06aab60>] sock_def_readable+0x20/0x80
but this lock took another, SOFTIRQ-unsafe lock in the past:
 (slock-AF_INET){+.-...}

and interrupts could create inverse lock ordering between them.

other info that might help us debug this:
1 lock held by sctp_darn/1517:
 #0:  (sk_lock-AF_INET){+.+.+.}, at: [<cdfe363d>] sctp_sendmsg+0x23d/0xc00 [sctp]

Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sctp/sctp.h
net/sctp/endpointola.c
net/sctp/socket.c