aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/socket.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index b57b1be7252b..e1396fb87779 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -2724,11 +2724,15 @@ void tipc_sk_reinit(struct net *net)
2724 rhashtable_walk_start(&iter); 2724 rhashtable_walk_start(&iter);
2725 2725
2726 while ((tsk = rhashtable_walk_next(&iter)) && !IS_ERR(tsk)) { 2726 while ((tsk = rhashtable_walk_next(&iter)) && !IS_ERR(tsk)) {
2727 spin_lock_bh(&tsk->sk.sk_lock.slock); 2727 sock_hold(&tsk->sk);
2728 rhashtable_walk_stop(&iter);
2729 lock_sock(&tsk->sk);
2728 msg = &tsk->phdr; 2730 msg = &tsk->phdr;
2729 msg_set_prevnode(msg, tipc_own_addr(net)); 2731 msg_set_prevnode(msg, tipc_own_addr(net));
2730 msg_set_orignode(msg, tipc_own_addr(net)); 2732 msg_set_orignode(msg, tipc_own_addr(net));
2731 spin_unlock_bh(&tsk->sk.sk_lock.slock); 2733 release_sock(&tsk->sk);
2734 rhashtable_walk_start(&iter);
2735 sock_put(&tsk->sk);
2732 } 2736 }
2733 2737
2734 rhashtable_walk_stop(&iter); 2738 rhashtable_walk_stop(&iter);