Re: [PATCH v4 2/3] ipv4: Namespaceify tcp_fastopen_key knob

2017-09-26 Thread 严海双


> On 2017年9月27日, at 上午2:18, David Miller  wrote:
> 
> From: 严海双 
> Date: Tue, 26 Sep 2017 09:25:51 +0800
> 
>>> On 2017年9月26日, at 上午7:24, David Miller  wrote:
>>> 
>>> From: Haishuang Yan 
>>> Date: Fri, 22 Sep 2017 21:48:43 +0800
>>> 
 @@ -9,13 +9,18 @@
 #include 
 #include 
 
 -struct tcp_fastopen_context __rcu *tcp_fastopen_ctx;
 -
 -static DEFINE_SPINLOCK(tcp_fastopen_ctx_lock);
 -
 -void tcp_fastopen_init_key_once(bool publish)
 +void tcp_fastopen_init_key_once(struct net *net)
>>> 
>>> Why did you remove the 'publish' logic from this function?
>>> 
>> 
>> I think this logic is not necessary now, in proc_tcp_fastopen_key, I have 
>> removed 
>> tcp_fastopen_init_key_once(false) where the ‘publish’ is false:
>> 
>> -/* Generate a dummy secret but don't publish it. This
>> - * is needed so we don't regenerate a new key on the
>> - * first invocation of tcp_fastopen_cookie_gen
>> - */
>> -tcp_fastopen_init_key_once(false);
>> -tcp_fastopen_reset_cipher(user_key, TCP_FASTOPEN_KEY_LENGTH);
>> +tcp_fastopen_reset_cipher(net, user_key, 
>> TCP_FASTOPEN_KEY_LENGTH);
>> 
>> It said we don't regenerate a new key on first invocation of 
>> tcp_fastopen_cookie_gen, 
>> but in tcp_fastopen_cookie_gen,it didn’t  call tcp_fastopen_init_key_once 
>> since
>> from commit dfea2aa654243 (tcp: Do not call tcp_fastopen_reset_cipher from 
>> interrupt context):
>> 
>> And in other places where call tcp_fastopen_init_key_once, the ‘publish’ is 
>> always true:
> 
> Ok, this simplification seems legitimate.
> 
> But it is unrelated to this namespacification.  So it should be in a separate 
> patch,
> and should be documented well in the commit message using the great 
> explanation you
> gave to me above.
> 
> Please respin this series, with this patch #2 split up into two changes.
> 
> Thank you.

Okay, thanks David for advise. I will split the patch #2 in next commit.





Re: [PATCH v4 2/3] ipv4: Namespaceify tcp_fastopen_key knob

2017-09-26 Thread David Miller
From: 严海双 
Date: Tue, 26 Sep 2017 09:25:51 +0800

>> On 2017年9月26日, at 上午7:24, David Miller  wrote:
>> 
>> From: Haishuang Yan 
>> Date: Fri, 22 Sep 2017 21:48:43 +0800
>> 
>>> @@ -9,13 +9,18 @@
>>> #include 
>>> #include 
>>> 
>>> -struct tcp_fastopen_context __rcu *tcp_fastopen_ctx;
>>> -
>>> -static DEFINE_SPINLOCK(tcp_fastopen_ctx_lock);
>>> -
>>> -void tcp_fastopen_init_key_once(bool publish)
>>> +void tcp_fastopen_init_key_once(struct net *net)
>> 
>> Why did you remove the 'publish' logic from this function?
>> 
> 
> I think this logic is not necessary now, in proc_tcp_fastopen_key, I have 
> removed 
> tcp_fastopen_init_key_once(false) where the ‘publish’ is false:
> 
> - /* Generate a dummy secret but don't publish it. This
> -  * is needed so we don't regenerate a new key on the
> -  * first invocation of tcp_fastopen_cookie_gen
> -  */
> - tcp_fastopen_init_key_once(false);
> - tcp_fastopen_reset_cipher(user_key, TCP_FASTOPEN_KEY_LENGTH);
> + tcp_fastopen_reset_cipher(net, user_key, 
> TCP_FASTOPEN_KEY_LENGTH);
> 
> It said we don't regenerate a new key on first invocation of 
> tcp_fastopen_cookie_gen, 
> but in tcp_fastopen_cookie_gen,it didn’t  call tcp_fastopen_init_key_once 
> since
> from commit dfea2aa654243 (tcp: Do not call tcp_fastopen_reset_cipher from 
> interrupt context):
> 
> And in other places where call tcp_fastopen_init_key_once, the ‘publish’ is 
> always true:

