Re: [PATCH] tcp_input: move out condition check from tcp_data_queue()
On Sun, 2017-08-06 at 21:57 +0400, Ilya Matveychikov wrote: > > On Aug 6, 2017, at 9:07 PM, Eric Dumazet wrote: > > > > On Sun, 2017-08-06 at 13:51 +0400, Ilya Matveychikov wrote: > >> As tcp_data_queue() function is used just only twice it's better > >> to move out the first check and wrap it with inline. It saves a > >> single call in case the condition evaluated as true. > >> ... > > We wont accept such a change, because this code does not need to be > > inlined in the callers, ( and btw inline in .c files are discouraged > > these days ) > > Not sure that I understand you point. What’s the reason for that code > not need to be inlined in the callers? You sent a patch, you have to explain why it is needed. Your changelog is absolutely not giving a compelling reason. TCP stack is already complex, no need to add yet another obfuscation unless there is a strong reason.
Re: [PATCH] tcp_input: move out condition check from tcp_data_queue()
> On Aug 6, 2017, at 9:07 PM, Eric Dumazet wrote: > > On Sun, 2017-08-06 at 13:51 +0400, Ilya Matveychikov wrote: >> As tcp_data_queue() function is used just only twice it's better >> to move out the first check and wrap it with inline. It saves a >> single call in case the condition evaluated as true. >> >> Signed-off-by: Ilya V. Matveychikov >> --- >> net/ipv4/tcp_input.c | 14 +- >> 1 file changed, 9 insertions(+), 5 deletions(-) >> >> diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c >> index 2920e0c..141a722 100644 >> --- a/net/ipv4/tcp_input.c >> +++ b/net/ipv4/tcp_input.c >> @@ -4585,16 +4585,12 @@ int tcp_send_rcvq(struct sock *sk, struct msghdr >> *msg, size_t size) >> >> } >> >> -static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) >> +static void __tcp_data_queue(struct sock *sk, struct sk_buff *skb) >> { >> struct tcp_sock *tp = tcp_sk(sk); >> bool fragstolen = false; >> int eaten = -1; >> >> -if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq) { >> -__kfree_skb(skb); >> -return; >> -} >> skb_dst_drop(skb); >> __skb_pull(skb, tcp_hdr(skb)->doff * 4); >> >> @@ -4703,6 +4699,14 @@ static void tcp_data_queue(struct sock *sk, struct >> sk_buff *skb) >> tcp_data_queue_ofo(sk, skb); >> } >> >> +static inline void tcp_data_queue(struct sock *sk, struct sk_buff *skb) >> +{ >> +if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq) >> +__kfree_skb(skb); >> +else >> +__tcp_data_queue(sk, skb); >> +} >> + > > We wont accept such a change, because this code does not need to be > inlined in the callers, ( and btw inline in .c files are discouraged > these days ) Not sure that I understand you point. What’s the reason for that code not need to be inlined in the callers?
Re: [PATCH] tcp_input: move out condition check from tcp_data_queue()
On Sun, 2017-08-06 at 13:51 +0400, Ilya Matveychikov wrote: > As tcp_data_queue() function is used just only twice it's better > to move out the first check and wrap it with inline. It saves a > single call in case the condition evaluated as true. > > Signed-off-by: Ilya V. Matveychikov > --- > net/ipv4/tcp_input.c | 14 +- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c > index 2920e0c..141a722 100644 > --- a/net/ipv4/tcp_input.c > +++ b/net/ipv4/tcp_input.c > @@ -4585,16 +4585,12 @@ int tcp_send_rcvq(struct sock *sk, struct msghdr > *msg, size_t size) > > } > > -static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) > +static void __tcp_data_queue(struct sock *sk, struct sk_buff *skb) > { > struct tcp_sock *tp = tcp_sk(sk); > bool fragstolen = false; > int eaten = -1; > > - if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq) { > - __kfree_skb(skb); > - return; > - } > skb_dst_drop(skb); > __skb_pull(skb, tcp_hdr(skb)->doff * 4); > > @@ -4703,6 +4699,14 @@ static void tcp_data_queue(struct sock *sk, struct > sk_buff *skb) > tcp_data_queue_ofo(sk, skb); > } > > +static inline void tcp_data_queue(struct sock *sk, struct sk_buff *skb) > +{ > + if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq) > + __kfree_skb(skb); > + else > + __tcp_data_queue(sk, skb); > +} > + We wont accept such a change, because this code does not need to be inlined in the callers, ( and btw inline in .c files are discouraged these days )