diff options
author | Ying Xue <[email protected]> | 2013-12-27 10:18:28 +0800 |
---|---|---|
committer | David S. Miller <[email protected]> | 2013-12-29 22:24:07 -0500 |
commit | 84602761ca4495dd409be936dfa93ed20c946684 (patch) | |
tree | 5936e501cc24cc66cf298a8e6713cbb04b4427b0 /include/linux/fpga/fpga-mgr.h | |
parent | 8eb9bff0edefcce50116ec50397a60dd626022d6 (diff) |
tipc: fix deadlock during socket release
A deadlock might occur if name table is withdrawn in socket release
routine, and while packets are still being received from bearer.
CPU0 CPU1
T0: recv_msg() release()
T1: tipc_recv_msg() tipc_withdraw()
T2: [grab node lock] [grab port lock]
T3: tipc_link_wakeup_ports() tipc_nametbl_withdraw()
T4: [grab port lock]* named_cluster_distribute()
T5: wakeupdispatch() tipc_link_send()
T6: [grab node lock]*
The opposite order of holding port lock and node lock on above two
different paths may result in a deadlock. If socket lock instead of
port lock is used to protect port instance in tipc_withdraw(), the
reverse order of holding port lock and node lock will be eliminated,
as a result, the deadlock is killed as well.
Reported-by: Lars Everbrand <[email protected]>
Reviewed-by: Erik Hugne <[email protected]>
Signed-off-by: Ying Xue <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Diffstat (limited to 'include/linux/fpga/fpga-mgr.h')
0 files changed, 0 insertions, 0 deletions