Ok, this simplification seems legitimate.

But it is unrelated to this namespacification.  So it should be in a separate 
patch,
and should be documented well in the commit message using the great explanation 
you
gave to me above.

Please respin this series, with this patch #2 split up into two changes.

Thank you.


Re: [PATCH v4 2/3] ipv4: Namespaceify tcp_fastopen_key knob

2017-09-25 Thread 严海双


> On 2017年9月26日, at 上午7:24, David Miller  wrote:
> 
> From: Haishuang Yan 
> Date: Fri, 22 Sep 2017 21:48:43 +0800
> 
>> @@ -9,13 +9,18 @@
>> #include 
>> #include 
>> 
>> -struct tcp_fastopen_context __rcu *tcp_fastopen_ctx;
>> -
>> -static DEFINE_SPINLOCK(tcp_fastopen_ctx_lock);
>> -
>> -void tcp_fastopen_init_key_once(bool publish)
>> +void tcp_fastopen_init_key_once(struct net *net)
> 
> Why did you remove the 'publish' logic from this function?
> 

I think this logic is not necessary now, in proc_tcp_fastopen_key, I have 
removed 
tcp_fastopen_init_key_once(false) where the ‘publish’ is false:

-   /* Generate a dummy secret but don't publish it. This
-* is needed so we don't regenerate a new key on the
-* first invocation of tcp_fastopen_cookie_gen
-*/
-   tcp_fastopen_init_key_once(false);
-   tcp_fastopen_reset_cipher(user_key, TCP_FASTOPEN_KEY_LENGTH);
+   tcp_fastopen_reset_cipher(net, user_key, 
TCP_FASTOPEN_KEY_LENGTH);

It said we don't regenerate a new key on first invocation of 
tcp_fastopen_cookie_gen, 
but in tcp_fastopen_cookie_gen,it didn’t  call tcp_fastopen_init_key_once since
from commit dfea2aa654243 (tcp: Do not call tcp_fastopen_reset_cipher from 
interrupt context):

And in other places where call tcp_fastopen_init_key_once, the ‘publish’ is 
always true:

--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -222,7 +222,7 @@ int inet_listen(struct socket *sock, int backlog)
(tcp_fastopen & TFO_SERVER_ENABLE) &&
!inet_csk(sk)->icsk_accept_queue.fastopenq.max_qlen) {
fastopen_queue_tune(sk, backlog);
-   tcp_fastopen_init_key_once(true);
+   tcp_fastopen_init_key_once(sock_net(sk));
}

--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -2749,7 +2749,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
case TCP_FASTOPEN:
if (val >= 0 && ((1 << sk->sk_state) & (TCPF_CLOSE |
TCPF_LISTEN))) {
-   tcp_fastopen_init_key_once(true);
+   tcp_fastopen_init_key_once(net);

fastopen_queue_tune(sk, val);
} else {


So I deleted ‘publish’ logic to ensure it was always true.










Re: [PATCH v4 2/3] ipv4: Namespaceify tcp_fastopen_key knob

2017-09-25 Thread David Miller
From: Haishuang Yan 
Date: Fri, 22 Sep 2017 21:48:43 +0800

> @@ -9,13 +9,18 @@
>  #include 
>  #include 
>  
> -struct tcp_fastopen_context __rcu *tcp_fastopen_ctx;
> -
> -static DEFINE_SPINLOCK(tcp_fastopen_ctx_lock);
> -
> -void tcp_fastopen_init_key_once(bool publish)
> +void tcp_fastopen_init_key_once(struct net *net)

Why did you remove the 'publish' logic from this function?