diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index 2043fc9..fa124f1 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -938,25 +938,16 @@ send:
 			 * fractional unless the send sockbuf can be
 			 * emptied:
 			 */
-			max_len = (tp->t_maxseg - optlen);
-			if ((off + len) < sbavail(&so->so_snd)) {
+			max_len = (tp->t_maxopd - optlen);
+			if (len > (max_len << 1)) {
 				moff = len % max_len;
 				if (moff != 0) {
 					len -= moff;
 					sendalot = 1;
 				}
 			}
-
-			/*
-			 * In case there are too many small fragments
-			 * don't use TSO:
-			 */
-			if (len <= max_len) {
-				len = max_len;
-				sendalot = 1;
-				tso = 0;
-			}
-
+			KASSERT(len > max_len,
+			    ("[%s:%d]: len <= max_len", __func__, __LINE__));
 			/*
 			 * Send the FIN in a separate segment
 			 * after the bulk sending is done.
