From: Pavel Emelyanov <xemul@parallels.com>
To: Glauber Costa <glommer@parallels.com>
Cc: Linux Netdev List <netdev@vger.kernel.org>,
David Miller <davem@davemloft.net>
Subject: Re: [PATCH 2/3] tcp: Initial repair mode
Date: Thu, 29 Mar 2012 13:52:26 +0400 [thread overview]
Message-ID: <4F7430DA.7050702@parallels.com> (raw)
In-Reply-To: <4F734864.6000007@parallels.com>
On 03/28/2012 09:20 PM, Glauber Costa wrote:
>> diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
>> index 9e7f9ba..65ae921 100644
>> --- a/net/ipv4/tcp.c
>> +++ b/net/ipv4/tcp.c
>> @@ -1935,7 +1935,9 @@ void tcp_close(struct sock *sk, long timeout)
>> * advertise a zero window, then kill -9 the FTP client, wheee...
>> * Note: timeout is always zero in such a case.
>> */
>> - if (data_was_unread) {
>> + if (tcp_sk(sk)->repair) {
>> + sk->sk_prot->disconnect(sk, 0);
>> + } else if (data_was_unread) {
>> /* Unread data was tossed, zap the connection. */
>> NET_INC_STATS_USER(sock_net(sk), LINUX_MIB_TCPABORTONCLOSE);
>> tcp_set_state(sk, TCP_CLOSE);
>> @@ -2074,6 +2076,8 @@ int tcp_disconnect(struct sock *sk, int flags)
>> /* ABORT function of RFC793 */
>> if (old_state == TCP_LISTEN) {
>> inet_csk_listen_stop(sk);
>> + } else if (unlikely(tp->repair)) {
>> + sk->sk_err = ECONNABORTED;
>> } else if (tcp_need_reset(old_state) ||
>> (tp->snd_nxt != tp->write_seq&&
>> (1<< old_state)& (TCPF_CLOSING | TCPF_LAST_ACK))) {
>
> The patch looks good in general.
> Single nitpick is that maybe you should be consistent in your use of
> unlikely. All of them seems equally unlikely, so I'd say you should wrap
> both.
OK, will fix this.
>>
>> + case TCP_REPAIR:
>> + if (!tcp_can_repair_sock(sk))
>> + err = -EPERM;
>> + else if (val == 1) {
>> + tp->repair = 1;
>> + sk->sk_reuse = 2;
>> + tp->repair_queue = TCP_NO_QUEUE;
>> + } else if (val == 0) {
>> + tp->repair = 0;
>> + sk->sk_reuse = 0;
>> + tcp_send_window_probe(sk);
>> + } else
>> + err = -EINVAL;
>> +
>> + break;
>> +
>> + case TCP_REPAIR_QUEUE:
>
> Don't we need to test tcp_can_repair_sock() in all of them?
> I understand that TCP_REPAIR always comes before the other ones,
> so that means the socket is already in repair mode. But what
> should be the behavior in case the process drops privileges?
> Should it still be able to continue with the repair?
I believe it should. Because this model gives us the ability to do
both -- let others repair socket in non-root mode and keep one at
hands, giving it to anybody else only when the repair is complete.
> My first impression is that we need CAP_NET_ADMIN all along, so we
> should make sure it's there.
>
> .
>
next prev parent reply other threads:[~2012-03-29 9:52 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-28 15:36 [PATCH net-next 0/3] TCP connection repair (v3) Pavel Emelyanov
2012-03-28 15:36 ` [PATCH 1/3] tcp: Move code around Pavel Emelyanov
2012-03-28 15:37 ` [PATCH 2/3] tcp: Initial repair mode Pavel Emelyanov
2012-03-28 17:20 ` Glauber Costa
2012-03-29 9:52 ` Pavel Emelyanov [this message]
2012-03-28 20:39 ` Ben Hutchings
2012-03-29 9:53 ` Pavel Emelyanov
2012-03-28 15:38 ` [PATCH 3/3] tcp: Repair socket queues Pavel Emelyanov
2012-03-29 10:30 ` Li Yu
2012-03-29 10:36 ` Pavel Emelyanov
2012-03-29 10:41 ` Li Yu
2012-03-29 10:41 ` Li Yu
-- strict thread matches above, loose matches on Subject: below --
2012-03-06 9:54 [RFC][PATCH 0/3] TCP connection repair (v2) Pavel Emelyanov
2012-03-06 9:55 ` [PATCH 2/3] tcp: Initial repair mode Pavel Emelyanov
2012-03-06 13:11 ` Glauber Costa
2012-03-06 20:16 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F7430DA.7050702@parallels.com \
--to=xemul@parallels.com \
--cc=davem@davemloft.net \
--cc=glommer@parallels.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).