diff mbox

tcp: cleanup of cwnd initialization in tcp_init_metrics()

Message ID alpine.LNX.2.00.1012221938030.16569@pobox.suse.cz
State Superseded, archived
Delegated to: David Miller
Headers show

Commit Message

Jiri Kosina Dec. 22, 2010, 6:39 p.m. UTC
Commit 86bcebafc5e7f5 ("tcp: fix >2 iw selection") fixed a case when 
congestion window initialization has been mistakenly omitted by 
introducing cwnd label and putting backwards jump from the end of the 
function.

This makes the code unnecessarily tricky to read and understand on a first 
sight.

Shuffle the code around a little bit to make it more obvious.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
---
 net/ipv4/tcp_input.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

Comments

Eric Dumazet Dec. 23, 2010, 8:24 a.m. UTC | #1
Le mercredi 22 décembre 2010 à 19:39 +0100, Jiri Kosina a écrit :
> Commit 86bcebafc5e7f5 ("tcp: fix >2 iw selection") fixed a case when 
> congestion window initialization has been mistakenly omitted by 
> introducing cwnd label and putting backwards jump from the end of the 
> function.
> 
> This makes the code unnecessarily tricky to read and understand on a first 
> sight.
> 
> Shuffle the code around a little bit to make it more obvious.

Well in fine you have

	if (inet_csk(sk)->icsk_rto < TCP_TIMEOUT_INIT && !tp->rx_opt.saw_tstamp)
		goto reset;
	goto out;
reset:

Is that really more obvious ? ;)

> 
> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
> ---
>  net/ipv4/tcp_input.c |   10 ++++------
>  1 files changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
> index 6d8ab1c..dddff6d 100644
> --- a/net/ipv4/tcp_input.c
> +++ b/net/ipv4/tcp_input.c
> @@ -915,11 +915,7 @@ static void tcp_init_metrics(struct sock *sk)
>  	if (inet_csk(sk)->icsk_rto < TCP_TIMEOUT_INIT && !tp->rx_opt.saw_tstamp)
>  		goto reset;
>  
> -cwnd:
> -	tp->snd_cwnd = tcp_init_cwnd(tp, dst);
> -	tp->snd_cwnd_stamp = tcp_time_stamp;
> -	return;
> -
> +	goto out;
>  reset:
>  	/* Play conservative. If timestamps are not
>  	 * supported, TCP will fail to recalculate correct
> @@ -930,7 +926,9 @@ reset:
>  		tp->mdev = tp->mdev_max = tp->rttvar = TCP_TIMEOUT_INIT;
>  		inet_csk(sk)->icsk_rto = TCP_TIMEOUT_INIT;
>  	}
> -	goto cwnd;
> +out:
> +	tp->snd_cwnd = tcp_init_cwnd(tp, dst);
> +	tp->snd_cwnd_stamp = tcp_time_stamp;
>  }
>  
>  static void tcp_update_reordering(struct sock *sk, const int metric,




--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jiri Kosina Dec. 23, 2010, 9:03 a.m. UTC | #2
On Thu, 23 Dec 2010, Eric Dumazet wrote:

> Le mercredi 22 décembre 2010 à 19:39 +0100, Jiri Kosina a écrit :
> > Commit 86bcebafc5e7f5 ("tcp: fix >2 iw selection") fixed a case when 
> > congestion window initialization has been mistakenly omitted by 
> > introducing cwnd label and putting backwards jump from the end of the 
> > function.
> > 
> > This makes the code unnecessarily tricky to read and understand on a first 
> > sight.
> > 
> > Shuffle the code around a little bit to make it more obvious.
> 
> Well in fine you have
> 
> 	if (inet_csk(sk)->icsk_rto < TCP_TIMEOUT_INIT && !tp->rx_opt.saw_tstamp)
> 		goto reset;
> 	goto out;
> reset:
> 
> Is that really more obvious ? ;)

To me it seems much more obvious than goto from the very end of the 
function somewhere into the middle and returning from there, but 
definitely a matter of personal taste.
Eric Dumazet Dec. 23, 2010, 9:14 a.m. UTC | #3
Le jeudi 23 décembre 2010 à 10:03 +0100, Jiri Kosina a écrit :
> On Thu, 23 Dec 2010, Eric Dumazet wrote:
> 
> > Le mercredi 22 décembre 2010 à 19:39 +0100, Jiri Kosina a écrit :
> > > Commit 86bcebafc5e7f5 ("tcp: fix >2 iw selection") fixed a case when 
> > > congestion window initialization has been mistakenly omitted by 
> > > introducing cwnd label and putting backwards jump from the end of the 
> > > function.
> > > 
> > > This makes the code unnecessarily tricky to read and understand on a first 
> > > sight.
> > > 
> > > Shuffle the code around a little bit to make it more obvious.
> > 
> > Well in fine you have
> > 
> > 	if (inet_csk(sk)->icsk_rto < TCP_TIMEOUT_INIT && !tp->rx_opt.saw_tstamp)
> > 		goto reset;
> > 	goto out;
> > reset:
> > 
> > Is that really more obvious ? ;)
> 
> To me it seems much more obvious than goto from the very end of the 
> function somewhere into the middle and returning from there, but 
> definitely a matter of personal taste.
> 

You dont understand what I said. Please read again.

To me I prefer you _finish_ the cleanup so that we have :

	if (some condition) {
reset:
	}

out:

You remove two "goto" in the process.

Is that clear now ?



--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 6d8ab1c..dddff6d 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -915,11 +915,7 @@  static void tcp_init_metrics(struct sock *sk)
 	if (inet_csk(sk)->icsk_rto < TCP_TIMEOUT_INIT && !tp->rx_opt.saw_tstamp)
 		goto reset;
 
-cwnd:
-	tp->snd_cwnd = tcp_init_cwnd(tp, dst);
-	tp->snd_cwnd_stamp = tcp_time_stamp;
-	return;
-
+	goto out;
 reset:
 	/* Play conservative. If timestamps are not
 	 * supported, TCP will fail to recalculate correct
@@ -930,7 +926,9 @@  reset:
 		tp->mdev = tp->mdev_max = tp->rttvar = TCP_TIMEOUT_INIT;
 		inet_csk(sk)->icsk_rto = TCP_TIMEOUT_INIT;
 	}
-	goto cwnd;
+out:
+	tp->snd_cwnd = tcp_init_cwnd(tp, dst);
+	tp->snd_cwnd_stamp = tcp_time_stamp;
 }
 
 static void tcp_update_reordering(struct sock *sk, const int metric,