Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Sep 2012 07:13:21 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r240985 - head/sys/netinet
Message-ID:  <201209270713.q8R7DLA8072717@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Thu Sep 27 07:13:21 2012
New Revision: 240985
URL: http://svn.freebsd.org/changeset/base/240985

Log:
  Fix bug in TCP_KEEPCNT setting, which slipped in in the last round
  of reviewing of r231025.
  
  Unlike other options from this family TCP_KEEPCNT doesn't specify
  time interval, but a count, thus parameter supplied doesn't need
  to be multiplied by hz.
  
  Reported & tested by:	amdmi3

Modified:
  head/sys/netinet/tcp_usrreq.c

Modified: head/sys/netinet/tcp_usrreq.c
==============================================================================
--- head/sys/netinet/tcp_usrreq.c	Thu Sep 27 06:05:54 2012	(r240984)
+++ head/sys/netinet/tcp_usrreq.c	Thu Sep 27 07:13:21 2012	(r240985)
@@ -1473,7 +1473,6 @@ unlock_and_done:
 
 		case TCP_KEEPIDLE:
 		case TCP_KEEPINTVL:
-		case TCP_KEEPCNT:
 		case TCP_KEEPINIT:
 			INP_WUNLOCK(inp);
 			error = sooptcopyin(sopt, &ui, sizeof(ui), sizeof(ui));
@@ -1506,13 +1505,6 @@ unlock_and_done:
 					tcp_timer_activate(tp, TT_2MSL,
 					    TP_MAXIDLE(tp));
 				break;
-			case TCP_KEEPCNT:
-				tp->t_keepcnt = ui;
-				if ((tp->t_state == TCPS_FIN_WAIT_2) &&
-				    (TP_MAXIDLE(tp) > 0))
-					tcp_timer_activate(tp, TT_2MSL,
-					    TP_MAXIDLE(tp));
-				break;
 			case TCP_KEEPINIT:
 				tp->t_keepinit = ui;
 				if (tp->t_state == TCPS_SYN_RECEIVED ||
@@ -1523,6 +1515,20 @@ unlock_and_done:
 			}
 			goto unlock_and_done;
 
+		case TCP_KEEPCNT:
+			INP_WUNLOCK(inp);
+			error = sooptcopyin(sopt, &ui, sizeof(ui), sizeof(ui));
+			if (error)
+				return (error);
+
+			INP_WLOCK_RECHECK(inp);
+			tp->t_keepcnt = ui;
+			if ((tp->t_state == TCPS_FIN_WAIT_2) &&
+			    (TP_MAXIDLE(tp) > 0))
+				tcp_timer_activate(tp, TT_2MSL,
+				    TP_MAXIDLE(tp));
+			goto unlock_and_done;
+
 		default:
 			INP_WUNLOCK(inp);
 			error = ENOPROTOOPT;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209270713.q8R7DLA8072717>