From: Jon M. <jm...@re...> - 2020-03-25 16:37:53
|
On 3/25/20 3:43 AM, Hoang Le wrote: > In the commit f73b12812a3d > ("tipc: improve throughput between nodes in netns"), we're missing a check > to handle TIPC_DIRECT_MSG type, it's still using old sending mechanism for > this message type. So, throughput improvement is not significant as > expected. > > Besides that, when sending a large message with that type, we're also > handle wrong receiving queue, it should be enqueued in socket receiving > instead of multicast messages. > > Fix this by adding the missing case for TIPC_DIRECT_MSG. > > Fixes: f73b12812a3d ("tipc: improve throughput between nodes in netns") > Reported-by: Tuong Lien <tuo...@de...> > Signed-off-by: Hoang Le <hoa...@de...> > --- > net/tipc/msg.h | 5 +++++ > net/tipc/node.c | 3 ++- > net/tipc/socket.c | 2 +- > 3 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/net/tipc/msg.h b/net/tipc/msg.h > index 6d466ebdb64f..871feadbbc19 100644 > --- a/net/tipc/msg.h > +++ b/net/tipc/msg.h > @@ -394,6 +394,11 @@ static inline u32 msg_connected(struct tipc_msg *m) > return msg_type(m) == TIPC_CONN_MSG; > } > > +static inline u32 msg_direct(struct tipc_msg *m) > +{ > + return msg_type(m) == TIPC_DIRECT_MSG; > +} > + > static inline u32 msg_errcode(struct tipc_msg *m) > { > return msg_bits(m, 1, 25, 0xf); > diff --git a/net/tipc/node.c b/net/tipc/node.c > index 0c88778c88b5..10292c942384 100644 > --- a/net/tipc/node.c > +++ b/net/tipc/node.c > @@ -1586,7 +1586,8 @@ static void tipc_lxc_xmit(struct net *peer_net, struct sk_buff_head *list) > case TIPC_MEDIUM_IMPORTANCE: > case TIPC_HIGH_IMPORTANCE: > case TIPC_CRITICAL_IMPORTANCE: > - if (msg_connected(hdr) || msg_named(hdr)) { > + if (msg_connected(hdr) || msg_named(hdr) || > + msg_direct(hdr)) { > tipc_loopback_trace(peer_net, list); > spin_lock_init(&list->lock); > tipc_sk_rcv(peer_net, list); > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > index 693e8902161e..87466607097f 100644 > --- a/net/tipc/socket.c > +++ b/net/tipc/socket.c > @@ -1461,7 +1461,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen) > } > > __skb_queue_head_init(&pkts); > - mtu = tipc_node_get_mtu(net, dnode, tsk->portid, false); > + mtu = tipc_node_get_mtu(net, dnode, tsk->portid, true); > rc = tipc_msg_build(hdr, m, 0, dlen, mtu, &pkts); > if (unlikely(rc != dlen)) > return rc; Acked-by: Jon Maloy <jm...@re...> |