diff options
author | 2022-12-08 16:07:53 -0800 | |
---|---|---|
committer | 2022-12-08 18:19:59 -0800 | |
commit | 837e8ac871499d337212e2161c046f5adf1bad33 (patch) | |
tree | 2d7bb495b5ce2bce04bf18afd6a57116391efabc /net/tipc/node.c | |
parent | Merge branch 'mlx4-better-big-tcp-support' (diff) | |
parent | Merge tag 'net-6.1-rc9' of git://git.kernel.org/pub/scm/linux/kernel/git/netd... (diff) | |
download | linux-837e8ac871499d337212e2161c046f5adf1bad33.tar.gz linux-837e8ac871499d337212e2161c046f5adf1bad33.tar.bz2 linux-837e8ac871499d337212e2161c046f5adf1bad33.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
No conflicts.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r-- | net/tipc/node.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c index b48d97cbbe29..49ddc484c4fe 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c @@ -1689,6 +1689,7 @@ int tipc_node_xmit(struct net *net, struct sk_buff_head *list, struct tipc_node *n; struct sk_buff_head xmitq; bool node_up = false; + struct net *peer_net; int bearer_id; int rc; @@ -1705,18 +1706,23 @@ int tipc_node_xmit(struct net *net, struct sk_buff_head *list, return -EHOSTUNREACH; } + rcu_read_lock(); tipc_node_read_lock(n); node_up = node_is_up(n); - if (node_up && n->peer_net && check_net(n->peer_net)) { + peer_net = n->peer_net; + tipc_node_read_unlock(n); + if (node_up && peer_net && check_net(peer_net)) { /* xmit inner linux container */ - tipc_lxc_xmit(n->peer_net, list); + tipc_lxc_xmit(peer_net, list); if (likely(skb_queue_empty(list))) { - tipc_node_read_unlock(n); + rcu_read_unlock(); tipc_node_put(n); return 0; } } + rcu_read_unlock(); + tipc_node_read_lock(n); bearer_id = n->active_links[selector & 1]; if (unlikely(bearer_id == INVALID_BEARER_ID)) { tipc_node_read_unlock(n); |